Exclude unwanted directories

Change-Id: I171e29fec8f18558ddc8d3e42fe18fd146f1431a
diff --git a/source/common/unicode/brkiter.h b/source/common/unicode/brkiter.h
deleted file mode 100644
index bdd3cc7..0000000
--- a/source/common/unicode/brkiter.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1997-2010, 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 snippets 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
-
diff --git a/source/common/unicode/bytestream.h b/source/common/unicode/bytestream.h
deleted file mode 100644
index fb9e07a..0000000
--- a/source/common/unicode/bytestream.h
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright (C) 2009-2010, International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-// Copyright 2007 Google Inc. All Rights Reserved.
-// Author: sanjay@google.com (Sanjay Ghemawat)
-//
-// Abstract interface that consumes a sequence of bytes (ByteSink).
-//
-// Used so that we can write a single piece of code that can operate
-// on a variety of output string types.
-//
-// Various implementations of this interface are provided:
-//   ByteSink:
-//      CheckedArrayByteSink    Write to a flat array, with bounds checking
-//      StringByteSink          Write to an STL string
-
-// This code is a contribution of Google code, and the style used here is
-// a compromise between the original Google code and the ICU coding guidelines.
-// For example, data types are ICU-ified (size_t,int->int32_t),
-// and API comments doxygen-ified, but function names and behavior are
-// as in the original, if possible.
-// Assertion-style error handling, not available in ICU, was changed to
-// parameter "pinning" similar to UnicodeString.
-//
-// In addition, this is only a partial port of the original Google code,
-// limited to what was needed so far. The (nearly) complete original code
-// is in the ICU svn repository at icuhtml/trunk/design/strings/contrib
-// (see ICU ticket 6765, r25517).
-
-#ifndef __BYTESTREAM_H__
-#define __BYTESTREAM_H__
-
-/**
- * \file
- * \brief C++ API: Interface for writing bytes, and implementation classes.
- */
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/std_string.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * A ByteSink can be filled with bytes.
- * @stable ICU 4.2
- */
-class U_COMMON_API ByteSink : public UMemory {
-public:
-  /**
-   * Default constructor.
-   * @stable ICU 4.2
-   */
-  ByteSink() { }
-  /**
-   * Virtual destructor.
-   * @stable ICU 4.2
-   */
-  virtual ~ByteSink() { }
-
-  /**
-   * Append "bytes[0,n-1]" to this.
-   * @param bytes the pointer to the bytes
-   * @param n the number of bytes; must be non-negative
-   * @stable ICU 4.2
-   */
-  virtual void Append(const char* bytes, int32_t n) = 0;
-
-  /**
-   * Returns a writable buffer for appending and writes the buffer's capacity to
-   * *result_capacity. Guarantees *result_capacity>=min_capacity.
-   * May return a pointer to the caller-owned scratch buffer which must have
-   * scratch_capacity>=min_capacity.
-   * The returned buffer is only valid until the next operation
-   * on this ByteSink.
-   *
-   * After writing at most *result_capacity bytes, call Append() with the
-   * pointer returned from this function and the number of bytes written.
-   * Many Append() implementations will avoid copying bytes if this function
-   * returned an internal buffer.
-   *
-   * Partial usage example:
-   *  int32_t capacity;
-   *  char* buffer = sink->GetAppendBuffer(..., &capacity);
-   *  ... Write n bytes into buffer, with n <= capacity.
-   *  sink->Append(buffer, n);
-   * In many implementations, that call to Append will avoid copying bytes.
-   *
-   * If the ByteSink allocates or reallocates an internal buffer, it should use
-   * the desired_capacity_hint if appropriate.
-   * If a caller cannot provide a reasonable guess at the desired capacity,
-   * it should pass desired_capacity_hint=0.
-   *
-   * If a non-scratch buffer is returned, the caller may only pass
-   * a prefix to it to Append().
-   * That is, it is not correct to pass an interior pointer to Append().
-   *
-   * The default implementation always returns the scratch buffer.
-   *
-   * @param min_capacity required minimum capacity of the returned buffer;
-   *                     must be non-negative
-   * @param desired_capacity_hint desired capacity of the returned buffer;
-   *                              must be non-negative
-   * @param scratch default caller-owned buffer
-   * @param scratch_capacity capacity of the scratch buffer
-   * @param result_capacity pointer to an integer which will be set to the
-   *                        capacity of the returned buffer
-   * @return a buffer with *result_capacity>=min_capacity
-   * @stable ICU 4.2
-   */
-  virtual char* GetAppendBuffer(int32_t min_capacity,
-                                int32_t desired_capacity_hint,
-                                char* scratch, int32_t scratch_capacity,
-                                int32_t* result_capacity);
-
-  /**
-   * Flush internal buffers.
-   * Some byte sinks use internal buffers or provide buffering
-   * and require calling Flush() at the end of the stream.
-   * The ByteSink should be ready for further Append() calls after Flush().
-   * The default implementation of Flush() does nothing.
-   * @stable ICU 4.2
-   */
-  virtual void Flush();
-
-private:
-  ByteSink(const ByteSink &); // copy constructor not implemented
-  ByteSink &operator=(const ByteSink &); // assignment operator not implemented
-};
-
-// -------------------------------------------------------------
-// Some standard implementations
-
-/** 
- * Implementation of ByteSink that writes to a flat byte array,
- * with bounds-checking:
- * This sink will not write more than capacity bytes to outbuf.
- * If more than capacity bytes are Append()ed, then excess bytes are ignored,
- * and Overflowed() will return true.
- * Overflow does not cause a runtime error.
- * @stable ICU 4.2
- */
-class U_COMMON_API CheckedArrayByteSink : public ByteSink {
-public:
-  /**
-   * Constructs a ByteSink that will write to outbuf[0..capacity-1].
-   * @param outbuf buffer to write to
-   * @param capacity size of the buffer
-   * @stable ICU 4.2
-   */
-  CheckedArrayByteSink(char* outbuf, int32_t capacity);
-  /**
-   * Returns the sink to its original state, without modifying the buffer.
-   * Useful for reusing both the buffer and the sink for multiple streams.
-   * Resets the state to NumberOfBytesWritten()=NumberOfBytesAppended()=0
-   * and Overflowed()=FALSE.
-   * @return *this
-   * @draft ICU 4.6
-   */
-  virtual CheckedArrayByteSink& Reset();
-  /**
-   * Append "bytes[0,n-1]" to this.
-   * @param bytes the pointer to the bytes
-   * @param n the number of bytes; must be non-negative
-   * @stable ICU 4.2
-   */
-  virtual void Append(const char* bytes, int32_t n);
-  /**
-   * Returns a writable buffer for appending and writes the buffer's capacity to
-   * *result_capacity. For details see the base class documentation.
-   * @param min_capacity required minimum capacity of the returned buffer;
-   *                     must be non-negative
-   * @param desired_capacity_hint desired capacity of the returned buffer;
-   *                              must be non-negative
-   * @param scratch default caller-owned buffer
-   * @param scratch_capacity capacity of the scratch buffer
-   * @param result_capacity pointer to an integer which will be set to the
-   *                        capacity of the returned buffer
-   * @return a buffer with *result_capacity>=min_capacity
-   * @stable ICU 4.2
-   */
-  virtual char* GetAppendBuffer(int32_t min_capacity,
-                                int32_t desired_capacity_hint,
-                                char* scratch, int32_t scratch_capacity,
-                                int32_t* result_capacity);
-  /**
-   * Returns the number of bytes actually written to the sink.
-   * @return number of bytes written to the buffer
-   * @stable ICU 4.2
-   */
-  int32_t NumberOfBytesWritten() const { return size_; }
-  /**
-   * Returns true if any bytes were discarded, i.e., if there was an
-   * attempt to write more than 'capacity' bytes.
-   * @return TRUE if more than 'capacity' bytes were Append()ed
-   * @stable ICU 4.2
-   */
-  UBool Overflowed() const { return overflowed_; }
-  /**
-   * Returns the number of bytes appended to the sink.
-   * If Overflowed() then NumberOfBytesAppended()>NumberOfBytesWritten()
-   * else they return the same number.
-   * @return number of bytes written to the buffer
-   * @draft ICU 4.6
-   */
-  int32_t NumberOfBytesAppended() const { return appended_; }
-private:
-  char* outbuf_;
-  const int32_t capacity_;
-  int32_t size_;
-  int32_t appended_;
-  UBool overflowed_;
-  CheckedArrayByteSink(); ///< default constructor not implemented 
-  CheckedArrayByteSink(const CheckedArrayByteSink &); ///< copy constructor not implemented
-  CheckedArrayByteSink &operator=(const CheckedArrayByteSink &); ///< assignment operator not implemented
-};
-
-#if U_HAVE_STD_STRING
-
-/** 
- * Implementation of ByteSink that writes to a "string".
- * The StringClass is usually instantiated with a std::string.
- * @stable ICU 4.2
- */
-template<typename StringClass>
-class StringByteSink : public ByteSink {
- public:
-  /**
-   * Constructs a ByteSink that will append bytes to the dest string.
-   * @param dest pointer to string object to append to
-   * @stable ICU 4.2
-   */
-  StringByteSink(StringClass* dest) : dest_(dest) { }
-  /**
-   * Append "bytes[0,n-1]" to this.
-   * @param data the pointer to the bytes
-   * @param n the number of bytes; must be non-negative
-   * @stable ICU 4.2
-   */
-  virtual void Append(const char* data, int32_t n) { dest_->append(data, n); }
- private:
-  StringClass* dest_;
-  StringByteSink(); ///< default constructor not implemented 
-  StringByteSink(const StringByteSink &); ///< copy constructor not implemented
-  StringByteSink &operator=(const StringByteSink &); ///< assignment operator not implemented
-};
-
-#endif
-
-U_NAMESPACE_END
-
-#endif  // __BYTESTREAM_H__
diff --git a/source/common/unicode/caniter.h b/source/common/unicode/caniter.h
deleted file mode 100644
index 446d73d..0000000
--- a/source/common/unicode/caniter.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2010, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-#ifndef CANITER_H
-#define CANITER_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-
-/**
- * \file
- * \brief C++ API: Canonical Iterator
- */
- 
-/** Should permutation skip characters with combining class zero
- *  Should be either TRUE or FALSE. This is a compile time option
- *  @stable ICU 2.4
- */
-#ifndef CANITER_SKIP_ZEROES
-#define CANITER_SKIP_ZEROES TRUE
-#endif
-
-U_NAMESPACE_BEGIN
-
-class Hashtable;
-class Normalizer2;
-class Normalizer2Impl;
-
-/**
- * This class allows one to iterate through all the strings that are canonically equivalent to a given
- * string. For example, here are some sample results:
-Results for: {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-1: \\u0041\\u030A\\u0064\\u0307\\u0327
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-2: \\u0041\\u030A\\u0064\\u0327\\u0307
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
-3: \\u0041\\u030A\\u1E0B\\u0327
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
-4: \\u0041\\u030A\\u1E11\\u0307
- = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
-5: \\u00C5\\u0064\\u0307\\u0327
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-6: \\u00C5\\u0064\\u0327\\u0307
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
-7: \\u00C5\\u1E0B\\u0327
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
-8: \\u00C5\\u1E11\\u0307
- = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
-9: \\u212B\\u0064\\u0307\\u0327
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
-10: \\u212B\\u0064\\u0327\\u0307
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
-11: \\u212B\\u1E0B\\u0327
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
-12: \\u212B\\u1E11\\u0307
- = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
- *<br>Note: the code is intended for use with small strings, and is not suitable for larger ones,
- * since it has not been optimized for that situation.
- * Note, CanonicalIterator is not intended to be subclassed.
- * @author M. Davis
- * @author C++ port by V. Weinstein
- * @stable ICU 2.4
- */
-class U_COMMON_API CanonicalIterator : public UObject {
-public:
-    /**
-     * Construct a CanonicalIterator object
-     * @param source    string to get results for
-     * @param status    Fill-in parameter which receives the status of this operation.
-     * @stable ICU 2.4
-     */
-    CanonicalIterator(const UnicodeString &source, UErrorCode &status);
-
-    /** Destructor
-     *  Cleans pieces
-     * @stable ICU 2.4
-     */
-    virtual ~CanonicalIterator();
-
-    /**
-     * Gets the NFD form of the current source we are iterating over.
-     * @return gets the source: NOTE: it is the NFD form of source
-     * @stable ICU 2.4
-     */
-    UnicodeString getSource();
-
-    /**
-     * Resets the iterator so that one can start again from the beginning.
-     * @stable ICU 2.4
-     */
-    void reset();
-
-    /**
-     * Get the next canonically equivalent string.
-     * <br><b>Warning: The strings are not guaranteed to be in any particular order.</b>
-     * @return the next string that is canonically equivalent. A bogus string is returned when
-     * the iteration is done.
-     * @stable ICU 2.4
-     */
-    UnicodeString next();
-
-    /**
-     * Set a new source for this iterator. Allows object reuse.
-     * @param newSource     the source string to iterate against. This allows the same iterator to be used
-     *                     while changing the source string, saving object creation.
-     * @param status        Fill-in parameter which receives the status of this operation.
-     * @stable ICU 2.4
-     */
-    void setSource(const UnicodeString &newSource, UErrorCode &status);
-
-    /**
-     * Dumb recursive implementation of permutation.
-     * TODO: optimize
-     * @param source     the string to find permutations for
-     * @param skipZeros  determine if skip zeros
-     * @param result     the results in a set.
-     * @param status       Fill-in parameter which receives the status of this operation.
-     * @internal
-     */
-    static void U_EXPORT2 permute(UnicodeString &source, UBool skipZeros, Hashtable *result, UErrorCode &status);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-private:
-    // ===================== PRIVATES ==============================
-    // private default constructor
-    CanonicalIterator();
-
-
-    /**
-     * Copy constructor. Private for now.
-     * @internal
-     */
-    CanonicalIterator(const CanonicalIterator& other);
-
-    /**
-     * Assignment operator. Private for now.
-     * @internal
-     */
-    CanonicalIterator& operator=(const CanonicalIterator& other);
-
-    // fields
-    UnicodeString source;
-    UBool done;
-
-    // 2 dimensional array holds the pieces of the string with
-    // their different canonically equivalent representations
-    UnicodeString **pieces;
-    int32_t pieces_length;
-    int32_t *pieces_lengths;
-
-    // current is used in iterating to combine pieces
-    int32_t *current;
-    int32_t current_length;
-
-    // transient fields
-    UnicodeString buffer;
-
-    const Normalizer2 &nfd;
-    const Normalizer2Impl &nfcImpl;
-
-    // we have a segment, in NFD. Find all the strings that are canonically equivalent to it.
-    UnicodeString *getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status); //private String[] getEquivalents(String segment)
-
-    //Set getEquivalents2(String segment);
-    Hashtable *getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status);
-    //Hashtable *getEquivalents2(const UnicodeString &segment, int32_t segLen, UErrorCode &status);
-
-    /**
-     * See if the decomposition of cp2 is at segment starting at segmentPos
-     * (with canonical rearrangment!)
-     * If so, take the remainder, and return the equivalents
-     */
-    //Set extract(int comp, String segment, int segmentPos, StringBuffer buffer);
-    Hashtable *extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status);
-    //Hashtable *extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status);
-
-    void cleanPieces();
-
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_NORMALIZATION */
-
-#endif
diff --git a/source/common/unicode/chariter.h b/source/common/unicode/chariter.h
deleted file mode 100644
index 12fc924..0000000
--- a/source/common/unicode/chariter.h
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
-********************************************************************
-*
-*   Copyright (C) 1997-2005, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-********************************************************************
-*/
-
-#ifndef CHARITER_H
-#define CHARITER_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-/**
- * \file
- * \brief C++ API: Character Iterator
- */
- 
-U_NAMESPACE_BEGIN
-/**
- * Abstract class that defines an API for forward-only iteration
- * on text objects.
- * This is a minimal interface for iteration without random access
- * or backwards iteration. It is especially useful for wrapping
- * streams with converters into an object for collation or
- * normalization.
- *
- * <p>Characters can be accessed in two ways: as code units or as
- * code points.
- * Unicode code points are 21-bit integers and are the scalar values
- * of Unicode characters. ICU uses the type UChar32 for them.
- * Unicode code units are the storage units of a given
- * Unicode/UCS Transformation Format (a character encoding scheme).
- * With UTF-16, all code points can be represented with either one
- * or two code units ("surrogates").
- * String storage is typically based on code units, while properties
- * of characters are typically determined using code point values.
- * Some processes may be designed to work with sequences of code units,
- * or it may be known that all characters that are important to an
- * algorithm can be represented with single code units.
- * Other processes will need to use the code point access functions.</p>
- *
- * <p>ForwardCharacterIterator provides nextPostInc() to access
- * a code unit and advance an internal position into the text object,
- * similar to a <code>return text[position++]</code>.<br>
- * It provides next32PostInc() to access a code point and advance an internal
- * position.</p>
- *
- * <p>next32PostInc() assumes that the current position is that of
- * the beginning of a code point, i.e., of its first code unit.
- * After next32PostInc(), this will be true again.
- * In general, access to code units and code points in the same
- * iteration loop should not be mixed. In UTF-16, if the current position
- * is on a second code unit (Low Surrogate), then only that code unit
- * is returned even by next32PostInc().</p>
- *
- * <p>For iteration with either function, there are two ways to
- * check for the end of the iteration. When there are no more
- * characters in the text object:
- * <ul>
- * <li>The hasNext() function returns FALSE.</li>
- * <li>nextPostInc() and next32PostInc() return DONE
- *     when one attempts to read beyond the end of the text object.</li>
- * </ul>
- *
- * Example:
- * \code 
- * void function1(ForwardCharacterIterator &it) {
- *     UChar32 c;
- *     while(it.hasNext()) {
- *         c=it.next32PostInc();
- *         // use c
- *     }
- * }
- *
- * void function1(ForwardCharacterIterator &it) {
- *     UChar c;
- *     while((c=it.nextPostInc())!=ForwardCharacterIterator::DONE) {
- *         // use c
- *      }
- *  }
- * \endcode
- * </p>
- *
- * @stable ICU 2.0
- */
-class U_COMMON_API ForwardCharacterIterator : public UObject {
-public:
-    /**
-     * Value returned by most of ForwardCharacterIterator's functions
-     * when the iterator has reached the limits of its iteration.
-     * @stable ICU 2.0
-     */
-    enum { DONE = 0xffff };
-    
-    /**
-     * Destructor.  
-     * @stable ICU 2.0
-     */
-    virtual ~ForwardCharacterIterator();
-    
-    /**
-     * Returns true when both iterators refer to the same
-     * character in the same character-storage object.  
-     * @param that The ForwardCharacterIterator to be compared for equality
-     * @return true when both iterators refer to the same
-     * character in the same character-storage object
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const ForwardCharacterIterator& that) const = 0;
-    
-    /**
-     * Returns true when the iterators refer to different
-     * text-storage objects, or to different characters in the
-     * same text-storage object.  
-     * @param that The ForwardCharacterIterator to be compared for inequality
-     * @return true when the iterators refer to different
-     * text-storage objects, or to different characters in the
-     * same text-storage object
-     * @stable ICU 2.0
-     */
-    inline 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 = 0;
-    
-    /**
-     * Returns a UClassID for this ForwardCharacterIterator ("poor man's
-     * RTTI").<P> Despite the fact that this function is public,
-     * DO NOT CONSIDER IT PART OF CHARACTERITERATOR'S API! 
-     * @return a UClassID for this ForwardCharacterIterator 
-     * @stable ICU 2.0
-     */
-    virtual UClassID getDynamicClassID(void) const = 0;
-    
-    /**
-     * 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) = 0;
-    
-    /**
-     * 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 code point.
-     * @stable ICU 2.0
-     */
-    virtual UChar32       next32PostInc(void) = 0;
-    
-    /**
-     * Returns FALSE if there are no more code units or code points
-     * at or after the current position in the iteration range.
-     * This is used with nextPostInc() or next32PostInc() in forward
-     * iteration.
-     * @returns FALSE if there are no more code units or code points
-     * at or after the current position in the iteration range.
-     * @stable ICU 2.0
-     */
-    virtual UBool        hasNext() = 0;
-    
-protected:
-    /** Default constructor to be overridden in the implementing class. @stable ICU 2.0*/
-    ForwardCharacterIterator();
-    
-    /** Copy constructor to be overridden in the implementing class. @stable ICU 2.0*/
-    ForwardCharacterIterator(const ForwardCharacterIterator &other);
-    
-    /**
-     * Assignment operator to be overridden in the implementing class.
-     * @stable ICU 2.0
-     */
-    ForwardCharacterIterator &operator=(const ForwardCharacterIterator&) { return *this; }
-};
-
-/**
- * Abstract class that defines an API for iteration
- * on text objects.
- * This is an interface for forward and backward iteration
- * and random access into a text object.
- *
- * <p>The API provides backward compatibility to the Java and older ICU
- * CharacterIterator classes but extends them significantly:
- * <ol>
- * <li>CharacterIterator is now a subclass of ForwardCharacterIterator.</li>
- * <li>While the old API functions provided forward iteration with
- *     "pre-increment" semantics, the new one also provides functions
- *     with "post-increment" semantics. They are more efficient and should
- *     be the preferred iterator functions for new implementations.
- *     The backward iteration always had "pre-decrement" semantics, which
- *     are efficient.</li>
- * <li>Just like ForwardCharacterIterator, it provides access to
- *     both code units and code points. Code point access versions are available
- *     for the old and the new iteration semantics.</li>
- * <li>There are new functions for setting and moving the current position
- *     without returning a character, for efficiency.</li>
- * </ol>
- *
- * See ForwardCharacterIterator for examples for using the new forward iteration
- * functions. For backward iteration, there is also a hasPrevious() function
- * that can be used analogously to hasNext().
- * The old functions work as before and are shown below.</p>
- *
- * <p>Examples for some of the new functions:</p>
- *
- * Forward iteration with hasNext():
- * \code
- * void forward1(CharacterIterator &it) {
- *     UChar32 c;
- *     for(it.setToStart(); it.hasNext();) {
- *         c=it.next32PostInc();
- *         // use c
- *     }
- *  }
- * \endcode
- * Forward iteration more similar to loops with the old forward iteration,
- * showing a way to convert simple for() loops:
- * \code
- * void forward2(CharacterIterator &it) {
- *     UChar c;
- *     for(c=it.firstPostInc(); c!=CharacterIterator::DONE; c=it.nextPostInc()) {
- *          // use c
- *      }
- * }
- * \endcode
- * Backward iteration with setToEnd() and hasPrevious():
- * \code
- *  void backward1(CharacterIterator &it) {
- *      UChar32 c;
- *      for(it.setToEnd(); it.hasPrevious();) {
- *         c=it.previous32();
- *          // use c
- *      }
- *  }
- * \endcode
- * Backward iteration with a more traditional for() loop:
- * \code
- * void backward2(CharacterIterator &it) {
- *     UChar c;
- *     for(c=it.last(); c!=CharacterIterator::DONE; c=it.previous()) {
- *         // use c
- *      }
- *  }
- * \endcode
- *
- * Example for random access:
- * \code
- *  void random(CharacterIterator &it) {
- *      // set to the third code point from the beginning
- *      it.move32(3, CharacterIterator::kStart);
- *      // get a code point from here without moving the position
- *      UChar32 c=it.current32();
- *      // get the position
- *      int32_t pos=it.getIndex();
- *      // get the previous code unit
- *      UChar u=it.previous();
- *      // move back one more code unit
- *      it.move(-1, CharacterIterator::kCurrent);
- *      // set the position back to where it was
- *      // and read the same code point c and move beyond it
- *      it.setIndex(pos);
- *      if(c!=it.next32PostInc()) {
- *          exit(1); // CharacterIterator inconsistent
- *      }
- *  }
- * \endcode
- *
- * <p>Examples, especially for the old API:</p>
- *
- * Function processing characters, in this example simple output
- * <pre>
- * \code
- *  void processChar( UChar c )
- *  {
- *      cout << " " << c;
- *  }
- * \endcode
- * </pre>
- * Traverse the text from start to finish
- * <pre> 
- * \code
- *  void traverseForward(CharacterIterator& iter)
- *  {
- *      for(UChar c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
- *          processChar(c);
- *      }
- *  }
- * \endcode
- * </pre>
- * Traverse the text backwards, from end to start
- * <pre>
- * \code
- *  void traverseBackward(CharacterIterator& iter)
- *  {
- *      for(UChar c = iter.last(); c != CharacterIterator.DONE; c = iter.previous()) {
- *          processChar(c);
- *      }
- *  }
- * \endcode
- * </pre>
- * Traverse both forward and backward from a given position in the text. 
- * Calls to notBoundary() in this example represents some additional stopping criteria.
- * <pre>
- * \code
- * void traverseOut(CharacterIterator& iter, int32_t pos)
- * {
- *      UChar c;
- *      for (c = iter.setIndex(pos);
- *      c != CharacterIterator.DONE && (Unicode::isLetter(c) || Unicode::isDigit(c));
- *          c = iter.next()) {}
- *      int32_t end = iter.getIndex();
- *      for (c = iter.setIndex(pos);
- *          c != CharacterIterator.DONE && (Unicode::isLetter(c) || Unicode::isDigit(c));
- *          c = iter.previous()) {}
- *      int32_t start = iter.getIndex() + 1;
- *  
- *      cout << "start: " << start << " end: " << end << endl;
- *      for (c = iter.setIndex(start); iter.getIndex() < end; c = iter.next() ) {
- *          processChar(c);
- *     }
- *  }
- * \endcode
- * </pre>
- * Creating a StringCharacterIterator and calling the test functions
- * <pre>
- * \code
- *  void CharacterIterator_Example( void )
- *   {
- *       cout << endl << "===== CharacterIterator_Example: =====" << endl;
- *       UnicodeString text("Ein kleiner Satz.");
- *       StringCharacterIterator iterator(text);
- *       cout << "----- traverseForward: -----------" << endl;
- *       traverseForward( iterator );
- *       cout << endl << endl << "----- traverseBackward: ----------" << endl;
- *       traverseBackward( iterator );
- *       cout << endl << endl << "----- traverseOut: ---------------" << endl;
- *       traverseOut( iterator, 7 );
- *       cout << endl << endl << "-----" << endl;
- *   }
- * \endcode
- * </pre>
- *
- * @stable ICU 2.0
- */
-class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
-public:
-    /**
-     * Origin enumeration for the move() and move32() functions.
-     * @stable ICU 2.0
-     */
-    enum EOrigin { kStart, kCurrent, kEnd };
-
-    /**
-     * Returns a pointer to a new CharacterIterator of the same
-     * concrete class as this one, and referring to the same
-     * character in the same text-storage object as this one.  The
-     * caller is responsible for deleting the new clone.  
-     * @return a pointer to a new CharacterIterator
-     * @stable ICU 2.0
-     */
-    virtual CharacterIterator* clone(void) const = 0;
-
-    /**
-     * 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) = 0;
-
-    /**
-     * 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) = 0;
-
-    /**
-     * 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 first code unit or code point in its
-     * iteration range. This can be used to begin a forward
-     * iteration with nextPostInc() or next32PostInc().
-     * @return the start position of the iteration range
-     * @stable ICU 2.0
-     */
-    inline int32_t    setToStart();
-
-    /**
-     * 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.
-     * @stable ICU 2.0
-     */
-    virtual UChar         last(void) = 0;
-        
-    /**
-     * 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.
-     * @stable ICU 2.0
-     */
-    virtual UChar32       last32(void) = 0;
-
-    /**
-     * Sets the iterator to the end of its iteration range, just behind
-     * the last code unit or code point. This can be used to begin a backward
-     * iteration with previous() or previous32().
-     * @return the end position of the iteration range
-     * @stable ICU 2.0
-     */
-    inline int32_t    setToEnd();
-
-    /**
-     * 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"-th code unit in the text-storage object
-     * @return the "position"-th code unit.
-     * @stable ICU 2.0
-     */
-    virtual UChar         setIndex(int32_t position) = 0;
-
-    /**
-     * 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"-th code unit in the text-storage object
-     * @return the "position"-th code point.
-     * @stable ICU 2.0
-     */
-    virtual UChar32       setIndex32(int32_t position) = 0;
-
-    /**
-     * Returns the code unit the iterator currently refers to. 
-     * @return the current code unit. 
-     * @stable ICU 2.0
-     */
-    virtual UChar         current(void) const = 0;
-        
-    /**
-     * Returns the code point the iterator currently refers to.  
-     * @return the current code point.
-     * @stable ICU 2.0
-     */
-    virtual UChar32       current32(void) const = 0;
-        
-    /**
-     * 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.
-     * @stable ICU 2.0
-     */
-    virtual UChar         next(void) = 0;
-        
-    /**
-     * 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.
-     * @stable ICU 2.0
-     */
-    virtual UChar32       next32(void) = 0;
-        
-    /**
-     * 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.
-     * @stable ICU 2.0
-     */
-    virtual UChar         previous(void) = 0;
-
-    /**
-     * 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. 
-     * @stable ICU 2.0
-     */
-    virtual UChar32       previous32(void) = 0;
-
-    /**
-     * Returns FALSE if there are no more code units or code points
-     * before the current position in the iteration range.
-     * This is used with previous() or previous32() in backward
-     * iteration.
-     * @return FALSE if there are no more code units or code points
-     * before the current position in the iteration range, return TRUE otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool        hasPrevious() = 0;
-
-    /**
-     * Returns the numeric index in the underlying text-storage
-     * object of the character returned by first().  Since it's
-     * possible to create an iterator that iterates across only
-     * part of a text-storage object, this number isn't
-     * necessarily 0.  
-     * @returns the numeric index in the underlying text-storage
-     * object of the character returned by first().
-     * @stable ICU 2.0
-     */
-    inline int32_t       startIndex(void) const;
-        
-    /**
-     * Returns the numeric index in the underlying text-storage
-     * object of the position immediately BEYOND the character
-     * returned by last().  
-     * @return the numeric index in the underlying text-storage
-     * object of the position immediately BEYOND the character
-     * returned by last().
-     * @stable ICU 2.0
-     */
-    inline int32_t       endIndex(void) const;
-        
-    /**
-     * Returns the numeric index in the underlying text-storage
-     * object of the character the iterator currently refers to
-     * (i.e., the character returned by current()).  
-     * @return the numberic index in the text-storage object of 
-     * the character the iterator currently refers to
-     * @stable ICU 2.0
-     */
-    inline int32_t       getIndex(void) const;
-
-    /**
-     * Returns the length of the entire text in the underlying
-     * text-storage object.
-     * @return the length of the entire text in the text-storage object
-     * @stable ICU 2.0
-     */
-    inline int32_t           getLength() const;
-
-    /**
-     * 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) = 0;
-
-    /**
-     * 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) = 0;
-
-    /**
-     * Copies the text under iteration into the UnicodeString
-     * referred to by "result".  
-     * @param result Receives a copy of the text under iteration.  
-     * @stable ICU 2.0
-     */
-    virtual void            getText(UnicodeString&  result) = 0;
-
-protected:
-    /**
-     * Empty constructor.
-     * @stable ICU 2.0
-     */
-    CharacterIterator();
-
-    /**
-     * Constructor, just setting the length field in this base class.
-     * @stable ICU 2.0
-     */
-    CharacterIterator(int32_t length);
-
-    /**
-     * Constructor, just setting the length and position fields in this base class.
-     * @stable ICU 2.0
-     */
-    CharacterIterator(int32_t length, int32_t position);
-
-    /**
-     * Constructor, just setting the length, start, end, and position fields in this base class.
-     * @stable ICU 2.0
-     */
-    CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position);
-  
-    /**
-     * Copy constructor.
-     *
-     * @param that The CharacterIterator to be copied
-     * @stable ICU 2.0
-     */
-    CharacterIterator(const CharacterIterator &that);
-
-    /**
-     * Assignment operator.  Sets this CharacterIterator to have the same behavior,
-     * as the one passed in.
-     * @param that The CharacterIterator passed in.
-     * @return the newly set CharacterIterator.
-     * @stable ICU 2.0
-     */
-    CharacterIterator &operator=(const CharacterIterator &that);
-
-    /**
-     * Base class text length field.
-     * Necessary this for correct getText() and hashCode().
-     * @stable ICU 2.0
-     */
-    int32_t textLength;
-
-    /**
-     * Base class field for the current position.
-     * @stable ICU 2.0
-     */
-    int32_t  pos;
-
-    /**
-     * Base class field for the start of the iteration range.
-     * @stable ICU 2.0
-     */
-    int32_t  begin;
-
-    /**
-     * Base class field for the end of the iteration range.
-     * @stable ICU 2.0
-     */
-    int32_t  end;
-};
-
-inline UBool
-ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that) const {
-    return !operator==(that);
-}
-
-inline int32_t
-CharacterIterator::setToStart() {
-    return move(0, kStart);
-}
-
-inline int32_t
-CharacterIterator::setToEnd() {
-    return move(0, kEnd);
-}
-
-inline int32_t
-CharacterIterator::startIndex(void) const {
-    return begin;
-}
-
-inline int32_t
-CharacterIterator::endIndex(void) const {
-    return end;
-}
-
-inline int32_t
-CharacterIterator::getIndex(void) const {
-    return pos;
-}
-
-inline int32_t
-CharacterIterator::getLength(void) const {
-    return textLength;
-}
-
-U_NAMESPACE_END
-#endif
diff --git a/source/common/unicode/dbbi.h b/source/common/unicode/dbbi.h
deleted file mode 100644
index c7984ef..0000000
--- a/source/common/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
diff --git a/source/common/unicode/docmain.h b/source/common/unicode/docmain.h
deleted file mode 100644
index bf45c51..0000000
--- a/source/common/unicode/docmain.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/********************************************************************
- * COPYRIGHT: 
- * Copyright (c) 1997-2010, 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>Identifier Spoofing & Confusability</td>
- *     <td>uspoof.h</td>
- *     <td>uspoof.h C API</td>
- *   <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>
- * <i>This main page is generated from docmain.h</i>
- */
diff --git a/source/common/unicode/dtintrv.h b/source/common/unicode/dtintrv.h
deleted file mode 100644
index 5bacce8..0000000
--- a/source/common/unicode/dtintrv.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2008-2009, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-* File DTINTRV.H 
-*
-*******************************************************************************
-*/
-
-#ifndef __DTINTRV_H__
-#define __DTINTRV_H__
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
-/**
- * \file
- * \brief C++ API: Date Interval data type
- */
-
-
-U_NAMESPACE_BEGIN
-
-
-/**
- * This class represents a date interval.
- * It is a pair of UDate representing from UDate 1 to UDate 2.
- * @stable ICU 4.0
-**/
-class U_COMMON_API DateInterval : public UObject {
-public:
-
-    /** 
-     * Construct a DateInterval given a from date and a to date.
-     * @param fromDate  The from date in date interval.
-     * @param toDate    The to date in date interval.
-     * @stable ICU 4.0
-     */
-    DateInterval(UDate fromDate, UDate toDate);
-
-    /**
-     * destructor
-     * @stable ICU 4.0
-     */
-    virtual ~DateInterval();
- 
-    /** 
-     * Get the from date.
-     * @return  the from date in dateInterval.
-     * @stable ICU 4.0
-     */
-    UDate getFromDate() const;
-
-    /** 
-     * Get the to date.
-     * @return  the to date in dateInterval.
-     * @stable ICU 4.0
-     */
-    UDate getToDate() const;
-
-
-    /**
-     * 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;
-
-    
-    /**
-     * Copy constructor.
-     * @stable ICU 4.0
-     */
-    DateInterval(const DateInterval& other);
-
-    /**
-     * Default assignment operator
-     * @stable ICU 4.0
-     */
-    DateInterval& operator=(const DateInterval&);
-
-    /**
-     * Equality operator.
-     * @return TRUE if the two DateIntervals are the same
-     * @stable ICU 4.0
-     */
-    virtual UBool operator==(const DateInterval& other) const;
-
-    /**
-     * Non-equality operator
-     * @return TRUE if the two DateIntervals are not the same
-     * @stable ICU 4.0
-     */
-    UBool operator!=(const DateInterval& other) const;
-
-
-    /**
-     * clone this object. 
-     * The caller owns the result and should delete it when done.
-     * @return a cloned DateInterval
-     * @stable ICU 4.0
-     */
-     virtual DateInterval* clone() const;
-
-private:
-    /** 
-     * Default constructor, not implemented.
-     */
-    DateInterval();
-
-    UDate fromDate;
-    UDate toDate;
-
-} ;// end class DateInterval
-
-
-inline UDate 
-DateInterval::getFromDate() const { 
-    return fromDate; 
-}
-
-
-inline UDate 
-DateInterval::getToDate() const { 
-    return toDate; 
-}
-
-
-inline UBool 
-DateInterval::operator!=(const DateInterval& other) const { 
-    return ( !operator==(other) );
-}
-
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/errorcode.h b/source/common/unicode/errorcode.h
deleted file mode 100644
index 0d9d2bd..0000000
--- a/source/common/unicode/errorcode.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  errorcode.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009mar10
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __ERRORCODE_H__
-#define __ERRORCODE_H__
-
-/**
- * \file 
- * \brief C++ API: ErrorCode class intended to make it easier to use
- *                 ICU C and C++ APIs from C++ user code.
- */
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Wrapper class for UErrorCode, with conversion operators for direct use
- * in ICU C and C++ APIs.
- * Intended to be used as a base class, where a subclass overrides
- * the handleFailure() function so that it throws an exception,
- * does an assert(), logs an error, etc.
- * This is not an abstract base class. This class can be used and instantiated
- * by itself, although it will be more useful when subclassed.
- *
- * Features:
- * - The constructor initializes the internal UErrorCode to U_ZERO_ERROR,
- *   removing one common source of errors.
- * - Same use in C APIs taking a UErrorCode * (pointer)
- *   and C++ taking UErrorCode & (reference) via conversion operators.
- * - Possible automatic checking for success when it goes out of scope.
- *
- * Note: For automatic checking for success in the destructor, a subclass
- * must implement such logic in its own destructor because the base class
- * destructor cannot call a subclass function (like handleFailure()).
- * The ErrorCode base class destructor does nothing.
- *
- * Note also: While it is possible for a destructor to throw an exception,
- * it is generally unsafe to do so. This means that in a subclass the destructor
- * and the handleFailure() function may need to take different actions.
- *
- * Sample code:
- * \code
- *   class IcuErrorCode: public icu::ErrorCode {
- *   public:
- *     virtual ~IcuErrorCode() {
- *       // Safe because our handleFailure() does not throw exceptions.
- *       if(isFailure()) { handleFailure(); }
- *     }
- *   protected:
- *     virtual void handleFailure() const {
- *       log_failure(u_errorName(errorCode));
- *       exit(errorCode);
- *     }
- *   };
- *   IcuErrorCode error_code;
- *   UConverter *cnv = ucnv_open("Shift-JIS", error_code);
- *   length = ucnv_fromUChars(dest, capacity, src, length, error_code);
- *   ucnv_close(cnv);
- *   // IcuErrorCode destructor checks for success.
- * \endcode
- *
- * @stable ICU 4.2
- */
-class U_COMMON_API ErrorCode: public UMemory {
-public:
-    /**
-     * Default constructor. Initializes its UErrorCode to U_ZERO_ERROR.
-     * @stable ICU 4.2
-     */
-    ErrorCode() : errorCode(U_ZERO_ERROR) {}
-    /** Destructor, does nothing. See class documentation for details. @stable ICU 4.2 */
-    virtual ~ErrorCode() {}
-    /** Conversion operator, returns a reference. @stable ICU 4.2 */
-    operator UErrorCode & () { return errorCode; }
-    /** Conversion operator, returns a pointer. @stable ICU 4.2 */
-    operator UErrorCode * () { return &errorCode; }
-    /** Tests for U_SUCCESS(). @stable ICU 4.2 */
-    UBool isSuccess() const { return U_SUCCESS(errorCode); }
-    /** Tests for U_FAILURE(). @stable ICU 4.2 */
-    UBool isFailure() const { return U_FAILURE(errorCode); }
-    /** Returns the UErrorCode value. @stable ICU 4.2 */
-    UErrorCode get() const { return errorCode; }
-    /** Sets the UErrorCode value. @stable ICU 4.2 */
-    void set(UErrorCode value) { errorCode=value; }
-    /** Returns the UErrorCode value and resets it to U_ZERO_ERROR. @stable ICU 4.2 */
-    UErrorCode reset();
-    /**
-     * Asserts isSuccess().
-     * In other words, this method checks for a failure code,
-     * and the base class handles it like this:
-     * \code
-     *   if(isFailure()) { handleFailure(); }
-     * \endcode
-     * @stable ICU 4.4
-     */
-    void assertSuccess() const;
-    /**
-     * Return a string for the UErrorCode value.
-     * The string will be the same as the name of the error code constant
-     * in the UErrorCode enum.
-     * @stable ICU 4.4
-     */
-    const char* errorName() const;
-
-protected:
-    /**
-     * Internal UErrorCode, accessible to subclasses.
-     * @stable ICU 4.2
-     */
-    UErrorCode errorCode;
-    /**
-     * Called by assertSuccess() if isFailure() is true.
-     * A subclass should override this function to deal with a failure code:
-     * Throw an exception, log an error, terminate the program, or similar.
-     * @stable ICU 4.2
-     */
-    virtual void handleFailure() const {}
-};
-
-U_NAMESPACE_END
-
-#endif  // __ERRORCODE_H__
diff --git a/source/common/unicode/icudataver.h b/source/common/unicode/icudataver.h
deleted file mode 100644
index 0f12c97..0000000
--- a/source/common/unicode/icudataver.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*/
-
-#ifndef __ICU_DATA_VER_H__
-#define __ICU_DATA_VER_H__
-
-#include "unicode/utypes.h"
-
-/**
- * @internal ICU 4.4
- */
-#define U_ICU_VERSION_BUNDLE "icuver"
-
-/**
- * @internal ICU 4.4
- */
-#define U_ICU_STD_BUNDLE "icustd"
-
-/**
- * @internal ICU 4.4
- */
-#define U_ICU_DATA_KEY "DataVersion"
-
-/**
- * This function loads up icuver and compares the data version to the wired-in U_ICU_DATA_VERSION.
- * If icuver shows something less than U_ICU_DATA_VERSION it returns TRUE, else FALSE. The version
- * found will be returned in the first fillin parameter (if non-null), and *isModified will be set
- * to TRUE if "icustd" is NOT found. Thus, if the data has been repackaged or modified, "icustd"
- * (standard ICU) will be missing, and the function will alert the caller that the data is not standard.
- * 
- * @param dataVersionFillin icuver data version information to be filled in if not-null
- * @param isModifiedFillin if the data is not standard if not-null
- * @param status stores the error code from the calls to resource bundle
- *
- * @return TRUE if U_ICU_DATA_VERSION is newer than icuver, else FALSE
- * 
- * @internal ICU 4.4
- */
-U_INTERNAL UBool U_EXPORT2 u_isDataOlder(UVersionInfo dataVersionFillin, UBool *isModifiedFillin, UErrorCode *status);
-
-/**
- * Retrieves the data version from icuver and stores it in dataVersionFillin.
- * 
- * @param dataVersionFillin icuver data version information to be filled in if not-null
- * @param status stores the error code from the calls to resource bundle
- * 
- * @internal ICU 4.4
- */
-U_INTERNAL void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status);
-
-#endif
diff --git a/source/common/unicode/icuplug.h b/source/common/unicode/icuplug.h
deleted file mode 100644
index ac413b9..0000000
--- a/source/common/unicode/icuplug.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-*  FILE NAME : icuplug.h
-*
-*   Date         Name        Description
-*   10/29/2009   sl          New.
-******************************************************************************
-*/
-
-/**
- * \file
- * \brief C API: ICU Plugin API 
- *
- * <h2>C API: ICU Plugin API</h2>
- *
- * <p>C API allowing run-time loadable modules that extend or modify ICU functionality.</p>
- *
- * <h3>Loading and Configuration</h3>
- *
- * <p>At ICU startup time, the environment variable "ICU_PLUGINS" will be 
- * queried for a directory name.  If it is not set, the preprocessor symbol 
- * "DEFAULT_ICU_PLUGINS" will be checked for a default value.</p>
- *
- * <p>Within the above-named directory, the file  "icuplugins##.txt" will be 
- * opened, if present, where ## is the major+minor number of the currently 
- * running ICU (such as, 44 for ICU 4.4, thus icuplugins44.txt)</p>
- *
- * <p>The configuration file has this format:</p>
- *
- * <ul>
- * <li>Hash (#) begins a comment line</li>
- * 
- * <li>Non-comment lines have two or three components:
- * LIBRARYNAME     ENTRYPOINT     [ CONFIGURATION .. ]</li>
- *
- * <li>Tabs or spaces separate the three items.</li>
- *
- * <li>LIBRARYNAME is the name of a shared library, either a short name if 
- * it is on the loader path,  or a full pathname.</li>
- *
- * <li>ENTRYPOINT is the short (undecorated) symbol name of the plugin's 
- * entrypoint, as above.</li>
- *
- * <li>CONFIGURATION is the entire rest of the line . It's passed as-is to 
- * the plugin.</li>
- * </ul>
- *
- * <p>An example configuration file is, in its entirety:</p>
- *
- * \code
- * # this is icuplugins44.txt
- * testplug.dll    myPlugin        hello=world
- * \endcode
- * <p>Plugins are categorized as "high" or "low" level.  Low level are those 
- * which must be run BEFORE high level plugins, and before any operations 
- * which cause ICU to be 'initialized'.  If a plugin is low level but 
- * causes ICU to allocate memory or become initialized, that plugin is said 
- * to cause a 'level change'. </p>
- *
- * <p>At load time, ICU first queries all plugins to determine their level, 
- * then loads all 'low' plugins first, and then loads all 'high' plugins.  
- * Plugins are otherwise loaded in the order listed in the configuration file.</p>
- * 
- * <h3>Implementing a Plugin</h3>
- * \code
- * U_CAPI UPlugTokenReturn U_EXPORT2 
- * myPlugin (UPlugData *plug, UPlugReason reason, UErrorCode *status) {
- *   if(reason==UPLUG_REASON_QUERY) {
- *      uplug_setPlugName(plug, "Simple Plugin");
- *      uplug_setPlugLevel(plug, UPLUG_LEVEL_HIGH);
- *    } else if(reason==UPLUG_REASON_LOAD) {
- *       ... Set up some ICU things here.... 
- *    } else if(reason==UPLUG_REASON_UNLOAD) {
- *       ... unload, clean up ...
- *    }
- *   return UPLUG_TOKEN;
- *  }
- * \endcode
- *
- * <p>The UPlugData*  is an opaque pointer to the plugin-specific data, and is 
- * used in all other API calls.</p>
- *
- * <p>The API contract is:</p>
- * <ol><li>The plugin MUST always return UPLUG_TOKEN as a return value- to 
- * indicate that it is a valid plugin.</li>
- *
- * <li>When the 'reason' parameter is set to UPLUG_REASON_QUERY,  the 
- * plugin MUST call uplug_setPlugLevel() to indicate whether it is a high 
- * level or low level plugin.</li>
- *
- * <li>When the 'reason' parameter is UPLUG_REASON_QUERY, the plugin 
- * SHOULD call uplug_setPlugName to indicate a human readable plugin name.</li></ol>
- * 
- *
- * \internal ICU 4.4 Technology Preview
- */
-
-
-#ifndef ICUPLUG_H
-#define ICUPLUG_H
-
-#include "unicode/utypes.h"
-
-
-/* === Basic types === */
-
-/**
- * @{
- * Opaque structure passed to/from a plugin. 
- * use the APIs to access it.
- * @internal ICU 4.4 Technology Preview
- */
-
-struct UPlugData;
-typedef struct UPlugData UPlugData;
-
-/** @} */
-
-/**
- * Random Token to identify a valid ICU plugin. Plugins must return this 
- * from the entrypoint.
- * @internal ICU 4.4 Technology Preview
- */
-#define UPLUG_TOKEN 0x54762486
-
-/**
- * Max width of names, symbols, and configuration strings
- * @internal ICU 4.4 Technology Preview
- */
-#define UPLUG_NAME_MAX              100
-
-
-/**
- * Return value from a plugin entrypoint. 
- * Must always be set to UPLUG_TOKEN
- * @see UPLUG_TOKEN
- * @internal ICU 4.4 Technology Preview
- */
-typedef uint32_t UPlugTokenReturn;
-
-/**
- * Reason code for the entrypoint's call
- * @internal ICU 4.4 Technology Preview
- */
-typedef enum {
-    UPLUG_REASON_QUERY = 0,     /**< The plugin is being queried for info. **/
-    UPLUG_REASON_LOAD = 1,     /**< The plugin is being loaded. **/
-    UPLUG_REASON_UNLOAD = 2,   /**< The plugin is being unloaded. **/
-    UPLUG_REASON_COUNT         /**< count of known reasons **/
-} UPlugReason;
-
-
-/**
- * Level of plugin loading
- *     INITIAL:  UNKNOWN
- *       QUERY:   INVALID ->  { LOW | HIGH }
- *     ERR -> INVALID
- * @internal ICU 4.4 Technology Preview
- */
-typedef enum {
-    UPLUG_LEVEL_INVALID = 0,     /**< The plugin is invalid, hasn't called uplug_setLevel, or can't load. **/
-    UPLUG_LEVEL_UNKNOWN = 1,     /**< The plugin is waiting to be installed. **/
-    UPLUG_LEVEL_LOW     = 2,     /**< The plugin must be called before u_init completes **/
-    UPLUG_LEVEL_HIGH    = 3,     /**< The plugin can run at any time. **/
-    UPLUG_LEVEL_COUNT         /**< count of known reasons **/
-} UPlugLevel;
-
-/**
- * Entrypoint for an ICU plugin.
- * @param plug the UPlugData handle. 
- * @param status the plugin's extended status code.
- * @return A valid plugin must return UPLUG_TOKEN
- * @internal ICU 4.4 Technology Preview
- */
-typedef UPlugTokenReturn (U_EXPORT2 UPlugEntrypoint) (
-                  UPlugData *plug,
-                  UPlugReason reason,
-                  UErrorCode *status);
-
-/* === Needed for Implementing === */
-
-/**
- * Request that this plugin not be unloaded at cleanup time.
- * This is appropriate for plugins which cannot be cleaned up.
- * @see u_cleanup()
- * @param plug plugin
- * @param dontUnload  set true if this plugin can't be unloaded
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void U_EXPORT2 
-uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload);
-
-/**
- * Set the level of this plugin.
- * @param plug plugin data handle
- * @param level the level of this plugin
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void U_EXPORT2
-uplug_setPlugLevel(UPlugData *plug, UPlugLevel level);
-
-/**
- * Get the level of this plugin.
- * @param plug plugin data handle
- * @return the level of this plugin
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI UPlugLevel U_EXPORT2
-uplug_getPlugLevel(UPlugData *plug);
-
-/**
- * Get the lowest level of plug which can currently load.
- * For example, if UPLUG_LEVEL_LOW is returned, then low level plugins may load
- * if UPLUG_LEVEL_HIGH is returned, then only high level plugins may load.
- * @return the lowest level of plug which can currently load
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI UPlugLevel U_EXPORT2
-uplug_getCurrentLevel(void);
-
-
-/**
- * Get plug load status
- * @return The error code of this plugin's load attempt.
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI UErrorCode U_EXPORT2
-uplug_getPlugLoadStatus(UPlugData *plug); 
-
-/**
- * Set the human-readable name of this plugin.
- * @param plug plugin data handle
- * @param name the name of this plugin. The first UPLUG_NAME_MAX characters willi be copied into a new buffer.
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void U_EXPORT2
-uplug_setPlugName(UPlugData *plug, const char *name);
-
-/**
- * Get the human-readable name of this plugin.
- * @param plug plugin data handle
- * @return the name of this plugin
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI const char * U_EXPORT2
-uplug_getPlugName(UPlugData *plug);
-
-/**
- * Return the symbol name for this plugin, if known.
- * @param plug plugin data handle
- * @return the symbol name, or NULL
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI const char * U_EXPORT2
-uplug_getSymbolName(UPlugData *plug);
-
-/**
- * Return the library name for this plugin, if known.
- * @param plug plugin data handle
- * @param status error code
- * @return the library name, or NULL
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI const char * U_EXPORT2
-uplug_getLibraryName(UPlugData *plug, UErrorCode *status);
-
-/**
- * Return the library used for this plugin, if known.
- * Plugins could use this to load data out of their 
- * @param plug plugin data handle
- * @return the library, or NULL
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void * U_EXPORT2
-uplug_getLibrary(UPlugData *plug);
-
-/**
- * Return the plugin-specific context data.
- * @param plug plugin data handle
- * @return the context, or NULL if not set
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void * U_EXPORT2
-uplug_getContext(UPlugData *plug);
-
-/**
- * Set the plugin-specific context data.
- * @param plug plugin data handle
- * @param context new context to set
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void U_EXPORT2
-uplug_setContext(UPlugData *plug, void *context);
-
-
-/**
- * Get the configuration string, if available.
- * The string is in the platform default codepage.
- * @param plug plugin data handle
- * @return configuration string, or else null.
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI const char * U_EXPORT2
-uplug_getConfiguration(UPlugData *plug);
-
-/**
- * Return all currently installed plugins, from newest to oldest
- * Usage Example:
- * \code
- *    UPlugData *plug = NULL;
- *    while(plug=uplug_nextPlug(plug)) {
- *        ... do something with 'plug' ...
- *    }
- * \endcode
- * Not thread safe- do not call while plugs are added or removed.
- * @param prior pass in 'NULL' to get the first (most recent) plug, 
- *  otherwise pass the value returned on a prior call to uplug_nextPlug
- * @return the next oldest plugin, or NULL if no more.
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI UPlugData* U_EXPORT2
-uplug_nextPlug(UPlugData *prior);
-
-/**
- * Inject a plugin as if it were loaded from a library.
- * This is useful for testing plugins. 
- * Note that it will have a 'NULL' library pointer associated
- * with it, and therefore no llibrary will be closed at cleanup time.
- * Low level plugins may not be able to load, as ordering can't be enforced.
- * @param entrypoint entrypoint to install
- * @param config user specified configuration string, if available, or NULL.
- * @param status error result
- * @return the new UPlugData associated with this plugin, or NULL if error.
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI UPlugData* U_EXPORT2
-uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UErrorCode *status);
-
-
-/**
- * Inject a plugin from a library, as if the information came from a config file.
- * Low level plugins may not be able to load, and ordering can't be enforced.
- * @param libName DLL name to load
- * @param sym symbol of plugin (UPlugEntrypoint function)
- * @param config configuration string, or NULL
- * @param status error result
- * @return the new UPlugData associated with this plugin, or NULL if error.
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI UPlugData* U_EXPORT2
-uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status);
-
-/**
- * Remove a plugin. 
- * Will request the plugin to be unloaded, and close the library if needed
- * @param plug plugin handle to close
- * @param status error result
- * @internal ICU 4.4 Technology Preview
- */
-U_CAPI void U_EXPORT2
-uplug_removePlug(UPlugData *plug, UErrorCode *status);
-
-
-#endif
diff --git a/source/common/unicode/idna.h b/source/common/unicode/idna.h
deleted file mode 100644
index 4047d96..0000000
--- a/source/common/unicode/idna.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   file name:  idna.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2010mar05
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __IDNA_H__
-#define __IDNA_H__
-
-/**
- * \file
- * \brief C++ API: Internationalizing Domain Names in Applications (IDNA)
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_IDNA
-
-#include "unicode/bytestream.h"
-#include "unicode/stringpiece.h"
-#include "unicode/uidna.h"
-#include "unicode/unistr.h"
-
-U_NAMESPACE_BEGIN
-
-class U_COMMON_API IDNAInfo;
-
-/**
- * Abstract base class for IDNA processing.
- * See http://www.unicode.org/reports/tr46/
- * and http://www.ietf.org/rfc/rfc3490.txt
- *
- * The IDNA class is not intended for public subclassing.
- *
- * This C++ API currently only implements UTS #46.
- * The uidna.h C API implements both UTS #46 (functions using UIDNA service object)
- * and IDNA2003 (functions that do not use a service object).
- * @draft ICU 4.6
- */
-class U_COMMON_API IDNA : public UObject {
-public:
-    /**
-     * Returns an IDNA instance which implements UTS #46.
-     * Returns an unmodifiable instance, owned by the caller.
-     * Cache it for multiple operations, and delete it when done.
-     * The instance is thread-safe, that is, it can be used concurrently.
-     *
-     * UTS #46 defines Unicode IDNA Compatibility Processing,
-     * updated to the latest version of Unicode and compatible with both
-     * IDNA2003 and IDNA2008.
-     *
-     * The worker functions use transitional processing, including deviation mappings,
-     * unless UIDNA_NONTRANSITIONAL_TO_ASCII or UIDNA_NONTRANSITIONAL_TO_UNICODE
-     * is used in which case the deviation characters are passed through without change.
-     *
-     * Disallowed characters are mapped to U+FFFD.
-     *
-     * For available options see the uidna.h header.
-     * Operations with the UTS #46 instance do not support the
-     * UIDNA_ALLOW_UNASSIGNED option.
-     *
-     * By default, the UTS #46 implementation allows all ASCII characters (as valid or mapped).
-     * When the UIDNA_USE_STD3_RULES option is used, ASCII characters other than
-     * letters, digits, hyphen (LDH) and dot/full stop are disallowed and mapped to U+FFFD.
-     *
-     * @param options Bit set to modify the processing and error checking.
-     *                See option bit set values in uidna.h.
-     * @param errorCode 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 UTS #46 IDNA instance, if successful
-     * @draft ICU 4.6
-     */
-    static IDNA *
-    createUTS46Instance(uint32_t options, UErrorCode &errorCode);
-
-    /**
-     * Converts a single domain name label into its ASCII form for DNS lookup.
-     * If any processing step fails, then info.hasErrors() will be TRUE and
-     * the result might not be an ASCII string.
-     * The label might be modified according to the types of errors.
-     * Labels with severe errors will be left in (or turned into) their Unicode form.
-     *
-     * The UErrorCode indicates an error only in exceptional cases,
-     * such as a U_MEMORY_ALLOCATION_ERROR.
-     *
-     * @param label Input domain name label
-     * @param dest Destination string object
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual UnicodeString &
-    labelToASCII(const UnicodeString &label, UnicodeString &dest,
-                 IDNAInfo &info, UErrorCode &errorCode) const = 0;
-
-    /**
-     * Converts a single domain name label into its Unicode form for human-readable display.
-     * If any processing step fails, then info.hasErrors() will be TRUE.
-     * The label might be modified according to the types of errors.
-     *
-     * The UErrorCode indicates an error only in exceptional cases,
-     * such as a U_MEMORY_ALLOCATION_ERROR.
-     *
-     * @param label Input domain name label
-     * @param dest Destination string object
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual UnicodeString &
-    labelToUnicode(const UnicodeString &label, UnicodeString &dest,
-                   IDNAInfo &info, UErrorCode &errorCode) const = 0;
-
-    /**
-     * Converts a whole domain name into its ASCII form for DNS lookup.
-     * If any processing step fails, then info.hasErrors() will be TRUE and
-     * the result might not be an ASCII string.
-     * The domain name might be modified according to the types of errors.
-     * Labels with severe errors will be left in (or turned into) their Unicode form.
-     *
-     * The UErrorCode indicates an error only in exceptional cases,
-     * such as a U_MEMORY_ALLOCATION_ERROR.
-     *
-     * @param name Input domain name
-     * @param dest Destination string object
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual UnicodeString &
-    nameToASCII(const UnicodeString &name, UnicodeString &dest,
-                IDNAInfo &info, UErrorCode &errorCode) const = 0;
-
-    /**
-     * Converts a whole domain name into its Unicode form for human-readable display.
-     * If any processing step fails, then info.hasErrors() will be TRUE.
-     * The domain name might be modified according to the types of errors.
-     *
-     * The UErrorCode indicates an error only in exceptional cases,
-     * such as a U_MEMORY_ALLOCATION_ERROR.
-     *
-     * @param name Input domain name
-     * @param dest Destination string object
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual UnicodeString &
-    nameToUnicode(const UnicodeString &name, UnicodeString &dest,
-                  IDNAInfo &info, UErrorCode &errorCode) const = 0;
-
-    // UTF-8 versions of the processing methods ---------------------------- ***
-
-    /**
-     * Converts a single domain name label into its ASCII form for DNS lookup.
-     * UTF-8 version of labelToASCII(), same behavior.
-     *
-     * @param label Input domain name label
-     * @param dest Destination byte sink; Flush()ed if successful
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual void
-    labelToASCII_UTF8(const StringPiece &label, ByteSink &dest,
-                      IDNAInfo &info, UErrorCode &errorCode) const;
-
-    /**
-     * Converts a single domain name label into its Unicode form for human-readable display.
-     * UTF-8 version of labelToUnicode(), same behavior.
-     *
-     * @param label Input domain name label
-     * @param dest Destination byte sink; Flush()ed if successful
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual void
-    labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest,
-                       IDNAInfo &info, UErrorCode &errorCode) const;
-
-    /**
-     * Converts a whole domain name into its ASCII form for DNS lookup.
-     * UTF-8 version of nameToASCII(), same behavior.
-     *
-     * @param name Input domain name
-     * @param dest Destination byte sink; Flush()ed if successful
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual void
-    nameToASCII_UTF8(const StringPiece &name, ByteSink &dest,
-                     IDNAInfo &info, UErrorCode &errorCode) const;
-
-    /**
-     * Converts a whole domain name into its Unicode form for human-readable display.
-     * UTF-8 version of nameToUnicode(), same behavior.
-     *
-     * @param name Input domain name
-     * @param dest Destination byte sink; Flush()ed if successful
-     * @param info Output container of IDNA processing details.
-     * @param errorCode 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 dest
-     * @draft ICU 4.6
-     */
-    virtual void
-    nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest,
-                      IDNAInfo &info, UErrorCode &errorCode) const;
-
-private:
-    // No ICU "poor man's RTTI" for this class nor its subclasses.
-    virtual UClassID getDynamicClassID() const;
-};
-
-class UTS46;
-
-/**
- * Output container for IDNA processing errors.
- * The IDNAInfo class is not suitable for subclassing.
- * @draft ICU 4.6
- */
-class U_COMMON_API IDNAInfo : public UMemory {
-public:
-    /**
-     * Constructor for stack allocation.
-     * @draft ICU 4.6
-     */
-    IDNAInfo() : errors(0), labelErrors(0), isTransDiff(FALSE), isBiDi(FALSE), isOkBiDi(TRUE) {}
-    /**
-     * Were there IDNA processing errors?
-     * @return TRUE if there were processing errors
-     * @draft ICU 4.6
-     */
-    UBool hasErrors() const { return errors!=0; }
-    /**
-     * Returns a bit set indicating IDNA processing errors.
-     * See UIDNA_ERROR_... constants in uidna.h.
-     * @return bit set of processing errors
-     * @draft ICU 4.6
-     */
-    uint32_t getErrors() const { return errors; }
-    /**
-     * Returns TRUE if transitional and nontransitional processing produce different results.
-     * This is the case when the input label or domain name contains
-     * one or more deviation characters outside a Punycode label (see UTS #46).
-     * <ul>
-     * <li>With nontransitional processing, such characters are
-     * copied to the destination string.
-     * <li>With transitional processing, such characters are
-     * mapped (sharp s/sigma) or removed (joiner/nonjoiner).
-     * </ul>
-     * @return TRUE if transitional and nontransitional processing produce different results
-     * @draft ICU 4.6
-     */
-    UBool isTransitionalDifferent() const { return isTransDiff; }
-
-private:
-    friend class UTS46;
-
-    IDNAInfo(const IDNAInfo &other);  // no copying
-    IDNAInfo &operator=(const IDNAInfo &other);  // no copying
-
-    void reset() {
-        errors=labelErrors=0;
-        isTransDiff=FALSE;
-        isBiDi=FALSE;
-        isOkBiDi=TRUE;
-    }
-
-    uint32_t errors, labelErrors;
-    UBool isTransDiff;
-    UBool isBiDi;
-    UBool isOkBiDi;
-};
-
-U_NAMESPACE_END
-
-#endif  // UCONFIG_NO_IDNA
-#endif  // __IDNA_H__
diff --git a/source/common/unicode/localpointer.h b/source/common/unicode/localpointer.h
deleted file mode 100644
index b76a1f8..0000000
--- a/source/common/unicode/localpointer.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  localpointer.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009nov13
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __LOCALPOINTER_H__
-#define __LOCALPOINTER_H__
-
-/**
- * \file 
- * \brief C++ API: "Smart pointers" for use with and in ICU4C C++ code.
- *
- * These classes are inspired by
- * - std::auto_ptr
- * - boost::scoped_ptr & boost::scoped_array
- * - Taligent Safe Pointers (TOnlyPointerTo)
- *
- * but none of those provide for all of the goals for ICU smart pointers:
- * - Smart pointer owns the object and releases it when it goes out of scope.
- * - No transfer of ownership via copy/assignment to reduce misuse. Simpler & more robust.
- * - ICU-compatible: No exceptions.
- * - Need to be able to orphan/release the pointer and its ownership.
- * - Need variants for normal C++ object pointers, C++ arrays, and ICU C service objects.
- *
- * For details see http://site.icu-project.org/design/cpp/scoped_ptr
- */
-
-#include "unicode/utypes.h"
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * "Smart pointer" base class; do not use directly: use LocalPointer etc.
- *
- * Base class for smart pointer classes that do not throw exceptions.
- *
- * Do not use this base class directly, since it does not delete its pointer.
- * A subclass must implement methods that delete the pointer:
- * Destructor and adoptInstead().
- *
- * There is no operator T *() provided because the programmer must decide
- * whether to use getAlias() (without transfer of ownership) or orpan()
- * (with transfer of ownership and NULLing of the pointer).
- *
- * @see LocalPointer
- * @see LocalArray
- * @see U_DEFINE_LOCAL_OPEN_POINTER
- * @stable ICU 4.4
- */
-template<typename T>
-class LocalPointerBase {
-public:
-    /**
-     * Constructor takes ownership.
-     * @param p simple pointer to an object that is adopted
-     * @stable ICU 4.4
-     */
-    explicit LocalPointerBase(T *p=NULL) : ptr(p) {}
-    /**
-     * Destructor deletes the object it owns.
-     * Subclass must override: Base class does nothing.
-     * @stable ICU 4.4
-     */
-    ~LocalPointerBase() { /* delete ptr; */ }
-    /**
-     * NULL check.
-     * @return TRUE if ==NULL
-     * @stable ICU 4.4
-     */
-    UBool isNull() const { return ptr==NULL; }
-    /**
-     * NULL check.
-     * @return TRUE if !=NULL
-     * @stable ICU 4.4
-     */
-    UBool isValid() const { return ptr!=NULL; }
-    /**
-     * Comparison with a simple pointer, so that existing code
-     * with ==NULL need not be changed.
-     * @param other simple pointer for comparison
-     * @return true if this pointer value equals other
-     * @stable ICU 4.4
-     */
-    bool operator==(const T *other) const { return ptr==other; }
-    /**
-     * Comparison with a simple pointer, so that existing code
-     * with !=NULL need not be changed.
-     * @param other simple pointer for comparison
-     * @return true if this pointer value differs from other
-     * @stable ICU 4.4
-     */
-    bool operator!=(const T *other) const { return ptr!=other; }
-    /**
-     * Access without ownership change.
-     * @return the pointer value
-     * @stable ICU 4.4
-     */
-    T *getAlias() const { return ptr; }
-    /**
-     * Access without ownership change.
-     * @return the pointer value as a reference
-     * @stable ICU 4.4
-     */
-    T &operator*() const { return *ptr; }
-    /**
-     * Access without ownership change.
-     * @return the pointer value
-     * @stable ICU 4.4
-     */
-    T *operator->() const { return ptr; }
-    /**
-     * Gives up ownership; the internal pointer becomes NULL.
-     * @return the pointer value;
-     *         caller becomes responsible for deleting the object
-     * @stable ICU 4.4
-     */
-    T *orphan() {
-        T *p=ptr;
-        ptr=NULL;
-        return p;
-    }
-    /**
-     * Deletes the object it owns,
-     * and adopts (takes ownership of) the one passed in.
-     * Subclass must override: Base class does not delete the object.
-     * @param p simple pointer to an object that is adopted
-     * @stable ICU 4.4
-     */
-    void adoptInstead(T *p) {
-        // delete ptr;
-        ptr=p;
-    }
-protected:
-    T *ptr;
-private:
-    // No comparison operators with other LocalPointerBases.
-    bool operator==(const LocalPointerBase &other);
-    bool operator!=(const LocalPointerBase &other);
-    // No ownership transfer: No copy constructor, no assignment operator.
-    LocalPointerBase(const LocalPointerBase &other);
-    void operator=(const LocalPointerBase &other);
-    // No heap allocation. Use only on the stack.
-    static void * U_EXPORT2 operator new(size_t size);
-    static void * U_EXPORT2 operator new[](size_t size);
-#if U_HAVE_PLACEMENT_NEW
-    static void * U_EXPORT2 operator new(size_t, void *ptr);
-#endif
-};
-
-/**
- * "Smart pointer" class, deletes objects via the standard C++ delete operator.
- * For most methods see the LocalPointerBase base class.
- *
- * Usage example:
- * \code
- * LocalPointer<UnicodeString> s(new UnicodeString((UChar32)0x50005));
- * int32_t length=s->length();  // 2
- * UChar lead=s->charAt(0);  // 0xd900
- * if(some condition) { return; }  // no need to explicitly delete the pointer
- * s.adoptInstead(new UnicodeString((UChar)0xfffc));
- * length=s->length();  // 1
- * // no need to explicitly delete the pointer
- * \endcode
- *
- * @see LocalPointerBase
- * @stable ICU 4.4
- */
-template<typename T>
-class LocalPointer : public LocalPointerBase<T> {
-public:
-    /**
-     * Constructor takes ownership.
-     * @param p simple pointer to an object that is adopted
-     * @stable ICU 4.4
-     */
-    explicit LocalPointer(T *p=NULL) : LocalPointerBase<T>(p) {}
-    /**
-     * Destructor deletes the object it owns.
-     * @stable ICU 4.4
-     */
-    ~LocalPointer() {
-        delete LocalPointerBase<T>::ptr;
-    }
-    /**
-     * Deletes the object it owns,
-     * and adopts (takes ownership of) the one passed in.
-     * @param p simple pointer to an object that is adopted
-     * @stable ICU 4.4
-     */
-    void adoptInstead(T *p) {
-        delete LocalPointerBase<T>::ptr;
-        LocalPointerBase<T>::ptr=p;
-    }
-};
-
-/**
- * "Smart pointer" class, deletes objects via the C++ array delete[] operator.
- * For most methods see the LocalPointerBase base class.
- * Adds operator[] for array item access.
- *
- * Usage example:
- * \code
- * LocalArray<UnicodeString> a(new UnicodeString[2]);
- * a[0].append((UChar)0x61);
- * if(some condition) { return; }  // no need to explicitly delete the array
- * a.adoptInstead(new UnicodeString[4]);
- * a[3].append((UChar)0x62).append((UChar)0x63).reverse();
- * // no need to explicitly delete the array
- * \endcode
- *
- * @see LocalPointerBase
- * @stable ICU 4.4
- */
-template<typename T>
-class LocalArray : public LocalPointerBase<T> {
-public:
-    /**
-     * Constructor takes ownership.
-     * @param p simple pointer to an array of T objects that is adopted
-     * @stable ICU 4.4
-     */
-    explicit LocalArray(T *p=NULL) : LocalPointerBase<T>(p) {}
-    /**
-     * Destructor deletes the array it owns.
-     * @stable ICU 4.4
-     */
-    ~LocalArray() {
-        delete[] LocalPointerBase<T>::ptr;
-    }
-    /**
-     * Deletes the array it owns,
-     * and adopts (takes ownership of) the one passed in.
-     * @param p simple pointer to an array of T objects that is adopted
-     * @stable ICU 4.4
-     */
-    void adoptInstead(T *p) {
-        delete[] LocalPointerBase<T>::ptr;
-        LocalPointerBase<T>::ptr=p;
-    }
-    /**
-     * Array item access (writable).
-     * No index bounds check.
-     * @param i array index
-     * @return reference to the array item
-     * @stable ICU 4.4
-     */
-    T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
-};
-
-/**
- * \def U_DEFINE_LOCAL_OPEN_POINTER
- * "Smart pointer" definition macro, deletes objects via the closeFunction.
- * Defines a subclass of LocalPointerBase which works just
- * like LocalPointer<Type> except that this subclass will use the closeFunction
- * rather than the C++ delete operator.
- *
- * Requirement: The closeFunction must tolerate a NULL pointer.
- * (We could add a NULL check here but it is normally redundant.)
- *
- * Usage example:
- * \code
- * LocalUCaseMapPointer csm(ucasemap_open(localeID, options, &errorCode));
- * utf8OutLength=ucasemap_utf8ToLower(csm.getAlias(),
- *     utf8Out, (int32_t)sizeof(utf8Out),
- *     utf8In, utf8InLength, &errorCode);
- * if(U_FAILURE(errorCode)) { return; }  // no need to explicitly delete the UCaseMap
- * \endcode
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \
-    class LocalPointerClassName : public LocalPointerBase<Type> { \
-    public: \
-        explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase<Type>(p) {} \
-        ~LocalPointerClassName() { closeFunction(ptr); } \
-        void adoptInstead(Type *p) { \
-            closeFunction(ptr); \
-            ptr=p; \
-        } \
-    }
-
-U_NAMESPACE_END
-
-#endif  /* U_SHOW_CPLUSPLUS_API */
-#endif  /* __LOCALPOINTER_H__ */
diff --git a/source/common/unicode/locid.h b/source/common/unicode/locid.h
deleted file mode 100644
index 14f5285..0000000
--- a/source/common/unicode/locid.h
+++ /dev/null
@@ -1,781 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1996-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File locid.h
-*
-* Created by: Helena Shih
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/11/97    aliu        Changed gLocPath to fgLocPath and added methods to
-*                           get and set it.
-*   04/02/97    aliu        Made operator!= inline; fixed return value of getName().
-*   04/15/97    aliu        Cleanup for AIX/Win32.
-*   04/24/97    aliu        Numerous changes per code review.
-*   08/18/98    stephen     Added tokenizeString(),changed getDisplayName()
-*   09/08/98    stephen     Moved definition of kEmptyString for Mac Port
-*   11/09/99    weiv        Added const char * getName() const;
-*   04/12/00    srl         removing unicodestring api's and cached hash code
-*   08/10/01    grhoten     Change the static Locales to accessor functions
-******************************************************************************
-*/
-
-#ifndef LOCID_H
-#define LOCID_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/putil.h"
-#include "unicode/uloc.h"
-#include "unicode/strenum.h"
-
-/**
- * \file
- * \brief C++ API: Locale ID object.
- */
-
-/**
- * A <code>Locale</code> object represents a specific geographical, political,
- * or cultural region. An operation that requires a <code>Locale</code> to perform
- * its task is called <em>locale-sensitive</em> and uses the <code>Locale</code>
- * to tailor information for the user. For example, displaying a number
- * is a locale-sensitive operation--the number should be formatted
- * according to the customs/conventions of the user's native country,
- * region, or culture.
- *
- * The Locale class is not suitable for subclassing.
- *
- * <P>
- * You can create a <code>Locale</code> object using the constructor in
- * this class:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- *       Locale( const   char*  language,
- *               const   char*  country,
- *               const   char*  variant);
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * The first argument to the constructors is a valid <STRONG>ISO
- * Language Code.</STRONG> These codes are the lower-case two-letter
- * codes as defined by ISO-639.
- * You can find a full list of these codes at:
- * <BR><a href ="http://www.loc.gov/standards/iso639-2/">
- * http://www.loc.gov/standards/iso639-2/</a>
- *
- * <P>
- * The second argument to the constructors is a valid <STRONG>ISO Country
- * Code.</STRONG> These codes are the upper-case two-letter codes
- * as defined by ISO-3166.
- * You can find a full list of these codes at a number of sites, such as:
- * <BR><a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
- * http://www.iso.org/iso/en/prods-services/iso3166ma/index.html</a>
- *
- * <P>
- * The third constructor requires a third argument--the <STRONG>Variant.</STRONG>
- * The Variant codes are vendor and browser-specific.
- * For example, use REVISED for a langauge's revised script orthography, and POSIX for POSIX.
- * Where there are two variants, separate them with an underscore, and
- * put the most important one first. For
- * example, a Traditional Spanish collation might be referenced, with
- * "ES", "ES", "Traditional_POSIX".
- *
- * <P>
- * Because a <code>Locale</code> object is just an identifier for a region,
- * no validity check is performed when you construct a <code>Locale</code>.
- * If you want to see whether particular resources are available for the
- * <code>Locale</code> you construct, you must query those resources. For
- * example, ask the <code>NumberFormat</code> for the locales it supports
- * using its <code>getAvailableLocales</code> method.
- * <BR><STRONG>Note:</STRONG> When you ask for a resource for a particular
- * locale, you get back the best available match, not necessarily
- * precisely what you asked for. For more information, look at
- * <code>ResourceBundle</code>.
- *
- * <P>
- * The <code>Locale</code> class provides a number of convenient constants
- * that you can use to create <code>Locale</code> objects for commonly used
- * locales. For example, the following refers to a <code>Locale</code> object
- * for the United States:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- *       Locale::getUS()
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * <P>
- * Once you've created a <code>Locale</code> you can query it for information about
- * itself. Use <code>getCountry</code> to get the ISO Country Code and
- * <code>getLanguage</code> to get the ISO Language Code. You can
- * use <code>getDisplayCountry</code> to get the
- * name of the country suitable for displaying to the user. Similarly,
- * you can use <code>getDisplayLanguage</code> to get the name of
- * the language suitable for displaying to the user. Interestingly,
- * the <code>getDisplayXXX</code> methods are themselves locale-sensitive
- * and have two versions: one that uses the default locale and one
- * that takes a locale as an argument and displays the name or country in
- * a language appropriate to that locale.
- *
- * <P>
- * ICU provides a number of classes that perform locale-sensitive
- * operations. For example, the <code>NumberFormat</code> class formats
- * numbers, currency, or percentages in a locale-sensitive manner. Classes
- * such as <code>NumberFormat</code> have a number of convenience methods
- * for creating a default object of that type. For example, the
- * <code>NumberFormat</code> class provides these three convenience methods
- * for creating a default <code>NumberFormat</code> object:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- *     UErrorCode success = U_ZERO_ERROR;
- *     Locale myLocale;
- *     NumberFormat *nf;
- *
- *     nf = NumberFormat::createInstance( success );          delete nf;
- *     nf = NumberFormat::createCurrencyInstance( success );  delete nf;
- *     nf = NumberFormat::createPercentInstance( success );   delete nf;
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * Each of these methods has two variants; one with an explicit locale
- * and one without; the latter using the default locale.
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- *     nf = NumberFormat::createInstance( myLocale, success );          delete nf;
- *     nf = NumberFormat::createCurrencyInstance( myLocale, success );  delete nf;
- *     nf = NumberFormat::createPercentInstance( myLocale, success );   delete nf;
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * A <code>Locale</code> is the mechanism for identifying the kind of object
- * (<code>NumberFormat</code>) that you would like to get. The locale is
- * <STRONG>just</STRONG> a mechanism for identifying objects,
- * <STRONG>not</STRONG> a container for the objects themselves.
- *
- * <P>
- * Each class that performs locale-sensitive operations allows you
- * to get all the available objects of that type. You can sift
- * through these objects by language, country, or variant,
- * and use the display names to present a menu to the user.
- * For example, you can create a menu of all the collation objects
- * suitable for a given language. Such classes implement these
- * three class methods:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- *       static Locale* getAvailableLocales(int32_t& numLocales)
- *       static UnicodeString& getDisplayName(const Locale&  objectLocale,
- *                                            const Locale&  displayLocale,
- *                                            UnicodeString& displayName)
- *       static UnicodeString& getDisplayName(const Locale&  objectLocale,
- *                                            UnicodeString& displayName)
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * @stable ICU 2.0
- * @see ResourceBundle
- */
-U_NAMESPACE_BEGIN
-class U_COMMON_API Locale : public UObject {
-public:
-    /** Useful constant for the Root locale. @stable ICU 4.4 */
-    static const Locale &U_EXPORT2 getRoot(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getEnglish(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getFrench(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getGerman(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getItalian(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getJapanese(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getKorean(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getChinese(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getSimplifiedChinese(void);
-    /** Useful constant for this language. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getTraditionalChinese(void);
-
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getFrance(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getGermany(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getItaly(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getJapan(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getKorea(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getChina(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getPRC(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getTaiwan(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getUK(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getUS(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getCanada(void);
-    /** Useful constant for this country/region. @stable ICU 2.0 */
-    static const Locale &U_EXPORT2 getCanadaFrench(void);
-
-
-    /**
-     * Construct a default locale object, a Locale for the default locale ID.
-     *
-     * @see getDefault
-     * @see uloc_getDefault
-     * @stable ICU 2.0
-     */
-    Locale();
-
-    /**
-     * Construct a locale from language, country, variant.
-     * If an error occurs, then the constructed object will be "bogus"
-     * (isBogus() will return TRUE).
-     *
-     * @param language Lowercase two-letter or three-letter ISO-639 code.
-     *  This parameter can instead be an ICU style C locale (e.g. "en_US"),
-     *  but the other parameters must not be used.
-     *  This parameter can be NULL; if so,
-     *  the locale is initialized to match the current default locale.
-     *  (This is the same as using the default constructor.)
-     *  Please note: The Java Locale class does NOT accept the form
-     *  'new Locale("en_US")' but only 'new Locale("en","US")'
-     *
-     * @param country  Uppercase two-letter ISO-3166 code. (optional)
-     * @param variant  Uppercase vendor and browser specific code. See class
-     *                 description. (optional)
-     * @param keywordsAndValues A string consisting of keyword/values pairs, such as
-     *                 "collation=phonebook;currency=euro"
-     *
-     * @see getDefault
-     * @see uloc_getDefault
-     * @stable ICU 2.0
-     */
-    Locale( const   char * language,
-            const   char * country  = 0,
-            const   char * variant  = 0,
-            const   char * keywordsAndValues = 0);
-
-    /**
-     * Initializes a Locale object from another Locale object.
-     *
-     * @param other The Locale object being copied in.
-     * @stable ICU 2.0
-     */
-    Locale(const    Locale& other);
-
-
-    /**
-     * Destructor
-     * @stable ICU 2.0
-     */
-    virtual ~Locale() ;
-
-    /**
-     * Replaces the entire contents of *this with the specified value.
-     *
-     * @param other The Locale object being copied in.
-     * @return      *this
-     * @stable ICU 2.0
-     */
-    Locale& operator=(const Locale& other);
-
-    /**
-     * Checks if two locale keys are the same.
-     *
-     * @param other The locale key object to be compared with this.
-     * @return      True if the two locale keys are the same, false otherwise.
-     * @stable ICU 2.0
-     */
-    UBool   operator==(const    Locale&     other) const;
-
-    /**
-     * Checks if two locale keys are not the same.
-     *
-     * @param other The locale key object to be compared with this.
-     * @return      True if the two locale keys are not the same, false
-     *              otherwise.
-     * @stable ICU 2.0
-     */
-    UBool   operator!=(const    Locale&     other) const;
-
-    /**
-     * Clone this object.
-     * Clones can be used concurrently in multiple threads.
-     * If an error occurs, then NULL is returned.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    Locale *clone() const;
-
-    /**
-     * Common methods of getting the current default Locale. Used for the
-     * presentation: menus, dialogs, etc. Generally set once when your applet or
-     * application is initialized, then never reset. (If you do reset the
-     * default locale, you probably want to reload your GUI, so that the change
-     * is reflected in your interface.)
-     *
-     * More advanced programs will allow users to use different locales for
-     * different fields, e.g. in a spreadsheet.
-     *
-     * Note that the initial setting will match the host system.
-     * @return a reference to the Locale object for the default locale ID
-     * @system
-     * @stable ICU 2.0
-     */
-    static const Locale& U_EXPORT2 getDefault(void);
-
-    /**
-     * Sets the default. Normally set once at the beginning of a process,
-     * then never reset.
-     * setDefault() only changes ICU's default locale ID, <strong>not</strong>
-     * the default locale ID of the runtime environment.
-     *
-     * @param newLocale Locale to set to.  If NULL, set to the value obtained
-     *                  from the runtime environement.
-     * @param success The error code.
-     * @system
-     * @stable ICU 2.0
-     */
-    static void U_EXPORT2 setDefault(const Locale& newLocale,
-                                     UErrorCode&   success);
-
-    /**
-     * Creates a locale which has had minimal canonicalization
-     * as per uloc_getName().
-     * @param name The name to create from.  If name is null,
-     *  the default Locale is used.
-     * @return new locale object
-     * @stable ICU 2.0
-     * @see uloc_getName
-     */
-    static Locale U_EXPORT2 createFromName(const char *name);
-
-    /**
-     * Creates a locale from the given string after canonicalizing
-     * the string by calling uloc_canonicalize().
-     * @param name the locale ID to create from.  Must not be NULL.
-     * @return a new locale object corresponding to the given name
-     * @stable ICU 3.0
-     * @see uloc_canonicalize
-     */
-    static Locale U_EXPORT2 createCanonical(const char* name);
-
-    /**
-     * Returns the locale's ISO-639 language code.
-     * @return      An alias to the code
-     * @stable ICU 2.0
-     */
-    inline const char *  getLanguage( ) const;
-
-    /**
-     * Returns the locale's ISO-15924 abbreviation script code.
-     * @return      An alias to the code
-     * @see uscript_getShortName
-     * @see uscript_getCode
-     * @stable ICU 2.8
-     */
-    inline const char *  getScript( ) const;
-
-    /**
-     * Returns the locale's ISO-3166 country code.
-     * @return      An alias to the code
-     * @stable ICU 2.0
-     */
-    inline const char *  getCountry( ) const;
-
-    /**
-     * Returns the locale's variant code.
-     * @return      An alias to the code
-     * @stable ICU 2.0
-     */
-    inline const char *  getVariant( ) const;
-
-    /**
-     * Returns the programmatic name of the entire locale, with the language,
-     * country and variant separated by underbars. If a field is missing, up
-     * to two leading underbars will occur. Example: "en", "de_DE", "en_US_WIN",
-     * "de__POSIX", "fr__MAC", "__MAC", "_MT", "_FR_EURO"
-     * @return      A pointer to "name".
-     * @stable ICU 2.0
-     */
-    inline const char * getName() const;
-
-    /**
-     * Returns the programmatic name of the entire locale as getName would return,
-     * but without keywords.
-     * @return      A pointer to "name".
-     * @see getName
-     * @stable ICU 2.8
-     */
-    const char * getBaseName() const;
-
-
-    /**
-     * Gets the list of keywords for the specified locale.
-     *
-     * @param status the status code
-     * @return pointer to StringEnumeration class, or NULL if there are no keywords. 
-     * Client must dispose of it by calling delete.
-     * @stable ICU 2.8
-     */
-    StringEnumeration * createKeywords(UErrorCode &status) const;
-
-    /**
-     * Get the value for a keyword.
-     *
-     * @param keywordName name of the keyword for which we want the value. Case insensitive.
-     * @param buffer The buffer to receive the keyword value.
-     * @param bufferCapacity The capacity of receiving buffer
-     * @param status Returns any error information while performing this operation.
-     * @return the length of the keyword value
-     *
-     * @stable ICU 2.8
-     */
-    int32_t getKeywordValue(const char* keywordName, char *buffer, int32_t bufferCapacity, UErrorCode &status) const;
-
-    /**
-     * Set the value for a keyword.
-     *
-     * @param keywordName name of the keyword to be set. Case insensitive.
-     * @param keywordValue value of the keyword to be set. If 0-length or
-     *  NULL, will result in the keyword being removed. No error is given if
-     *  that keyword does not exist.
-     * @param status Returns any error information while performing this operation.
-     *
-     * @internal 
-     */
-    void setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status);
-
-    /**
-     * returns the locale's three-letter language code, as specified
-     * in ISO draft standard ISO-639-2.
-     * @return      An alias to the code, or NULL
-     * @stable ICU 2.0
-     */
-    const char * getISO3Language() const;
-
-    /**
-     * Fills in "name" with the locale's three-letter ISO-3166 country code.
-     * @return      An alias to the code, or NULL
-     * @stable ICU 2.0
-     */
-    const char * getISO3Country() const;
-
-    /**
-     * Returns the Windows LCID value corresponding to this locale.
-     * This value is stored in the resource data for the locale as a one-to-four-digit
-     * hexadecimal number.  If the resource is missing, in the wrong format, or
-     * there is no Windows LCID value that corresponds to this locale, returns 0.
-     * @stable ICU 2.0
-     */
-    uint32_t        getLCID(void) const;
-
-    /**
-     * Fills in "dispLang" with the name of this locale's language in a format suitable for
-     * user display in the default locale.  For example, if the locale's language code is
-     * "fr" and the default locale's language code is "en", this function would set
-     * dispLang to "French".
-     * @param dispLang  Receives the language's display name.
-     * @return          A reference to "dispLang".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayLanguage(UnicodeString&   dispLang) const;
-
-    /**
-     * Fills in "dispLang" with the name of this locale's language in a format suitable for
-     * user display in the locale specified by "displayLocale".  For example, if the locale's
-     * language code is "en" and displayLocale's language code is "fr", this function would set
-     * dispLang to "Anglais".
-     * @param displayLocale  Specifies the locale to be used to display the name.  In other words,
-     *                  if the locale's language code is "en", passing Locale::getFrench() for
-     *                  displayLocale would result in "Anglais", while passing Locale::getGerman()
-     *                  for displayLocale would result in "Englisch".
-     * @param dispLang  Receives the language's display name.
-     * @return          A reference to "dispLang".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayLanguage( const   Locale&         displayLocale,
-                                                UnicodeString&  dispLang) const;
-
-    /**
-     * Fills in "dispScript" with the name of this locale's script in a format suitable
-     * for user display in the default locale.  For example, if the locale's script code
-     * is "LATN" and the default locale's language code is "en", this function would set
-     * dispScript to "Latin".
-     * @param dispScript    Receives the scripts's display name.
-     * @return              A reference to "dispScript".
-     * @stable ICU 2.8
-     */
-    UnicodeString&  getDisplayScript(          UnicodeString& dispScript) const;
-
-    /**
-     * Fills in "dispScript" with the name of this locale's country in a format suitable
-     * for user display in the locale specified by "displayLocale".  For example, if the locale's
-     * script code is "LATN" and displayLocale's language code is "en", this function would set
-     * dispScript to "Latin".
-     * @param displayLocale      Specifies the locale to be used to display the name.  In other
-     *                      words, if the locale's script code is "LATN", passing
-     *                      Locale::getFrench() for displayLocale would result in "", while
-     *                      passing Locale::getGerman() for displayLocale would result in
-     *                      "".
-     * @param dispScript    Receives the scripts's display name.
-     * @return              A reference to "dispScript".
-     * @stable ICU 2.8
-     */
-    UnicodeString&  getDisplayScript(  const   Locale&         displayLocale,
-                                               UnicodeString&  dispScript) const;
-
-    /**
-     * Fills in "dispCountry" with the name of this locale's country in a format suitable
-     * for user display in the default locale.  For example, if the locale's country code
-     * is "FR" and the default locale's language code is "en", this function would set
-     * dispCountry to "France".
-     * @param dispCountry   Receives the country's display name.
-     * @return              A reference to "dispCountry".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayCountry(          UnicodeString& dispCountry) const;
-
-    /**
-     * Fills in "dispCountry" with the name of this locale's country in a format suitable
-     * for user display in the locale specified by "displayLocale".  For example, if the locale's
-     * country code is "US" and displayLocale's language code is "fr", this function would set
-     * dispCountry to "&Eacute;tats-Unis".
-     * @param displayLocale      Specifies the locale to be used to display the name.  In other
-     *                      words, if the locale's country code is "US", passing
-     *                      Locale::getFrench() for displayLocale would result in "&Eacute;tats-Unis", while
-     *                      passing Locale::getGerman() for displayLocale would result in
-     *                      "Vereinigte Staaten".
-     * @param dispCountry   Receives the country's display name.
-     * @return              A reference to "dispCountry".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayCountry(  const   Locale&         displayLocale,
-                                                UnicodeString&  dispCountry) const;
-
-    /**
-     * Fills in "dispVar" with the name of this locale's variant code in a format suitable
-     * for user display in the default locale.
-     * @param dispVar   Receives the variant's name.
-     * @return          A reference to "dispVar".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayVariant(      UnicodeString& dispVar) const;
-
-    /**
-     * Fills in "dispVar" with the name of this locale's variant code in a format
-     * suitable for user display in the locale specified by "displayLocale".
-     * @param displayLocale  Specifies the locale to be used to display the name.
-     * @param dispVar   Receives the variant's display name.
-     * @return          A reference to "dispVar".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayVariant(  const   Locale&         displayLocale,
-                                                UnicodeString&  dispVar) const;
-
-    /**
-     * Fills in "name" with the name of this locale in a format suitable for user display
-     * in the default locale.  This function uses getDisplayLanguage(), getDisplayCountry(),
-     * and getDisplayVariant() to do its work, and outputs the display name in the format
-     * "language (country[,variant])".  For example, if the default locale is en_US, then
-     * fr_FR's display name would be "French (France)", and es_MX_Traditional's display name
-     * would be "Spanish (Mexico,Traditional)".
-     * @param name  Receives the locale's display name.
-     * @return      A reference to "name".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayName(         UnicodeString&  name) const;
-
-    /**
-     * Fills in "name" with the name of this locale in a format suitable for user display
-     * in the locale specfied by "displayLocale".  This function uses getDisplayLanguage(),
-     * getDisplayCountry(), and getDisplayVariant() to do its work, and outputs the display
-     * name in the format "language (country[,variant])".  For example, if displayLocale is
-     * fr_FR, then en_US's display name would be "Anglais (&Eacute;tats-Unis)", and no_NO_NY's
-     * display name would be "norv&eacute;gien (Norv&egrave;ge,NY)".
-     * @param displayLocale  Specifies the locale to be used to display the name.
-     * @param name      Receives the locale's display name.
-     * @return          A reference to "name".
-     * @stable ICU 2.0
-     */
-    UnicodeString&  getDisplayName( const   Locale&         displayLocale,
-                                            UnicodeString&  name) const;
-
-    /**
-     * Generates a hash code for the locale.
-     * @stable ICU 2.0
-     */
-    int32_t         hashCode(void) const;
-
-    /**
-     * Sets the locale to bogus
-     * A bogus locale represents a non-existing locale associated
-     * with services that can be instantiated from non-locale data
-     * in addition to locale (for example, collation can be
-     * instantiated from a locale and from a rule set).
-     * @stable ICU 2.1
-     */
-    void setToBogus();
-
-    /**
-     * Gets the bogus state. Locale object can be bogus if it doesn't exist
-     * @return FALSE if it is a real locale, TRUE if it is a bogus locale
-     * @stable ICU 2.1
-     */
-    UBool isBogus(void) const;
-
-    /**
-     * Returns a list of all installed locales.
-     * @param count Receives the number of locales in the list.
-     * @return      A pointer to an array of Locale objects.  This array is the list
-     *              of all locales with installed resource files.  The called does NOT
-     *              get ownership of this list, and must NOT delete it.
-     * @stable ICU 2.0
-     */
-    static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
-
-    /**
-     * Gets a list of all available 2-letter country codes defined in ISO 3166.  This is a
-     * pointer to an array of pointers to arrays of char.  All of these pointers are
-     * owned by ICU-- do not delete them, and do not write through them.  The array is
-     * terminated with a null pointer.
-     * @return a list of all available country codes
-     * @stable ICU 2.0
-     */
-    static const char* const* U_EXPORT2 getISOCountries();
-
-    /**
-     * Gets a list of all available language codes defined in ISO 639.  This is a pointer
-     * to an array of pointers to arrays of char.  All of these pointers are owned
-     * by ICU-- do not delete them, and do not write through them.  The array is
-     * terminated with a null pointer.
-     * @return a list of all available language codes
-     * @stable ICU 2.0
-     */
-    static const char* const* U_EXPORT2 getISOLanguages();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-protected: /* only protected for testing purposes. DO NOT USE. */
-    /**
-     * Set this from a single POSIX style locale string.
-     * @internal
-     */
-    void setFromPOSIXID(const char *posixID);
-
-private:
-    /**
-     * Initialize the locale object with a new name.
-     * Was deprecated - used in implementation - moved internal
-     *
-     * @param cLocaleID The new locale name.
-     */
-    Locale& init(const char* cLocaleID, UBool canonicalize);
-
-    /*
-     * Internal constructor to allow construction of a locale object with
-     *   NO side effects.   (Default constructor tries to get
-     *   the default locale.)
-     */
-    enum ELocaleType {
-        eBOGUS
-    };
-    Locale(ELocaleType);
-
-    /**
-     * Initialize the locale cache for commonly used locales
-     */
-    static Locale *getLocaleCache(void);
-
-    char language[ULOC_LANG_CAPACITY];
-    char script[ULOC_SCRIPT_CAPACITY];
-    char country[ULOC_COUNTRY_CAPACITY];
-    int32_t variantBegin;
-    char* fullName;
-    char fullNameBuffer[ULOC_FULLNAME_CAPACITY];
-    // name without keywords
-    char* baseName;
-    char baseNameBuffer[ULOC_FULLNAME_CAPACITY];
-
-    UBool fIsBogus;
-
-    static const Locale &getLocale(int locid);
-
-    /**
-     * A friend to allow the default locale to be set by either the C or C++ API.
-     * @internal
-     */
-    friend void locale_set_default_internal(const char *);
-};
-
-inline UBool
-Locale::operator!=(const    Locale&     other) const
-{
-    return !operator==(other);
-}
-
-inline const char *
-Locale::getCountry() const
-{
-    return country;
-}
-
-inline const char *
-Locale::getLanguage() const
-{
-    return language;
-}
-
-inline const char *
-Locale::getScript() const
-{
-    return script;
-}
-
-inline const char *
-Locale::getVariant() const
-{
-    getBaseName(); // lazy init
-    return &baseName[variantBegin];
-}
-
-inline const char *
-Locale::getName() const
-{
-    return fullName;
-}
-
-inline UBool
-Locale::isBogus(void) const {
-    return fIsBogus;
-}
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/normalizer2.h b/source/common/unicode/normalizer2.h
deleted file mode 100644
index f448cc4..0000000
--- a/source/common/unicode/normalizer2.h
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  normalizer2.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009nov22
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __NORMALIZER2_H__
-#define __NORMALIZER2_H__
-
-/**
- * \file
- * \brief C++ API: New API for Unicode Normalization.
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/uniset.h"
-#include "unicode/unistr.h"
-#include "unicode/unorm2.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Unicode normalization functionality for standard Unicode normalization or
- * for using custom mapping tables.
- * All instances of this class are unmodifiable/immutable.
- * Instances returned by getInstance() are singletons that must not be deleted by the caller.
- * The Normalizer2 class is not intended for public subclassing.
- *
- * The primary functions are to produce a normalized string and to detect whether
- * a string is already normalized.
- * The most commonly used normalization forms are those defined in
- * http://www.unicode.org/unicode/reports/tr15/
- * However, this API supports additional normalization forms for specialized purposes.
- * For example, NFKC_Casefold is provided via getInstance("nfkc_cf", COMPOSE)
- * and can be used in implementations of UTS #46.
- *
- * Not only are the standard compose and decompose modes supplied,
- * but additional modes are provided as documented in the Mode enum.
- *
- * Some of the functions in this class identify normalization boundaries.
- * At a normalization boundary, the portions of the string
- * before it and starting from it do not interact and can be handled independently.
- *
- * The spanQuickCheckYes() stops at a normalization boundary.
- * When the goal is a normalized string, then the text before the boundary
- * can be copied, and the remainder can be processed with normalizeSecondAndAppend().
- *
- * The hasBoundaryBefore(), hasBoundaryAfter() and isInert() functions test whether
- * a character is guaranteed to be at a normalization boundary,
- * regardless of context.
- * This is used for moving from one normalization boundary to the next
- * or preceding boundary, and for performing iterative normalization.
- *
- * Iterative normalization is useful when only a small portion of a
- * longer string needs to be processed.
- * For example, in ICU, iterative normalization is used by the NormalizationTransliterator
- * (to avoid replacing already-normalized text) and ucol_nextSortKeyPart()
- * (to process only the substring for which sort key bytes are computed).
- *
- * The set of normalization boundaries returned by these functions may not be
- * complete: There may be more boundaries that could be returned.
- * Different functions may return different boundaries.
- * @stable ICU 4.4
- */
-class U_COMMON_API Normalizer2 : public UObject {
-public:
-    /**
-     * Returns a Normalizer2 instance which uses the specified data file
-     * (packageName/name similar to ucnv_openPackage() and ures_open()/ResourceBundle)
-     * and which composes or decomposes text according to the specified mode.
-     * Returns an unmodifiable singleton instance. Do not delete it.
-     *
-     * Use packageName=NULL for data files that are part of ICU's own data.
-     * Use name="nfc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFC/NFD.
-     * Use name="nfkc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFKC/NFKD.
-     * Use name="nfkc_cf" and UNORM2_COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold.
-     *
-     * @param packageName NULL for ICU built-in data, otherwise application data package name
-     * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file
-     * @param mode normalization mode (compose or decompose etc.)
-     * @param errorCode 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 requested Normalizer2, if successful
-     * @stable ICU 4.4
-     */
-    static const Normalizer2 *
-    getInstance(const char *packageName,
-                const char *name,
-                UNormalization2Mode mode,
-                UErrorCode &errorCode);
-
-    /**
-     * Returns the normalized form of the source string.
-     * @param src source string
-     * @param errorCode 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 normalized src
-     * @stable ICU 4.4
-     */
-    UnicodeString
-    normalize(const UnicodeString &src, UErrorCode &errorCode) const {
-        UnicodeString result;
-        normalize(src, result, errorCode);
-        return result;
-    }
-    /**
-     * Writes the normalized form of the source string to the destination string
-     * (replacing its contents) and returns the destination string.
-     * The source and destination strings must be different objects.
-     * @param src source string
-     * @param dest destination string; its contents is replaced with normalized src
-     * @param errorCode 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 dest
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString &
-    normalize(const UnicodeString &src,
-              UnicodeString &dest,
-              UErrorCode &errorCode) const = 0;
-    /**
-     * Appends the normalized form of the second string to the first string
-     * (merging them at the boundary) and returns the first string.
-     * The result is normalized if the first string was normalized.
-     * The first and second strings must be different objects.
-     * @param first string, should be normalized
-     * @param second string, will be normalized
-     * @param errorCode 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 first
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString &
-    normalizeSecondAndAppend(UnicodeString &first,
-                             const UnicodeString &second,
-                             UErrorCode &errorCode) const = 0;
-    /**
-     * Appends the second string to the first string
-     * (merging them at the boundary) and returns the first string.
-     * The result is normalized if both the strings were normalized.
-     * The first and second strings must be different objects.
-     * @param first string, should be normalized
-     * @param second string, should be normalized
-     * @param errorCode 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 first
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString &
-    append(UnicodeString &first,
-           const UnicodeString &second,
-           UErrorCode &errorCode) const = 0;
-
-    /**
-     * Gets the decomposition mapping of c. Equivalent to normalize(UnicodeString(c))
-     * on a UNORM2_DECOMPOSE Normalizer2 instance, but much faster.
-     * This function is independent of the mode of the Normalizer2.
-     * @param c code point
-     * @param decomposition String object which will be set to c's
-     *                      decomposition mapping, if there is one.
-     * @return TRUE if c has a decomposition, otherwise FALSE
-     * @draft ICU 4.6
-     */
-    virtual UBool
-    getDecomposition(UChar32 c, UnicodeString &decomposition) const = 0;
-
-    /**
-     * Tests if the string is normalized.
-     * Internally, in cases where the quickCheck() method would return "maybe"
-     * (which is only possible for the two COMPOSE modes) this method
-     * resolves to "yes" or "no" to provide a definitive result,
-     * at the cost of doing more work in those cases.
-     * @param s input string
-     * @param errorCode 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 TRUE if s is normalized
-     * @stable ICU 4.4
-     */
-    virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const = 0;
-
-    /**
-     * Tests if the string is normalized.
-     * For the two COMPOSE modes, the result could be "maybe" in cases that
-     * would take a little more work to resolve definitively.
-     * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster
-     * combination of quick check + normalization, to avoid
-     * re-checking the "yes" prefix.
-     * @param s input string
-     * @param errorCode 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 UNormalizationCheckResult
-     * @stable ICU 4.4
-     */
-    virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const = 0;
-
-    /**
-     * Returns the end of the normalized substring of the input string.
-     * In other words, with <code>end=spanQuickCheckYes(s, ec);</code>
-     * the substring <code>UnicodeString(s, 0, end)</code>
-     * will pass the quick check with a "yes" result.
-     *
-     * The returned end index is usually one or more characters before the
-     * "no" or "maybe" character: The end index is at a normalization boundary.
-     * (See the class documentation for more about normalization boundaries.)
-     *
-     * When the goal is a normalized string and most input strings are expected
-     * to be normalized already, then call this method,
-     * and if it returns a prefix shorter than the input string,
-     * copy that prefix and use normalizeSecondAndAppend() for the remainder.
-     * @param s input string
-     * @param errorCode 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 "yes" span end index
-     * @stable ICU 4.4
-     */
-    virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const = 0;
-
-    /**
-     * Tests if the character always has a normalization boundary before it,
-     * regardless of context.
-     * If true, then the character does not normalization-interact with
-     * preceding characters.
-     * In other words, a string containing this character can be normalized
-     * by processing portions before this character and starting from this
-     * character independently.
-     * This is used for iterative normalization. See the class documentation for details.
-     * @param c character to test
-     * @return TRUE if c has a normalization boundary before it
-     * @stable ICU 4.4
-     */
-    virtual UBool hasBoundaryBefore(UChar32 c) const = 0;
-
-    /**
-     * Tests if the character always has a normalization boundary after it,
-     * regardless of context.
-     * If true, then the character does not normalization-interact with
-     * following characters.
-     * In other words, a string containing this character can be normalized
-     * by processing portions up to this character and after this
-     * character independently.
-     * This is used for iterative normalization. See the class documentation for details.
-     * Note that this operation may be significantly slower than hasBoundaryBefore().
-     * @param c character to test
-     * @return TRUE if c has a normalization boundary after it
-     * @stable ICU 4.4
-     */
-    virtual UBool hasBoundaryAfter(UChar32 c) const = 0;
-
-    /**
-     * Tests if the character is normalization-inert.
-     * If true, then the character does not change, nor normalization-interact with
-     * preceding or following characters.
-     * In other words, a string containing this character can be normalized
-     * by processing portions before this character and after this
-     * character independently.
-     * This is used for iterative normalization. See the class documentation for details.
-     * Note that this operation may be significantly slower than hasBoundaryBefore().
-     * @param c character to test
-     * @return TRUE if c is normalization-inert
-     * @stable ICU 4.4
-     */
-    virtual UBool isInert(UChar32 c) const = 0;
-
-private:
-    // No ICU "poor man's RTTI" for this class nor its subclasses.
-    virtual UClassID getDynamicClassID() const;
-};
-
-/**
- * Normalization filtered by a UnicodeSet.
- * Normalizes portions of the text contained in the filter set and leaves
- * portions not contained in the filter set unchanged.
- * Filtering is done via UnicodeSet::span(..., USET_SPAN_SIMPLE).
- * Not-in-the-filter text is treated as "is normalized" and "quick check yes".
- * This class implements all of (and only) the Normalizer2 API.
- * An instance of this class is unmodifiable/immutable but is constructed and
- * must be destructed by the owner.
- * @stable ICU 4.4
- */
-class U_COMMON_API FilteredNormalizer2 : public Normalizer2 {
-public:
-    /**
-     * Constructs a filtered normalizer wrapping any Normalizer2 instance
-     * and a filter set.
-     * Both are aliased and must not be modified or deleted while this object
-     * is used.
-     * The filter set should be frozen; otherwise the performance will suffer greatly.
-     * @param n2 wrapped Normalizer2 instance
-     * @param filterSet UnicodeSet which determines the characters to be normalized
-     * @stable ICU 4.4
-     */
-    FilteredNormalizer2(const Normalizer2 &n2, const UnicodeSet &filterSet) :
-            norm2(n2), set(filterSet) {}
-
-    /**
-     * Writes the normalized form of the source string to the destination string
-     * (replacing its contents) and returns the destination string.
-     * The source and destination strings must be different objects.
-     * @param src source string
-     * @param dest destination string; its contents is replaced with normalized src
-     * @param errorCode 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 dest
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString &
-    normalize(const UnicodeString &src,
-              UnicodeString &dest,
-              UErrorCode &errorCode) const;
-    /**
-     * Appends the normalized form of the second string to the first string
-     * (merging them at the boundary) and returns the first string.
-     * The result is normalized if the first string was normalized.
-     * The first and second strings must be different objects.
-     * @param first string, should be normalized
-     * @param second string, will be normalized
-     * @param errorCode 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 first
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString &
-    normalizeSecondAndAppend(UnicodeString &first,
-                             const UnicodeString &second,
-                             UErrorCode &errorCode) const;
-    /**
-     * Appends the second string to the first string
-     * (merging them at the boundary) and returns the first string.
-     * The result is normalized if both the strings were normalized.
-     * The first and second strings must be different objects.
-     * @param first string, should be normalized
-     * @param second string, should be normalized
-     * @param errorCode 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 first
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString &
-    append(UnicodeString &first,
-           const UnicodeString &second,
-           UErrorCode &errorCode) const;
-
-    /**
-     * Gets the decomposition mapping of c. Equivalent to normalize(UnicodeString(c))
-     * on a UNORM2_DECOMPOSE Normalizer2 instance, but much faster.
-     * This function is independent of the mode of the Normalizer2.
-     * @param c code point
-     * @param decomposition String object which will be set to c's
-     *                      decomposition mapping, if there is one.
-     * @return TRUE if c has a decomposition, otherwise FALSE
-     * @draft ICU 4.6
-     */
-    virtual UBool
-    getDecomposition(UChar32 c, UnicodeString &decomposition) const;
-
-    /**
-     * Tests if the string is normalized.
-     * For details see the Normalizer2 base class documentation.
-     * @param s input string
-     * @param errorCode 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 TRUE if s is normalized
-     * @stable ICU 4.4
-     */
-    virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const;
-    /**
-     * Tests if the string is normalized.
-     * For details see the Normalizer2 base class documentation.
-     * @param s input string
-     * @param errorCode 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 UNormalizationCheckResult
-     * @stable ICU 4.4
-     */
-    virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const;
-    /**
-     * Returns the end of the normalized substring of the input string.
-     * For details see the Normalizer2 base class documentation.
-     * @param s input string
-     * @param errorCode 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 "yes" span end index
-     * @stable ICU 4.4
-     */
-    virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const;
-
-    /**
-     * Tests if the character always has a normalization boundary before it,
-     * regardless of context.
-     * For details see the Normalizer2 base class documentation.
-     * @param c character to test
-     * @return TRUE if c has a normalization boundary before it
-     * @stable ICU 4.4
-     */
-    virtual UBool hasBoundaryBefore(UChar32 c) const;
-
-    /**
-     * Tests if the character always has a normalization boundary after it,
-     * regardless of context.
-     * For details see the Normalizer2 base class documentation.
-     * @param c character to test
-     * @return TRUE if c has a normalization boundary after it
-     * @stable ICU 4.4
-     */
-    virtual UBool hasBoundaryAfter(UChar32 c) const;
-
-    /**
-     * Tests if the character is normalization-inert.
-     * For details see the Normalizer2 base class documentation.
-     * @param c character to test
-     * @return TRUE if c is normalization-inert
-     * @stable ICU 4.4
-     */
-    virtual UBool isInert(UChar32 c) const;
-private:
-    UnicodeString &
-    normalize(const UnicodeString &src,
-              UnicodeString &dest,
-              USetSpanCondition spanCondition,
-              UErrorCode &errorCode) const;
-
-    UnicodeString &
-    normalizeSecondAndAppend(UnicodeString &first,
-                             const UnicodeString &second,
-                             UBool doNormalize,
-                             UErrorCode &errorCode) const;
-
-    const Normalizer2 &norm2;
-    const UnicodeSet &set;
-};
-
-U_NAMESPACE_END
-
-#endif  // !UCONFIG_NO_NORMALIZATION
-#endif  // __NORMALIZER2_H__
diff --git a/source/common/unicode/normlzr.h b/source/common/unicode/normlzr.h
deleted file mode 100644
index 475f830..0000000
--- a/source/common/unicode/normlzr.h
+++ /dev/null
@@ -1,797 +0,0 @@
-/*
- ********************************************************************
- * COPYRIGHT:
- * Copyright (c) 1996-2010, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************
- */
-
-#ifndef NORMLZR_H
-#define NORMLZR_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Unicode Normalization
- */
- 
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/chariter.h"
-#include "unicode/normalizer2.h"
-#include "unicode/unistr.h"
-#include "unicode/unorm.h"
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-/**
- * The Normalizer class supports the standard normalization forms described in
- * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode">
- * Unicode Standard Annex #15: Unicode Normalization Forms</a>.
- *
- * Note: This API has been replaced by the Normalizer2 class and is only available
- * for backward compatibility. This class simply delegates to the Normalizer2 class.
- * There is one exception: The new API does not provide a replacement for Normalizer::compare().
- *
- * The Normalizer class consists of two parts:
- * - static functions that normalize strings or test if strings are normalized
- * - a Normalizer object is an iterator that takes any kind of text and
- *   provides iteration over its normalized form
- *
- * The Normalizer class is not suitable for subclassing.
- *
- * For basic information about normalization forms and details about the C API
- * please see the documentation in unorm.h.
- *
- * The iterator API with the Normalizer constructors and the non-static functions
- * use a CharacterIterator as input. It is possible to pass a string which
- * is then internally wrapped in a CharacterIterator.
- * The input text is not normalized all at once, but incrementally where needed
- * (providing efficient random access).
- * This allows to pass in a large text but spend only a small amount of time
- * normalizing a small part of that text.
- * However, if the entire text is normalized, then the iterator will be
- * slower than normalizing the entire text at once and iterating over the result.
- * A possible use of the Normalizer iterator is also to report an index into the
- * original text that is close to where the normalized characters come from.
- *
- * <em>Important:</em> The iterator API was cleaned up significantly for ICU 2.0.
- * The earlier implementation reported the getIndex() inconsistently,
- * and previous() could not be used after setIndex(), next(), first(), and current().
- *
- * Normalizer allows to start normalizing from anywhere in the input text by
- * calling setIndexOnly(), first(), or last().
- * Without calling any of these, the iterator will start at the beginning of the text.
- *
- * At any time, next() returns the next normalized code point (UChar32),
- * with post-increment semantics (like CharacterIterator::next32PostInc()).
- * previous() returns the previous normalized code point (UChar32),
- * with pre-decrement semantics (like CharacterIterator::previous32()).
- *
- * current() returns the current code point
- * (respectively the one at the newly set index) without moving
- * the getIndex(). Note that if the text at the current position
- * needs to be normalized, then these functions will do that.
- * (This is why current() is not const.)
- * It is more efficient to call setIndexOnly() instead, which does not
- * normalize.
- *
- * getIndex() always refers to the position in the input text where the normalized
- * code points are returned from. It does not always change with each returned
- * code point.
- * The code point that is returned from any of the functions
- * corresponds to text at or after getIndex(), according to the
- * function's iteration semantics (post-increment or pre-decrement).
- *
- * next() returns a code point from at or after the getIndex()
- * from before the next() call. After the next() call, the getIndex()
- * might have moved to where the next code point will be returned from
- * (from a next() or current() call).
- * This is semantically equivalent to array access with array[index++]
- * (post-increment semantics).
- *
- * previous() returns a code point from at or after the getIndex()
- * from after the previous() call.
- * This is semantically equivalent to array access with array[--index]
- * (pre-decrement semantics).
- *
- * Internally, the Normalizer iterator normalizes a small piece of text
- * starting at the getIndex() and ending at a following "safe" index.
- * The normalized results is stored in an internal string buffer, and
- * the code points are iterated from there.
- * With multiple iteration calls, this is repeated until the next piece
- * of text needs to be normalized, and the getIndex() needs to be moved.
- *
- * The following "safe" index, the internal buffer, and the secondary
- * iteration index into that buffer are not exposed on the API.
- * This also means that it is currently not practical to return to
- * a particular, arbitrary position in the text because one would need to
- * know, and be able to set, in addition to the getIndex(), at least also the
- * current index into the internal buffer.
- * It is currently only possible to observe when getIndex() changes
- * (with careful consideration of the iteration semantics),
- * at which time the internal index will be 0.
- * For example, if getIndex() is different after next() than before it,
- * then the internal index is 0 and one can return to this getIndex()
- * later with setIndexOnly().
- *
- * Note: While the setIndex() and getIndex() refer to indices in the
- * underlying Unicode input text, the next() and previous() methods
- * iterate through characters in the normalized output.
- * This means that there is not necessarily a one-to-one correspondence
- * between characters returned by next() and previous() and the indices
- * passed to and returned from setIndex() and getIndex().
- * It is for this reason that Normalizer does not implement the CharacterIterator interface.
- *
- * @author Laura Werner, Mark Davis, Markus Scherer
- * @stable ICU 2.0
- */
-class U_COMMON_API Normalizer : public UObject {
-public:
-  /**
-   * If DONE is returned from an iteration function that returns a code point,
-   * then there are no more normalization results available.
-   * @stable ICU 2.0
-   */
-  enum {
-      DONE=0xffff
-  };
-
-  // Constructors
-
-  /**
-   * Creates a new <code>Normalizer</code> object for iterating over the
-   * normalized form of a given string.
-   * <p>
-   * @param str   The string to be normalized.  The normalization
-   *              will start at the beginning of the string.
-   *
-   * @param mode  The normalization mode.
-   * @stable ICU 2.0
-   */
-  Normalizer(const UnicodeString& str, UNormalizationMode mode);
-
-  /**
-   * Creates a new <code>Normalizer</code> object for iterating over the
-   * normalized form of a given string.
-   * <p>
-   * @param str   The string to be normalized.  The normalization
-   *              will start at the beginning of the string.
-   *
-   * @param length Length of the string, or -1 if NUL-terminated.
-   * @param mode  The normalization mode.
-   * @stable ICU 2.0
-   */
-  Normalizer(const UChar* str, int32_t length, UNormalizationMode mode);
-
-  /**
-   * Creates a new <code>Normalizer</code> object for iterating over the
-   * normalized form of the given text.
-   * <p>
-   * @param iter  The input text to be normalized.  The normalization
-   *              will start at the beginning of the string.
-   *
-   * @param mode  The normalization mode.
-   * @stable ICU 2.0
-   */
-  Normalizer(const CharacterIterator& iter, UNormalizationMode mode);
-
-  /**
-   * Copy constructor.
-   * @param copy The object to be copied.
-   * @stable ICU 2.0
-   */
-  Normalizer(const Normalizer& copy);
-
-  /**
-   * Destructor
-   * @stable ICU 2.0
-   */
-  virtual ~Normalizer();
-
-
-  //-------------------------------------------------------------------------
-  // Static utility methods
-  //-------------------------------------------------------------------------
-
-  /**
-   * Normalizes a <code>UnicodeString</code> according to the specified normalization mode.
-   * This is a wrapper for unorm_normalize(), using UnicodeString's.
-   *
-   * The <code>options</code> parameter specifies which optional
-   * <code>Normalizer</code> features are to be enabled for this operation.
-   *
-   * @param source    the input string to be normalized.
-   * @param mode      the normalization mode
-   * @param options   the optional features to be enabled (0 for no options)
-   * @param result    The normalized string (on output).
-   * @param status    The error code.
-   * @stable ICU 2.0
-   */
-  static void U_EXPORT2 normalize(const UnicodeString& source,
-                        UNormalizationMode mode, int32_t options,
-                        UnicodeString& result,
-                        UErrorCode &status);
-
-  /**
-   * Compose a <code>UnicodeString</code>.
-   * This is equivalent to normalize() with mode UNORM_NFC or UNORM_NFKC.
-   * This is a wrapper for unorm_normalize(), using UnicodeString's.
-   *
-   * The <code>options</code> parameter specifies which optional
-   * <code>Normalizer</code> features are to be enabled for this operation.
-   *
-   * @param source    the string to be composed.
-   * @param compat    Perform compatibility decomposition before composition.
-   *                  If this argument is <code>FALSE</code>, only canonical
-   *                  decomposition will be performed.
-   * @param options   the optional features to be enabled (0 for no options)
-   * @param result    The composed string (on output).
-   * @param status    The error code.
-   * @stable ICU 2.0
-   */
-  static void U_EXPORT2 compose(const UnicodeString& source,
-                      UBool compat, int32_t options,
-                      UnicodeString& result,
-                      UErrorCode &status);
-
-  /**
-   * Static method to decompose a <code>UnicodeString</code>.
-   * This is equivalent to normalize() with mode UNORM_NFD or UNORM_NFKD.
-   * This is a wrapper for unorm_normalize(), using UnicodeString's.
-   *
-   * The <code>options</code> parameter specifies which optional
-   * <code>Normalizer</code> features are to be enabled for this operation.
-   *
-   * @param source    the string to be decomposed.
-   * @param compat    Perform compatibility decomposition.
-   *                  If this argument is <code>FALSE</code>, only canonical
-   *                  decomposition will be performed.
-   * @param options   the optional features to be enabled (0 for no options)
-   * @param result    The decomposed string (on output).
-   * @param status    The error code.
-   * @stable ICU 2.0
-   */
-  static void U_EXPORT2 decompose(const UnicodeString& source,
-                        UBool compat, int32_t options,
-                        UnicodeString& result,
-                        UErrorCode &status);
-
-  /**
-   * Performing quick check on a string, to quickly determine if the string is
-   * in a particular normalization format.
-   * This is a wrapper for unorm_quickCheck(), using a UnicodeString.
-   *
-   * Three types of result can be returned UNORM_YES, UNORM_NO or
-   * UNORM_MAYBE. Result UNORM_YES indicates that the argument
-   * string is in the desired normalized format, UNORM_NO determines that
-   * argument string is not in the desired normalized format. A
-   * UNORM_MAYBE result indicates that a more thorough check is required,
-   * the user may have to put the string in its normalized form and compare the
-   * results.
-   * @param source       string for determining if it is in a normalized format
-   * @param mode         normalization format
-   * @param status A reference to a UErrorCode to receive any errors
-   * @return UNORM_YES, UNORM_NO or UNORM_MAYBE
-   *
-   * @see isNormalized
-   * @stable ICU 2.0
-   */
-  static inline UNormalizationCheckResult
-  quickCheck(const UnicodeString &source, UNormalizationMode mode, UErrorCode &status);
-
-  /**
-   * Performing quick check on a string; same as the other version of quickCheck
-   * but takes an extra options parameter like most normalization functions.
-   *
-   * @param source       string for determining if it is in a normalized format
-   * @param mode         normalization format
-   * @param options      the optional features to be enabled (0 for no options)
-   * @param status A reference to a UErrorCode to receive any errors
-   * @return UNORM_YES, UNORM_NO or UNORM_MAYBE
-   *
-   * @see isNormalized
-   * @stable ICU 2.6
-   */
-  static UNormalizationCheckResult
-  quickCheck(const UnicodeString &source, UNormalizationMode mode, int32_t options, UErrorCode &status);
-
-  /**
-   * Test if a string is in a given normalization form.
-   * This is semantically equivalent to source.equals(normalize(source, mode)) .
-   *
-   * Unlike unorm_quickCheck(), this function returns a definitive result,
-   * never a "maybe".
-   * For NFD, NFKD, and FCD, both functions work exactly the same.
-   * For NFC and NFKC where quickCheck may return "maybe", this function will
-   * perform further tests to arrive at a TRUE/FALSE result.
-   *
-   * @param src        String that is to be tested if it is in a normalization format.
-   * @param mode       Which normalization form to test for.
-   * @param errorCode  ICU error code in/out parameter.
-   *                   Must fulfill U_SUCCESS before the function call.
-   * @return Boolean value indicating whether the source string is in the
-   *         "mode" normalization form.
-   *
-   * @see quickCheck
-   * @stable ICU 2.2
-   */
-  static inline UBool
-  isNormalized(const UnicodeString &src, UNormalizationMode mode, UErrorCode &errorCode);
-
-  /**
-   * Test if a string is in a given normalization form; same as the other version of isNormalized
-   * but takes an extra options parameter like most normalization functions.
-   *
-   * @param src        String that is to be tested if it is in a normalization format.
-   * @param mode       Which normalization form to test for.
-   * @param options      the optional features to be enabled (0 for no options)
-   * @param errorCode  ICU error code in/out parameter.
-   *                   Must fulfill U_SUCCESS before the function call.
-   * @return Boolean value indicating whether the source string is in the
-   *         "mode" normalization form.
-   *
-   * @see quickCheck
-   * @stable ICU 2.6
-   */
-  static UBool
-  isNormalized(const UnicodeString &src, UNormalizationMode mode, int32_t options, UErrorCode &errorCode);
-
-  /**
-   * Concatenate normalized strings, making sure that the result is normalized as well.
-   *
-   * If both the left and the right strings are in
-   * the normalization form according to "mode/options",
-   * then the result will be
-   *
-   * \code
-   *     dest=normalize(left+right, mode, options)
-   * \endcode
-   *
-   * For details see unorm_concatenate in unorm.h.
-   *
-   * @param left Left source string.
-   * @param right Right source string.
-   * @param result The output string.
-   * @param mode The normalization mode.
-   * @param options A bit set of normalization options.
-   * @param errorCode ICU error code in/out parameter.
-   *                   Must fulfill U_SUCCESS before the function call.
-   * @return result
-   *
-   * @see unorm_concatenate
-   * @see normalize
-   * @see unorm_next
-   * @see unorm_previous
-   *
-   * @stable ICU 2.1
-   */
-  static UnicodeString &
-  U_EXPORT2 concatenate(UnicodeString &left, UnicodeString &right,
-              UnicodeString &result,
-              UNormalizationMode mode, int32_t options,
-              UErrorCode &errorCode);
-
-  /**
-   * Compare two strings for canonical equivalence.
-   * Further options include case-insensitive comparison and
-   * code point order (as opposed to code unit order).
-   *
-   * Canonical equivalence between two strings is defined as their normalized
-   * forms (NFD or NFC) being identical.
-   * This function compares strings incrementally instead of normalizing
-   * (and optionally case-folding) both strings entirely,
-   * improving performance significantly.
-   *
-   * Bulk normalization is only necessary if the strings do not fulfill the FCD
-   * conditions. Only in this case, and only if the strings are relatively long,
-   * is memory allocated temporarily.
-   * For FCD strings and short non-FCD strings there is no memory allocation.
-   *
-   * Semantically, this is equivalent to
-   *   strcmp[CodePointOrder](NFD(foldCase(s1)), NFD(foldCase(s2)))
-   * where code point order and foldCase are all optional.
-   *
-   * UAX 21 2.5 Caseless Matching specifies that for a canonical caseless match
-   * the case folding must be performed first, then the normalization.
-   *
-   * @param s1 First source string.
-   * @param s2 Second source string.
-   *
-   * @param options A bit set of options:
-   *   - U_FOLD_CASE_DEFAULT or 0 is used for default options:
-   *     Case-sensitive comparison in code unit order, and the input strings
-   *     are quick-checked for FCD.
-   *
-   *   - UNORM_INPUT_IS_FCD
-   *     Set if the caller knows that both s1 and s2 fulfill the FCD conditions.
-   *     If not set, the function will quickCheck for FCD
-   *     and normalize if necessary.
-   *
-   *   - U_COMPARE_CODE_POINT_ORDER
-   *     Set to choose code point order instead of code unit order
-   *     (see u_strCompare for details).
-   *
-   *   - U_COMPARE_IGNORE_CASE
-   *     Set to compare strings case-insensitively using case folding,
-   *     instead of case-sensitively.
-   *     If set, then the following case folding options are used.
-   *
-   *   - Options as used with case-insensitive comparisons, currently:
-   *
-   *   - U_FOLD_CASE_EXCLUDE_SPECIAL_I
-   *    (see u_strCaseCompare for details)
-   *
-   *   - regular normalization options shifted left by UNORM_COMPARE_NORM_OPTIONS_SHIFT
-   *
-   * @param errorCode ICU error code in/out parameter.
-   *                  Must fulfill U_SUCCESS before the function call.
-   * @return <0 or 0 or >0 as usual for string comparisons
-   *
-   * @see unorm_compare
-   * @see normalize
-   * @see UNORM_FCD
-   * @see u_strCompare
-   * @see u_strCaseCompare
-   *
-   * @stable ICU 2.2
-   */
-  static inline int32_t
-  compare(const UnicodeString &s1, const UnicodeString &s2,
-          uint32_t options,
-          UErrorCode &errorCode);
-
-  //-------------------------------------------------------------------------
-  // Iteration API
-  //-------------------------------------------------------------------------
-
-  /**
-   * Return the current character in the normalized text.
-   * current() may need to normalize some text at getIndex().
-   * The getIndex() is not changed.
-   *
-   * @return the current normalized code point
-   * @stable ICU 2.0
-   */
-  UChar32              current(void);
-
-  /**
-   * Return the first character in the normalized text.
-   * This is equivalent to setIndexOnly(startIndex()) followed by next().
-   * (Post-increment semantics.)
-   *
-   * @return the first normalized code point
-   * @stable ICU 2.0
-   */
-  UChar32              first(void);
-
-  /**
-   * Return the last character in the normalized text.
-   * This is equivalent to setIndexOnly(endIndex()) followed by previous().
-   * (Pre-decrement semantics.)
-   *
-   * @return the last normalized code point
-   * @stable ICU 2.0
-   */
-  UChar32              last(void);
-
-  /**
-   * Return the next character in the normalized text.
-   * (Post-increment semantics.)
-   * If the end of the text has already been reached, DONE is returned.
-   * The DONE value could be confused with a U+FFFF non-character code point
-   * in the text. If this is possible, you can test getIndex()<endIndex()
-   * before calling next(), or (getIndex()<endIndex() || last()!=DONE)
-   * after calling next(). (Calling last() will change the iterator state!)
-   *
-   * The C API unorm_next() is more efficient and does not have this ambiguity.
-   *
-   * @return the next normalized code point
-   * @stable ICU 2.0
-   */
-  UChar32              next(void);
-
-  /**
-   * Return the previous character in the normalized text and decrement.
-   * (Pre-decrement semantics.)
-   * If the beginning of the text has already been reached, DONE is returned.
-   * The DONE value could be confused with a U+FFFF non-character code point
-   * in the text. If this is possible, you can test
-   * (getIndex()>startIndex() || first()!=DONE). (Calling first() will change
-   * the iterator state!)
-   *
-   * The C API unorm_previous() is more efficient and does not have this ambiguity.
-   *
-   * @return the previous normalized code point
-   * @stable ICU 2.0
-   */
-  UChar32              previous(void);
-
-  /**
-   * Set the iteration position in the input text that is being normalized,
-   * without any immediate normalization.
-   * After setIndexOnly(), getIndex() will return the same index that is
-   * specified here.
-   *
-   * @param index the desired index in the input text.
-   * @stable ICU 2.0
-   */
-  void                 setIndexOnly(int32_t index);
-
-  /**
-   * Reset the index to the beginning of the text.
-   * This is equivalent to setIndexOnly(startIndex)).
-   * @stable ICU 2.0
-   */
-  void                reset(void);
-
-  /**
-   * Retrieve the current iteration position in the input text that is
-   * being normalized.
-   *
-   * A following call to next() will return a normalized code point from
-   * the input text at or after this index.
-   *
-   * After a call to previous(), getIndex() will point at or before the
-   * position in the input text where the normalized code point
-   * was returned from with previous().
-   *
-   * @return the current index in the input text
-   * @stable ICU 2.0
-   */
-  int32_t            getIndex(void) const;
-
-  /**
-   * Retrieve the index of the start of the input text. This is the begin index
-   * of the <code>CharacterIterator</code> or the start (i.e. index 0) of the string
-   * over which this <code>Normalizer</code> is iterating.
-   *
-   * @return the smallest index in the input text where the Normalizer operates
-   * @stable ICU 2.0
-   */
-  int32_t            startIndex(void) const;
-
-  /**
-   * Retrieve the index of the end of the input text. This is the end index
-   * of the <code>CharacterIterator</code> or the length of the string
-   * over which this <code>Normalizer</code> is iterating.
-   * This end index is exclusive, i.e., the Normalizer operates only on characters
-   * before this index.
-   *
-   * @return the first index in the input text where the Normalizer does not operate
-   * @stable ICU 2.0
-   */
-  int32_t            endIndex(void) const;
-
-  /**
-   * Returns TRUE when both iterators refer to the same character in the same
-   * input text.
-   *
-   * @param that a Normalizer object to compare this one to
-   * @return comparison result
-   * @stable ICU 2.0
-   */
-  UBool        operator==(const Normalizer& that) const;
-
-  /**
-   * Returns FALSE when both iterators refer to the same character in the same
-   * input text.
-   *
-   * @param that a Normalizer object to compare this one to
-   * @return comparison result
-   * @stable ICU 2.0
-   */
-  inline UBool        operator!=(const Normalizer& that) const;
-
-  /**
-   * Returns a pointer to a new Normalizer that is a clone of this one.
-   * The caller is responsible for deleting the new clone.
-   * @return a pointer to a new Normalizer
-   * @stable ICU 2.0
-   */
-  Normalizer*        clone(void) const;
-
-  /**
-   * Generates a hash code for this iterator.
-   *
-   * @return the hash code
-   * @stable ICU 2.0
-   */
-  int32_t                hashCode(void) const;
-
-  //-------------------------------------------------------------------------
-  // Property access methods
-  //-------------------------------------------------------------------------
-
-  /**
-   * Set the normalization mode for this object.
-   * <p>
-   * <b>Note:</b>If the normalization mode is changed while iterating
-   * over a string, calls to {@link #next() } and {@link #previous() } may
-   * return previously buffers characters in the old normalization mode
-   * until the iteration is able to re-sync at the next base character.
-   * It is safest to call {@link #setIndexOnly }, {@link #reset() },
-   * {@link #setText }, {@link #first() },
-   * {@link #last() }, etc. after calling <code>setMode</code>.
-   * <p>
-   * @param newMode the new mode for this <code>Normalizer</code>.
-   * @see #getUMode
-   * @stable ICU 2.0
-   */
-  void setMode(UNormalizationMode newMode);
-
-  /**
-   * Return the normalization mode for this object.
-   *
-   * This is an unusual name because there used to be a getMode() that
-   * returned a different type.
-   *
-   * @return the mode for this <code>Normalizer</code>
-   * @see #setMode
-   * @stable ICU 2.0
-   */
-  UNormalizationMode getUMode(void) const;
-
-  /**
-   * Set options that affect this <code>Normalizer</code>'s operation.
-   * Options do not change the basic composition or decomposition operation
-   * that is being performed, but they control whether
-   * certain optional portions of the operation are done.
-   * Currently the only available option is obsolete.
-   *
-   * It is possible to specify multiple options that are all turned on or off.
-   *
-   * @param   option  the option(s) whose value is/are to be set.
-   * @param   value   the new setting for the option.  Use <code>TRUE</code> to
-   *                  turn the option(s) on and <code>FALSE</code> to turn it/them off.
-   *
-   * @see #getOption
-   * @stable ICU 2.0
-   */
-  void setOption(int32_t option,
-         UBool value);
-
-  /**
-   * Determine whether an option is turned on or off.
-   * If multiple options are specified, then the result is TRUE if any
-   * of them are set.
-   * <p>
-   * @param option the option(s) that are to be checked
-   * @return TRUE if any of the option(s) are set
-   * @see #setOption
-   * @stable ICU 2.0
-   */
-  UBool getOption(int32_t option) const;
-
-  /**
-   * Set the input text over which this <code>Normalizer</code> will iterate.
-   * The iteration position is set to the beginning.
-   *
-   * @param newText a string that replaces the current input text
-   * @param status a UErrorCode
-   * @stable ICU 2.0
-   */
-  void setText(const UnicodeString& newText,
-           UErrorCode &status);
-
-  /**
-   * Set the input text over which this <code>Normalizer</code> will iterate.
-   * The iteration position is set to the beginning.
-   *
-   * @param newText a CharacterIterator object that replaces the current input text
-   * @param status a UErrorCode
-   * @stable ICU 2.0
-   */
-  void setText(const CharacterIterator& newText,
-           UErrorCode &status);
-
-  /**
-   * Set the input text over which this <code>Normalizer</code> will iterate.
-   * The iteration position is set to the beginning.
-   *
-   * @param newText a string that replaces the current input text
-   * @param length the length of the string, or -1 if NUL-terminated
-   * @param status a UErrorCode
-   * @stable ICU 2.0
-   */
-  void setText(const UChar* newText,
-                    int32_t length,
-            UErrorCode &status);
-  /**
-   * Copies the input text into the UnicodeString argument.
-   *
-   * @param result Receives a copy of the text under iteration.
-   * @stable ICU 2.0
-   */
-  void            getText(UnicodeString&  result);
-
-  /**
-   * ICU "poor man's RTTI", returns a UClassID for this class.
-   * @returns a UClassID for this class.
-   * @stable ICU 2.2
-   */
-  static UClassID U_EXPORT2 getStaticClassID();
-
-  /**
-   * ICU "poor man's RTTI", returns a UClassID for the actual class.
-   * @return a UClassID for the actual class.
-   * @stable ICU 2.2
-   */
-  virtual UClassID getDynamicClassID() const;
-
-private:
-  //-------------------------------------------------------------------------
-  // Private functions
-  //-------------------------------------------------------------------------
-
-  Normalizer(); // default constructor not implemented
-  Normalizer &operator=(const Normalizer &that); // assignment operator not implemented
-
-  // Private utility methods for iteration
-  // For documentation, see the source code
-  UBool nextNormalize();
-  UBool previousNormalize();
-
-  void    init();
-  void    clearBuffer(void);
-
-  //-------------------------------------------------------------------------
-  // Private data
-  //-------------------------------------------------------------------------
-
-  FilteredNormalizer2*fFilteredNorm2;  // owned if not NULL
-  const Normalizer2  *fNorm2;  // not owned; may be equal to fFilteredNorm2
-  UNormalizationMode  fUMode;
-  int32_t             fOptions;
-
-  // The input text and our position in it
-  CharacterIterator  *text;
-
-  // The normalization buffer is the result of normalization
-  // of the source in [currentIndex..nextIndex[ .
-  int32_t         currentIndex, nextIndex;
-
-  // A buffer for holding intermediate results
-  UnicodeString       buffer;
-  int32_t         bufferPos;
-};
-
-//-------------------------------------------------------------------------
-// Inline implementations
-//-------------------------------------------------------------------------
-
-inline UBool
-Normalizer::operator!= (const Normalizer& other) const
-{ return ! operator==(other); }
-
-inline UNormalizationCheckResult
-Normalizer::quickCheck(const UnicodeString& source,
-                       UNormalizationMode mode,
-                       UErrorCode &status) {
-    return quickCheck(source, mode, 0, status);
-}
-
-inline UBool
-Normalizer::isNormalized(const UnicodeString& source,
-                         UNormalizationMode mode,
-                         UErrorCode &status) {
-    return isNormalized(source, mode, 0, status);
-}
-
-inline int32_t
-Normalizer::compare(const UnicodeString &s1, const UnicodeString &s2,
-                    uint32_t options,
-                    UErrorCode &errorCode) {
-  // all argument checking is done in unorm_compare
-  return unorm_compare(s1.getBuffer(), s1.length(),
-                       s2.getBuffer(), s2.length(),
-                       options,
-                       &errorCode);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_NORMALIZATION */
-
-#endif // NORMLZR_H
diff --git a/source/common/unicode/pandroid.h b/source/common/unicode/pandroid.h
deleted file mode 100644
index 5d7533a..0000000
--- a/source/common/unicode/pandroid.h
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* Note: autoconf creates platform.h from platform.h.in at configure time.
-*
-******************************************************************************
-*
-*  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.
-******************************************************************************
-*/
-
-#ifndef _PLATFORM_H
-#define _PLATFORM_H
-
-/**
- * \file 
- * \brief Basic types for the platform 
- */
-
-/* This file should be included before uvernum.h. */
-#if defined(UVERNUM_H)
-# error Do not include unicode/uvernum.h before #including unicode/platform.h.  Instead of unicode/uvernum.h, #include unicode/uversion.h
-#endif
-
-/**
- * Determine wheter to enable auto cleanup of libraries. 
- * @internal
- */
-#ifndef UCLN_NO_AUTO_CLEANUP
-#define UCLN_NO_AUTO_CLEANUP 1
-#endif
-
-/* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */
-#ifndef CYGWINMSVC
-
-/** Define the platform we're on. */
-#ifndef U_LINUX
-#define U_LINUX
-#endif
-
-/**
- * \def U_HAVE_DIRENT_H
- * Define whether dirent.h is available 
- * @internal
- */
-#ifndef U_HAVE_DIRENT_H
-#define U_HAVE_DIRENT_H 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 &lt;iostream&gt; 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 &lt;iostream.h&gt; 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
-
-/**
- * \def U_HAVE_STD_STRING
- * Define whether the standard C++ (STL) &lt;string&gt; header is available.
- * For platforms that do not use platform.h and do not define this constant
- * in their platform-specific headers, std_string.h defaults
- * U_HAVE_STD_STRING to 1.
- * @internal
- */
-#ifndef U_HAVE_STD_STRING
-#define U_HAVE_STD_STRING 1
-#endif
-
-/** @{ Determines whether specific types are available */
-#ifndef U_HAVE_INT8_T
-#define U_HAVE_INT8_T 1
-#endif
-
-#ifndef U_HAVE_UINT8_T
-#define U_HAVE_UINT8_T 1
-#endif
-
-#ifndef U_HAVE_INT16_T
-#define U_HAVE_INT16_T 1
-#endif
-
-#ifndef U_HAVE_UINT16_T
-#define U_HAVE_UINT16_T 1
-#endif
-
-#ifndef U_HAVE_INT32_T
-#define U_HAVE_INT32_T 1
-#endif
-
-#ifndef U_HAVE_UINT32_T
-#define U_HAVE_UINT32_T 1
-#endif
-
-#ifndef U_HAVE_INT64_T
-#define U_HAVE_INT64_T 1
-#endif
-
-#ifndef U_HAVE_UINT64_T
-#define U_HAVE_UINT64_T 1
-#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
-   It's done this way in case multiple architectures are being built at once.
-   For example, Darwin supports fat binaries, which can be both PPC and x86 based. */
-#if defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
-#else
-#define U_IS_BIG_ENDIAN 0
-#endif
-
-/* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
-#ifndef ICU_USE_THREADS 
-#define ICU_USE_THREADS 1
-#endif
-
-/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define UMTX_STRONG_MEMORY_MODEL 1
-#endif
-
-#ifndef U_DEBUG
-#define U_DEBUG 0
-#endif
-
-#ifndef U_RELEASE
-#define U_RELEASE 1
-#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 enable tracing. */
-#ifndef U_ENABLE_TRACING
-#define U_ENABLE_TRACING 0
-#endif
-
-/**
- * Whether to enable Dynamic loading in ICU
- * @internal
- */
-#ifndef U_ENABLE_DYLOAD
-#define U_ENABLE_DYLOAD 1
-#endif
-
-/**
- * Whether to test Dynamic loading as an OS capabilty
- * @internal
- */
-#ifndef U_CHECK_DYLOAD
-#define U_CHECK_DYLOAD 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
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Character data types                                                      */
-/*===========================================================================*/
-
-#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
-#   define U_CHARSET_FAMILY 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about wchar support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_WCHAR_H
-#define U_HAVE_WCHAR_H      1
-#endif
-
-#ifndef U_SIZEOF_WCHAR_T
-#define U_SIZEOF_WCHAR_T    4
-#endif
-
-#ifndef U_HAVE_WCSCPY
-#define U_HAVE_WCSCPY       1
-#endif
-
-/** @} */
-
-/**
- * @{
- * \def U_DECLARE_UTF16
- * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
- * instead.
- * @internal
- *
- * \def U_GNUC_UTF16_STRING
- * @internal
- */
-#ifndef U_GNUC_UTF16_STRING
-#define U_GNUC_UTF16_STRING 0
-#endif
-#if 1 || defined(U_CHECK_UTF16_STRING)
-#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
-    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
-    || (defined(__HP_cc) && __HP_cc >= 111106) \
-    || U_GNUC_UTF16_STRING
-#define U_DECLARE_UTF16(string) u ## string
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
-/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
-/* Sun's C compiler has issues with this notation, and it's unreliable. */
-#define U_DECLARE_UTF16(string) U ## string
-#elif U_SIZEOF_WCHAR_T == 2 \
-    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
-#define U_DECLARE_UTF16(string) L ## string
-#endif
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about POSIX support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_NL_LANGINFO_CODESET
-#define U_HAVE_NL_LANGINFO_CODESET 0 
-#endif
-
-#ifndef U_NL_LANGINFO_CODESET
-#define U_NL_LANGINFO_CODESET       CODESET
-#endif
-
-#if 1
-#define U_TZSET         tzset
-#endif
-#if 1
-#define U_TIMEZONE      timezone
-#endif
-#if 1
-#define U_TZNAME        tzname
-#endif
-
-#define U_HAVE_MMAP     1
-#define U_HAVE_POPEN    1
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Symbol import-export control                                              */
-/*===========================================================================*/
-
-#ifdef U_STATIC_IMPLEMENTATION
-#define U_EXPORT
-#elif 1
-#define U_EXPORT __attribute__((visibility("default")))
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
-   || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
-#define U_EXPORT __global
-/*#elif defined(__HP_aCC) || defined(__HP_cc)
-#define U_EXPORT __declspec(dllexport)*/
-#else
-#define U_EXPORT
-#endif
-
-/* U_CALLCONV is releated to U_EXPORT2 */
-#define U_EXPORT2
-
-/* cygwin needs to export/import data */
-#if defined(U_CYGWIN) && !defined(__GNUC__)
-#define U_IMPORT __declspec(dllimport)
-#else
-#define U_IMPORT 
-#endif
-
-/* @} */
-
-/*===========================================================================*/
-/** @{ Code alignment and C function inlining                                    */
-/*===========================================================================*/
-
-#ifndef U_INLINE
-#   ifdef __cplusplus
-#       define U_INLINE inline
-#   else
-#       define U_INLINE inline
-#   endif
-#endif
-
-#ifndef U_ALIGN_CODE
-#define U_ALIGN_CODE(n) 
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ GCC built in functions for atomic memory operations                       */
-/*===========================================================================*/
-
-/**
- * \def U_HAVE_GCC_ATOMICS
- * @internal
- */
-#ifndef U_HAVE_GCC_ATOMICS
-#define U_HAVE_GCC_ATOMICS 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-/**
- * \def U_MAKE
- * What program to execute to run 'make'
- */
-#ifndef U_MAKE
-#define U_MAKE  "make"
-#endif
-
-/** @} */
-
-#endif /* CYGWINMSVC */
-
-/*===========================================================================*/
-/* Custom icu entry point renaming                                                  */
-/*===========================================================================*/
-
-/**
- * Define the library suffix with C syntax.
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME 
-/**
- * Define the library suffix as a string with C syntax
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME_STRING ""
-/**
- * 1 if a custom library suffix is set
- * @internal
- */
-# define U_HAVE_LIB_SUFFIX 0
-
-#if U_HAVE_LIB_SUFFIX
-# ifndef U_ICU_ENTRY_POINT_RENAME
-/* Renaming pattern:    u_strcpy_41_suffix */
-#  define U_ICU_ENTRY_POINT_RENAME(x)    x ## _ ## 46 ## 
-#  define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt####major##minor##_dat
-
-# endif
-#endif
-
-#endif
diff --git a/source/common/unicode/parseerr.h b/source/common/unicode/parseerr.h
deleted file mode 100644
index 44ff008..0000000
--- a/source/common/unicode/parseerr.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1999-2005, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   03/14/00    aliu        Creation.
-*   06/27/00    aliu        Change from C++ class to C struct
-**********************************************************************
-*/
-#ifndef PARSEERR_H
-#define PARSEERR_H
-
-#include "unicode/utypes.h"
-
-
-/**
- * \file
- * \brief C API: Parse Error Information
- */
-/**
- * The capacity of the context strings in UParseError.
- * @stable ICU 2.0
- */ 
-enum { U_PARSE_CONTEXT_LEN = 16 };
-
-/**
- * A UParseError struct is used to returned detailed information about
- * parsing errors.  It is used by ICU parsing engines that parse long
- * rules, patterns, or programs, where the text being parsed is long
- * enough that more information than a UErrorCode is needed to
- * localize the error.
- *
- * <p>The line, offset, and context fields are optional; parsing
- * engines may choose not to use to use them.
- *
- * <p>The preContext and postContext strings include some part of the
- * context surrounding the error.  If the source text is "let for=7"
- * and "for" is the error (e.g., because it is a reserved word), then
- * some examples of what a parser might produce are the following:
- *
- * <pre>
- * preContext   postContext
- * ""           ""            The parser does not support context
- * "let "       "=7"          Pre- and post-context only
- * "let "       "for=7"       Pre- and post-context and error text
- * ""           "for"         Error text only
- * </pre>
- *
- * <p>Examples of engines which use UParseError (or may use it in the
- * future) are Transliterator, RuleBasedBreakIterator, and
- * RegexPattern.
- * 
- * @stable ICU 2.0
- */
-typedef struct UParseError {
-
-    /**
-     * The line on which the error occured.  If the parser uses this
-     * field, it sets it to the line number of the source text line on
-     * which the error appears, which will be be a value >= 1.  If the
-     * parse does not support line numbers, the value will be <= 0.
-     * @stable ICU 2.0
-     */
-    int32_t        line;
-
-    /**
-     * The character offset to the error.  If the line field is >= 1,
-     * then this is the offset from the start of the line.  Otherwise,
-     * this is the offset from the start of the text.  If the parser
-     * does not support this field, it will have a value < 0.
-     * @stable ICU 2.0
-     */
-    int32_t        offset;
-
-    /**
-     * Textual context before the error.  Null-terminated.  The empty
-     * string if not supported by parser.
-     * @stable ICU 2.0   
-     */
-    UChar          preContext[U_PARSE_CONTEXT_LEN];
-
-    /**
-     * The error itself and/or textual context after the error.
-     * Null-terminated.  The empty string if not supported by parser.
-     * @stable ICU 2.0   
-     */
-    UChar          postContext[U_PARSE_CONTEXT_LEN];
-
-} UParseError;
-
-#endif
diff --git a/source/common/unicode/parsepos.h b/source/common/unicode/parsepos.h
deleted file mode 100644
index cdf49e0..0000000
--- a/source/common/unicode/parsepos.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-* Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved.
-*******************************************************************************
-*
-* File PARSEPOS.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   07/09/97    helena      Converted from java.
-*   07/17/98    stephen     Added errorIndex support.
-*   05/11/99    stephen     Cleaned up.
-*******************************************************************************
-*/
-
-#ifndef PARSEPOS_H
-#define PARSEPOS_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
- 
-U_NAMESPACE_BEGIN
-
-/**
- * \file
- * \brief C++ API: Canonical Iterator
- */
-/** 
- * <code>ParsePosition</code> is a simple class used by <code>Format</code>
- * and its subclasses to keep track of the current position during parsing.
- * The <code>parseObject</code> method in the various <code>Format</code>
- * classes requires a <code>ParsePosition</code> object as an argument.
- *
- * <p>
- * By design, as you parse through a string with different formats,
- * you can use the same <code>ParsePosition</code>, since the index parameter
- * records the current position.
- *
- * The ParsePosition class is not suitable for subclassing.
- *
- * @version     1.3 10/30/97
- * @author      Mark Davis, Helena Shih
- * @see         java.text.Format
- */
-
-class U_COMMON_API ParsePosition : public UObject {
-public:
-    /**
-     * Default constructor, the index starts with 0 as default.
-     * @stable ICU 2.0
-     */
-    ParsePosition()
-        : UObject(),
-        index(0),
-        errorIndex(-1)
-      {}
-
-    /**
-     * Create a new ParsePosition with the given initial index.
-     * @param newIndex the new text offset.
-     * @stable ICU 2.0
-     */
-    ParsePosition(int32_t newIndex)
-        : UObject(),
-        index(newIndex),
-        errorIndex(-1)
-      {}
-
-    /**
-     * Copy constructor
-     * @param copy the object to be copied from.
-     * @stable ICU 2.0
-     */
-    ParsePosition(const ParsePosition& copy)
-        : UObject(copy),
-        index(copy.index),
-        errorIndex(copy.errorIndex)
-      {}
-
-    /**
-     * Destructor
-     * @stable ICU 2.0
-     */
-    virtual ~ParsePosition();
-
-    /**
-     * Assignment operator
-     * @stable ICU 2.0
-     */
-    ParsePosition&      operator=(const ParsePosition& copy);
-
-    /**
-     * Equality operator.
-     * @return TRUE if the two parse positions are equal, FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    UBool              operator==(const ParsePosition& that) const;
-
-    /**
-     * Equality operator.
-     * @return TRUE if the two parse positions are not equal, FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    UBool              operator!=(const ParsePosition& that) const;
-
-    /**
-     * Clone this object.
-     * Clones can be used concurrently in multiple threads.
-     * If an error occurs, then NULL is returned.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    ParsePosition *clone() const;
-
-    /**
-     * Retrieve the current parse position.  On input to a parse method, this
-     * is the index of the character at which parsing will begin; on output, it
-     * is the index of the character following the last character parsed.
-     * @return the current index.
-     * @stable ICU 2.0
-     */
-    int32_t getIndex(void) const;
-
-    /**
-     * Set the current parse position.
-     * @param index the new index.
-     * @stable ICU 2.0
-     */
-    void setIndex(int32_t index);
-
-    /**
-     * Set the index at which a parse error occurred.  Formatters
-     * should set this before returning an error code from their
-     * parseObject method.  The default value is -1 if this is not
-     * set.
-     * @stable ICU 2.0
-     */
-    void setErrorIndex(int32_t ei);
-
-    /**
-     * Retrieve the index at which an error occurred, or -1 if the
-     * error index has not been set.
-     * @stable ICU 2.0
-     */
-    int32_t getErrorIndex(void) const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-private:
-    /**
-     * Input: the place you start parsing.
-     * <br>Output: position where the parse stopped.
-     * This is designed to be used serially,
-     * with each call setting index up for the next one.
-     */
-    int32_t index;
-
-    /**
-     * The index at which a parse error occurred.
-     */
-    int32_t errorIndex;
-
-};
-
-inline ParsePosition&
-ParsePosition::operator=(const ParsePosition& copy)
-{
-  index = copy.index;
-  errorIndex = copy.errorIndex;
-  return *this;
-}
-
-inline UBool
-ParsePosition::operator==(const ParsePosition& copy) const
-{
-  if(index != copy.index || errorIndex != copy.errorIndex)
-  return FALSE;
-  else
-  return TRUE;
-}
-
-inline UBool
-ParsePosition::operator!=(const ParsePosition& copy) const
-{
-  return !operator==(copy);
-}
-
-inline int32_t
-ParsePosition::getIndex() const
-{
-  return index;
-}
-
-inline void
-ParsePosition::setIndex(int32_t offset)
-{
-  this->index = offset;
-}
-
-inline int32_t
-ParsePosition::getErrorIndex() const
-{
-  return errorIndex;
-}
-
-inline void
-ParsePosition::setErrorIndex(int32_t ei)
-{
-  this->errorIndex = ei;
-}
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/pfreebsd.h b/source/common/unicode/pfreebsd.h
deleted file mode 100644
index d93b9d1..0000000
--- a/source/common/unicode/pfreebsd.h
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* Note: autoconf creates platform.h from platform.h.in at configure time.
-*
-******************************************************************************
-*
-*  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.
-******************************************************************************
-*/
-
-#ifndef _PLATFORM_H
-#define _PLATFORM_H
-
-/**
- * \file 
- * \brief Basic types for the platform 
- */
-
-/* This file should be included before uvernum.h. */
-#if defined(UVERNUM_H)
-# error Do not include unicode/uvernum.h before #including unicode/platform.h.  Instead of unicode/uvernum.h, #include unicode/uversion.h
-#endif
-
-/**
- * Determine wheter to enable auto cleanup of libraries. 
- * @internal
- */
-#ifndef UCLN_NO_AUTO_CLEANUP
-#define UCLN_NO_AUTO_CLEANUP 1
-#endif
-
-/* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */
-#ifndef CYGWINMSVC
-
-/** Define the platform we're on. */
-#ifndef U_BSD
-#define U_BSD
-#endif
-
-/**
- * \def U_HAVE_DIRENT_H
- * Define whether dirent.h is available 
- * @internal
- */
-#ifndef U_HAVE_DIRENT_H
-#define U_HAVE_DIRENT_H 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 &lt;iostream&gt; 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 &lt;iostream.h&gt; 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
-
-/**
- * \def U_HAVE_STD_STRING
- * Define whether the standard C++ (STL) &lt;string&gt; header is available.
- * For platforms that do not use platform.h and do not define this constant
- * in their platform-specific headers, std_string.h defaults
- * U_HAVE_STD_STRING to 1.
- * @internal
- */
-#ifndef U_HAVE_STD_STRING
-#define U_HAVE_STD_STRING 1
-#endif
-
-/** @{ Determines whether specific types are available */
-#ifndef U_HAVE_INT8_T
-#define U_HAVE_INT8_T 1
-#endif
-
-#ifndef U_HAVE_UINT8_T
-#define U_HAVE_UINT8_T 1
-#endif
-
-#ifndef U_HAVE_INT16_T
-#define U_HAVE_INT16_T 1
-#endif
-
-#ifndef U_HAVE_UINT16_T
-#define U_HAVE_UINT16_T 1
-#endif
-
-#ifndef U_HAVE_INT32_T
-#define U_HAVE_INT32_T 1
-#endif
-
-#ifndef U_HAVE_UINT32_T
-#define U_HAVE_UINT32_T 1
-#endif
-
-#ifndef U_HAVE_INT64_T
-#define U_HAVE_INT64_T 1
-#endif
-
-#ifndef U_HAVE_UINT64_T
-#define U_HAVE_UINT64_T 1
-#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
-   It's done this way in case multiple architectures are being built at once.
-   For example, Darwin supports fat binaries, which can be both PPC and x86 based. */
-#if defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
-#else
-#define U_IS_BIG_ENDIAN 0
-#endif
-
-/* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
-#ifndef ICU_USE_THREADS 
-#define ICU_USE_THREADS 1
-#endif
-
-/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define UMTX_STRONG_MEMORY_MODEL 1
-#endif
-
-#ifndef U_DEBUG
-#define U_DEBUG 0
-#endif
-
-#ifndef U_RELEASE
-#define U_RELEASE 1
-#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 enable tracing. */
-#ifndef U_ENABLE_TRACING
-#define U_ENABLE_TRACING 0
-#endif
-
-/**
- * Whether to enable Dynamic loading in ICU
- * @internal
- */
-#ifndef U_ENABLE_DYLOAD
-#define U_ENABLE_DYLOAD 1
-#endif
-
-/**
- * Whether to test Dynamic loading as an OS capabilty
- * @internal
- */
-#ifndef U_CHECK_DYLOAD
-#define U_CHECK_DYLOAD 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
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Character data types                                                      */
-/*===========================================================================*/
-
-#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
-#   define U_CHARSET_FAMILY 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about wchar support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_WCHAR_H
-#define U_HAVE_WCHAR_H      1
-#endif
-
-#ifndef U_SIZEOF_WCHAR_T
-#define U_SIZEOF_WCHAR_T    4
-#endif
-
-#ifndef U_HAVE_WCSCPY
-#define U_HAVE_WCSCPY       1
-#endif
-
-/** @} */
-
-/**
- * @{
- * \def U_DECLARE_UTF16
- * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
- * instead.
- * @internal
- *
- * \def U_GNUC_UTF16_STRING
- * @internal
- */
-#ifndef U_GNUC_UTF16_STRING
-#define U_GNUC_UTF16_STRING 0
-#endif
-#if 1 || defined(U_CHECK_UTF16_STRING)
-#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
-    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
-    || (defined(__HP_cc) && __HP_cc >= 111106) \
-    || U_GNUC_UTF16_STRING
-#define U_DECLARE_UTF16(string) u ## string
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
-/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
-/* Sun's C compiler has issues with this notation, and it's unreliable. */
-#define U_DECLARE_UTF16(string) U ## string
-#elif U_SIZEOF_WCHAR_T == 2 \
-    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
-#define U_DECLARE_UTF16(string) L ## string
-#endif
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about POSIX support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_NL_LANGINFO_CODESET
-#define U_HAVE_NL_LANGINFO_CODESET  1
-#endif
-
-#ifndef U_NL_LANGINFO_CODESET
-#define U_NL_LANGINFO_CODESET       CODESET
-#endif
-
-#if 1
-#define U_TZSET         tzset
-#endif
-#if 0
-#define U_TIMEZONE      
-#endif
-#if 1
-#define U_TZNAME        tzname
-#endif
-
-#define U_HAVE_MMAP     1
-#define U_HAVE_POPEN    1
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Symbol import-export control                                              */
-/*===========================================================================*/
-
-#if 1
-#define U_EXPORT __attribute__((visibility("default")))
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
-   || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
-#define U_EXPORT __global
-/*#elif defined(__HP_aCC) || defined(__HP_cc)
-#define U_EXPORT __declspec(dllexport)*/
-#else
-#define U_EXPORT
-#endif
-
-/* U_CALLCONV is releated to U_EXPORT2 */
-#define U_EXPORT2
-
-/* cygwin needs to export/import data */
-#if defined(U_CYGWIN) && !defined(__GNUC__)
-#define U_IMPORT __declspec(dllimport)
-#else
-#define U_IMPORT 
-#endif
-
-/* @} */
-
-/*===========================================================================*/
-/** @{ Code alignment and C function inlining                                    */
-/*===========================================================================*/
-
-#ifndef U_INLINE
-#   ifdef __cplusplus
-#       define U_INLINE inline
-#   else
-#       define U_INLINE __inline__
-#   endif
-#endif
-
-#ifndef U_ALIGN_CODE
-#define U_ALIGN_CODE(n) 
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ GCC built in functions for atomic memory operations                       */
-/*===========================================================================*/
-
-/**
- * \def U_HAVE_GCC_ATOMICS
- * @internal
- */
-#ifndef U_HAVE_GCC_ATOMICS
-#define U_HAVE_GCC_ATOMICS 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-/**
- * \def U_MAKE
- * What program to execute to run 'make'
- */
-#ifndef U_MAKE
-#define U_MAKE  "gmake"
-#endif
-
-/** @} */
-
-#endif /* CYGWINMSVC */
-
-/*===========================================================================*/
-/* Custom icu entry point renaming                                                  */
-/*===========================================================================*/
-
-/**
- * Define the library suffix with C syntax.
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME 
-/**
- * Define the library suffix as a string with C syntax
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME_STRING ""
-/**
- * 1 if a custom library suffix is set
- * @internal
- */
-# define U_HAVE_LIB_SUFFIX 0
-
-#if U_HAVE_LIB_SUFFIX
-# ifndef U_ICU_ENTRY_POINT_RENAME
-/* Renaming pattern:    u_strcpy_41_suffix */
-#  define U_ICU_ENTRY_POINT_RENAME(x)    x ## _ ## 46 ## 
-#  define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt####major##minor##_dat
-
-# endif
-#endif
-
-#endif
diff --git a/source/common/unicode/platform.h.in b/source/common/unicode/platform.h.in
deleted file mode 100644
index 56683ef..0000000
--- a/source/common/unicode/platform.h.in
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* Note: autoconf creates platform.h from platform.h.in at configure time.
-*
-******************************************************************************
-*
-*  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.
-******************************************************************************
-*/
-
-#ifndef _PLATFORM_H
-#define _PLATFORM_H
-
-/**
- * \file 
- * \brief Basic types for the platform 
- */
-
-/* This file should be included before uvernum.h. */
-#if defined(UVERNUM_H)
-# error Do not include unicode/uvernum.h before #including unicode/platform.h.  Instead of unicode/uvernum.h, #include unicode/uversion.h
-#endif
-
-/**
- * Determine wheter to enable auto cleanup of libraries. 
- * @internal
- */
-#ifndef UCLN_NO_AUTO_CLEANUP
-#define UCLN_NO_AUTO_CLEANUP @UCLN_NO_AUTO_CLEANUP@
-#endif
-
-/* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */
-#ifndef CYGWINMSVC
-
-/** Define the platform we're on. */
-#ifndef @platform@
-#define @platform@
-#endif
-
-/**
- * \def U_HAVE_DIRENT_H
- * Define whether dirent.h is available 
- * @internal
- */
-#ifndef U_HAVE_DIRENT_H
-#define U_HAVE_DIRENT_H @U_HAVE_DIRENT_H@
-#endif
-
-/** Define whether inttypes.h is available */
-#ifndef U_HAVE_INTTYPES_H
-#define U_HAVE_INTTYPES_H @U_HAVE_INTTYPES_H@
-#endif
-
-/**
- * Define what support for C++ streams is available.
- *     If U_IOSTREAM_SOURCE is set to 199711, then &lt;iostream&gt; 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 &lt;iostream.h&gt; 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 @U_IOSTREAM_SOURCE@
-#endif
-
-/**
- * \def U_HAVE_STD_STRING
- * Define whether the standard C++ (STL) &lt;string&gt; header is available.
- * For platforms that do not use platform.h and do not define this constant
- * in their platform-specific headers, std_string.h defaults
- * U_HAVE_STD_STRING to 1.
- * @internal
- */
-#ifndef U_HAVE_STD_STRING
-#define U_HAVE_STD_STRING @U_HAVE_STD_STRING@
-#endif
-
-/** @{ Determines whether specific types are available */
-#ifndef U_HAVE_INT8_T
-#define U_HAVE_INT8_T @HAVE_INT8_T@
-#endif
-
-#ifndef U_HAVE_UINT8_T
-#define U_HAVE_UINT8_T @HAVE_UINT8_T@
-#endif
-
-#ifndef U_HAVE_INT16_T
-#define U_HAVE_INT16_T @HAVE_INT16_T@
-#endif
-
-#ifndef U_HAVE_UINT16_T
-#define U_HAVE_UINT16_T @HAVE_UINT16_T@
-#endif
-
-#ifndef U_HAVE_INT32_T
-#define U_HAVE_INT32_T @HAVE_INT32_T@
-#endif
-
-#ifndef U_HAVE_UINT32_T
-#define U_HAVE_UINT32_T @HAVE_UINT32_T@
-#endif
-
-#ifndef U_HAVE_INT64_T
-#define U_HAVE_INT64_T @HAVE_INT64_T@
-#endif
-
-#ifndef U_HAVE_UINT64_T
-#define U_HAVE_UINT64_T @HAVE_UINT64_T@
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Compiler and environment features                                     */
-/*===========================================================================*/
-
-/* Define whether namespace is supported */
-#ifndef U_HAVE_NAMESPACE
-#define U_HAVE_NAMESPACE @U_HAVE_NAMESPACE@
-#endif
-
-/* Determines the endianness of the platform
-   It's done this way in case multiple architectures are being built at once.
-   For example, Darwin supports fat binaries, which can be both PPC and x86 based. */
-#if defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
-#else
-#define U_IS_BIG_ENDIAN @U_IS_BIG_ENDIAN@
-#endif
-
-/* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
-#ifndef ICU_USE_THREADS 
-#define ICU_USE_THREADS @ICU_USE_THREADS@
-#endif
-
-/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define UMTX_STRONG_MEMORY_MODEL 1
-#endif
-
-#ifndef U_DEBUG
-#define U_DEBUG @ENABLE_DEBUG@
-#endif
-
-#ifndef U_RELEASE
-#define U_RELEASE @ENABLE_RELEASE@
-#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 @U_DISABLE_RENAMING@
-#endif
-
-/* Determine whether to override new and delete. */
-#ifndef U_OVERRIDE_CXX_ALLOCATION
-#define U_OVERRIDE_CXX_ALLOCATION @U_OVERRIDE_CXX_ALLOCATION@
-#endif
-/* Determine whether to override placement new and delete for STL. */
-#ifndef U_HAVE_PLACEMENT_NEW
-#define U_HAVE_PLACEMENT_NEW @U_HAVE_PLACEMENT_NEW@
-#endif
-
-/* Determine whether to enable tracing. */
-#ifndef U_ENABLE_TRACING
-#define U_ENABLE_TRACING @U_ENABLE_TRACING@
-#endif
-
-/**
- * Whether to enable Dynamic loading in ICU
- * @internal
- */
-#ifndef U_ENABLE_DYLOAD
-#define U_ENABLE_DYLOAD @U_ENABLE_DYLOAD@
-#endif
-
-/**
- * Whether to test Dynamic loading as an OS capabilty
- * @internal
- */
-#ifndef U_CHECK_DYLOAD
-#define U_CHECK_DYLOAD @U_CHECK_DYLOAD@
-#endif
-
-
-/** Do we allow ICU users to use the draft APIs by default? */
-#ifndef U_DEFAULT_SHOW_DRAFT
-#define U_DEFAULT_SHOW_DRAFT @U_DEFAULT_SHOW_DRAFT@
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Character data types                                                      */
-/*===========================================================================*/
-
-#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
-#   define U_CHARSET_FAMILY 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about wchar support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_WCHAR_H
-#define U_HAVE_WCHAR_H      @U_HAVE_WCHAR_H@
-#endif
-
-#ifndef U_SIZEOF_WCHAR_T
-#define U_SIZEOF_WCHAR_T    @U_SIZEOF_WCHAR_T@
-#endif
-
-#ifndef U_HAVE_WCSCPY
-#define U_HAVE_WCSCPY       @U_HAVE_WCSCPY@
-#endif
-
-/** @} */
-
-/**
- * @{
- * \def U_DECLARE_UTF16
- * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
- * instead.
- * @internal
- *
- * \def U_GNUC_UTF16_STRING
- * @internal
- */
-#ifndef U_GNUC_UTF16_STRING
-#define U_GNUC_UTF16_STRING @U_CHECK_GNUC_UTF16_STRING@
-#endif
-#if @U_CHECK_UTF16_STRING@ || defined(U_CHECK_UTF16_STRING)
-#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
-    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
-    || (defined(__HP_cc) && __HP_cc >= 111106) \
-    || U_GNUC_UTF16_STRING
-#define U_DECLARE_UTF16(string) u ## string
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
-/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
-/* Sun's C compiler has issues with this notation, and it's unreliable. */
-#define U_DECLARE_UTF16(string) U ## string
-#elif U_SIZEOF_WCHAR_T == 2 \
-    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
-#define U_DECLARE_UTF16(string) L ## string
-#endif
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about POSIX support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_NL_LANGINFO_CODESET
-#define U_HAVE_NL_LANGINFO_CODESET  @U_HAVE_NL_LANGINFO_CODESET@
-#endif
-
-#ifndef U_NL_LANGINFO_CODESET
-#define U_NL_LANGINFO_CODESET       @U_NL_LANGINFO_CODESET@
-#endif
-
-#if @U_HAVE_TZSET@
-#define U_TZSET         @U_TZSET@
-#endif
-#if @U_HAVE_TIMEZONE@
-#define U_TIMEZONE      @U_TIMEZONE@
-#endif
-#if @U_HAVE_TZNAME@
-#define U_TZNAME        @U_TZNAME@
-#endif
-
-#define U_HAVE_MMAP     @HAVE_MMAP@
-#define U_HAVE_POPEN    @U_HAVE_POPEN@
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Symbol import-export control                                              */
-/*===========================================================================*/
-
-#ifdef U_STATIC_IMPLEMENTATION
-#define U_EXPORT
-#elif @U_USE_GCC_VISIBILITY_ATTRIBUTE@
-#define U_EXPORT __attribute__((visibility("default")))
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
-   || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
-#define U_EXPORT __global
-/*#elif defined(__HP_aCC) || defined(__HP_cc)
-#define U_EXPORT __declspec(dllexport)*/
-#else
-#define U_EXPORT
-#endif
-
-/* U_CALLCONV is releated to U_EXPORT2 */
-#define U_EXPORT2
-
-/* cygwin needs to export/import data */
-#if defined(U_CYGWIN) && !defined(__GNUC__)
-#define U_IMPORT __declspec(dllimport)
-#else
-#define U_IMPORT 
-#endif
-
-/* @} */
-
-/*===========================================================================*/
-/** @{ Code alignment and C function inlining                                    */
-/*===========================================================================*/
-
-#ifndef U_INLINE
-#   ifdef __cplusplus
-#       define U_INLINE inline
-#   else
-#       define U_INLINE @U_INLINE@
-#   endif
-#endif
-
-#ifndef U_ALIGN_CODE
-#define U_ALIGN_CODE(n) 
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ GCC built in functions for atomic memory operations                       */
-/*===========================================================================*/
-
-/**
- * \def U_HAVE_GCC_ATOMICS
- * @internal
- */
-#ifndef U_HAVE_GCC_ATOMICS
-#define U_HAVE_GCC_ATOMICS @U_HAVE_GCC_ATOMICS@
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-/**
- * \def U_MAKE
- * What program to execute to run 'make'
- */
-#ifndef U_MAKE
-#define U_MAKE  "@U_MAKE@"
-#endif
-
-/** @} */
-
-#endif /* CYGWINMSVC */
-
-/*===========================================================================*/
-/* Custom icu entry point renaming                                                  */
-/*===========================================================================*/
-
-/**
- * Define the library suffix with C syntax.
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME @ICULIBSUFFIXCNAME@
-/**
- * Define the library suffix as a string with C syntax
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME_STRING "@ICULIBSUFFIXCNAME@"
-/**
- * 1 if a custom library suffix is set
- * @internal
- */
-# define U_HAVE_LIB_SUFFIX @U_HAVE_LIB_SUFFIX@
-
-#if U_HAVE_LIB_SUFFIX
-# ifndef U_ICU_ENTRY_POINT_RENAME
-/* Renaming pattern:    u_strcpy_41_suffix */
-#  define U_ICU_ENTRY_POINT_RENAME(x)    x ## _ ## @LIB_VERSION_MAJOR@ ## @ICULIBSUFFIXCNAME@
-#  define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt##@ICULIBSUFFIXCNAME@##major##minor##_dat
-
-# endif
-#endif
-
-#endif
diff --git a/source/common/unicode/plinux.h b/source/common/unicode/plinux.h
deleted file mode 100644
index f15cffc..0000000
--- a/source/common/unicode/plinux.h
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* Note: autoconf creates platform.h from platform.h.in at configure time.
-*
-******************************************************************************
-*
-*  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.
-******************************************************************************
-*/
-
-#ifndef _PLATFORM_H
-#define _PLATFORM_H
-
-/**
- * \file 
- * \brief Basic types for the platform 
- */
-
-/* This file should be included before uvernum.h. */
-#if defined(UVERNUM_H)
-# error Do not include unicode/uvernum.h before #including unicode/platform.h.  Instead of unicode/uvernum.h, #include unicode/uversion.h
-#endif
-
-/**
- * Determine wheter to enable auto cleanup of libraries. 
- * @internal
- */
-#ifndef UCLN_NO_AUTO_CLEANUP
-#define UCLN_NO_AUTO_CLEANUP 1
-#endif
-
-/* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */
-#ifndef CYGWINMSVC
-
-/** Define the platform we're on. */
-#ifndef U_LINUX
-#define U_LINUX
-#endif
-
-/**
- * \def U_HAVE_DIRENT_H
- * Define whether dirent.h is available 
- * @internal
- */
-#ifndef U_HAVE_DIRENT_H
-#define U_HAVE_DIRENT_H 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 &lt;iostream&gt; 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 &lt;iostream.h&gt; 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
-
-/**
- * \def U_HAVE_STD_STRING
- * Define whether the standard C++ (STL) &lt;string&gt; header is available.
- * For platforms that do not use platform.h and do not define this constant
- * in their platform-specific headers, std_string.h defaults
- * U_HAVE_STD_STRING to 1.
- * @internal
- */
-#ifndef U_HAVE_STD_STRING
-#define U_HAVE_STD_STRING 1
-#endif
-
-/** @{ Determines whether specific types are available */
-#ifndef U_HAVE_INT8_T
-#define U_HAVE_INT8_T 1
-#endif
-
-#ifndef U_HAVE_UINT8_T
-#define U_HAVE_UINT8_T 1
-#endif
-
-#ifndef U_HAVE_INT16_T
-#define U_HAVE_INT16_T 1
-#endif
-
-#ifndef U_HAVE_UINT16_T
-#define U_HAVE_UINT16_T 1
-#endif
-
-#ifndef U_HAVE_INT32_T
-#define U_HAVE_INT32_T 1
-#endif
-
-#ifndef U_HAVE_UINT32_T
-#define U_HAVE_UINT32_T 1
-#endif
-
-#ifndef U_HAVE_INT64_T
-#define U_HAVE_INT64_T 1
-#endif
-
-#ifndef U_HAVE_UINT64_T
-#define U_HAVE_UINT64_T 1
-#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
-   It's done this way in case multiple architectures are being built at once.
-   For example, Darwin supports fat binaries, which can be both PPC and x86 based. */
-#if defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
-#else
-#define U_IS_BIG_ENDIAN 0
-#endif
-
-/* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
-#ifndef ICU_USE_THREADS 
-#define ICU_USE_THREADS 1
-#endif
-
-/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define UMTX_STRONG_MEMORY_MODEL 1
-#endif
-
-#ifndef U_DEBUG
-#define U_DEBUG 0
-#endif
-
-#ifndef U_RELEASE
-#define U_RELEASE 1
-#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 enable tracing. */
-#ifndef U_ENABLE_TRACING
-#define U_ENABLE_TRACING 0
-#endif
-
-/**
- * Whether to enable Dynamic loading in ICU
- * @internal
- */
-#ifndef U_ENABLE_DYLOAD
-#define U_ENABLE_DYLOAD 1
-#endif
-
-/**
- * Whether to test Dynamic loading as an OS capabilty
- * @internal
- */
-#ifndef U_CHECK_DYLOAD
-#define U_CHECK_DYLOAD 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
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Character data types                                                      */
-/*===========================================================================*/
-
-#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
-#   define U_CHARSET_FAMILY 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about wchar support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_WCHAR_H
-#define U_HAVE_WCHAR_H      1
-#endif
-
-#ifndef U_SIZEOF_WCHAR_T
-#define U_SIZEOF_WCHAR_T    4
-#endif
-
-#ifndef U_HAVE_WCSCPY
-#define U_HAVE_WCSCPY       1
-#endif
-
-/** @} */
-
-/**
- * @{
- * \def U_DECLARE_UTF16
- * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
- * instead.
- * @internal
- *
- * \def U_GNUC_UTF16_STRING
- * @internal
- */
-#ifndef U_GNUC_UTF16_STRING
-#define U_GNUC_UTF16_STRING 0
-#endif
-#if 1 || defined(U_CHECK_UTF16_STRING)
-#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
-    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
-    || (defined(__HP_cc) && __HP_cc >= 111106) \
-    || U_GNUC_UTF16_STRING
-#define U_DECLARE_UTF16(string) u ## string
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
-/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
-/* Sun's C compiler has issues with this notation, and it's unreliable. */
-#define U_DECLARE_UTF16(string) U ## string
-#elif U_SIZEOF_WCHAR_T == 2 \
-    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
-#define U_DECLARE_UTF16(string) L ## string
-#endif
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about POSIX support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_NL_LANGINFO_CODESET
-#define U_HAVE_NL_LANGINFO_CODESET  1
-#endif
-
-#ifndef U_NL_LANGINFO_CODESET
-#define U_NL_LANGINFO_CODESET       CODESET
-#endif
-
-#if 1
-#define U_TZSET         tzset
-#endif
-#if !defined(__UCLIBC__)
-#define U_TIMEZONE      __timezone
-#endif
-#if 1
-#define U_TZNAME        tzname
-#endif
-
-#define U_HAVE_MMAP     1
-#define U_HAVE_POPEN    1
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Symbol import-export control                                              */
-/*===========================================================================*/
-
-#ifdef U_STATIC_IMPLEMENTATION
-#define U_EXPORT
-#elif 1
-#define U_EXPORT __attribute__((visibility("default")))
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
-   || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
-#define U_EXPORT __global
-/*#elif defined(__HP_aCC) || defined(__HP_cc)
-#define U_EXPORT __declspec(dllexport)*/
-#else
-#define U_EXPORT
-#endif
-
-/* U_CALLCONV is releated to U_EXPORT2 */
-#define U_EXPORT2
-
-/* cygwin needs to export/import data */
-#if defined(U_CYGWIN) && !defined(__GNUC__)
-#define U_IMPORT __declspec(dllimport)
-#else
-#define U_IMPORT 
-#endif
-
-/* @} */
-
-/*===========================================================================*/
-/** @{ Code alignment and C function inlining                                    */
-/*===========================================================================*/
-
-#ifndef U_INLINE
-#   ifdef __cplusplus
-#       define U_INLINE inline
-#   else
-#       define U_INLINE __inline__
-#   endif
-#endif
-
-#ifndef U_ALIGN_CODE
-#define U_ALIGN_CODE(n) 
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ GCC built in functions for atomic memory operations                       */
-/*===========================================================================*/
-
-/**
- * \def U_HAVE_GCC_ATOMICS
- * @internal
- */
-#ifndef U_HAVE_GCC_ATOMICS
-#define U_HAVE_GCC_ATOMICS 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-/**
- * \def U_MAKE
- * What program to execute to run 'make'
- */
-#ifndef U_MAKE
-#define U_MAKE  "make"
-#endif
-
-/** @} */
-
-#endif /* CYGWINMSVC */
-
-/*===========================================================================*/
-/* Custom icu entry point renaming                                                  */
-/*===========================================================================*/
-
-/**
- * Define the library suffix with C syntax.
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME 
-/**
- * Define the library suffix as a string with C syntax
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME_STRING ""
-/**
- * 1 if a custom library suffix is set
- * @internal
- */
-# define U_HAVE_LIB_SUFFIX 0
-
-#if U_HAVE_LIB_SUFFIX
-# ifndef U_ICU_ENTRY_POINT_RENAME
-/* Renaming pattern:    u_strcpy_41_suffix */
-#  define U_ICU_ENTRY_POINT_RENAME(x)    x ## _ ## 46 ## 
-#  define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt####major##minor##_dat
-
-# endif
-#endif
-
-#endif
diff --git a/source/common/unicode/pmac.h b/source/common/unicode/pmac.h
deleted file mode 100644
index 3686ea9..0000000
--- a/source/common/unicode/pmac.h
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* Note: autoconf creates platform.h from platform.h.in at configure time.
-*
-******************************************************************************
-*
-*  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.
-******************************************************************************
-*/
-
-#ifndef _PLATFORM_H
-#define _PLATFORM_H
-
-/**
- * \file 
- * \brief Basic types for the platform 
- */
-
-/* This file should be included before uvernum.h. */
-#if defined(UVERNUM_H)
-# error Do not include unicode/uvernum.h before #including unicode/platform.h.  Instead of unicode/uvernum.h, #include unicode/uversion.h
-#endif
-
-/**
- * Determine wheter to enable auto cleanup of libraries. 
- * @internal
- */
-#ifndef UCLN_NO_AUTO_CLEANUP
-#define UCLN_NO_AUTO_CLEANUP 1
-#endif
-
-/* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */
-#ifndef CYGWINMSVC
-
-/** Define the platform we're on. */
-#ifndef U_DARWIN
-#define U_DARWIN
-#endif
-
-#include <AvailabilityMacros.h>
-#include <TargetConditionals.h>
-
-/**
- * Add a second platform define to handle differences between Mac OS X and iOS
- */
-#if TARGET_OS_IPHONE
-#ifndef U_IOS
-#define U_IOS
-#endif
-#endif
-
-/**
- * \def U_HAVE_DIRENT_H
- * Define whether dirent.h is available 
- * @internal
- */
-#ifndef U_HAVE_DIRENT_H
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
-#define U_HAVE_DIRENT_H 0
-#else
-#define U_HAVE_DIRENT_H 1
-#endif
-#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 &lt;iostream&gt; 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 &lt;iostream.h&gt; 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
-
-/**
- * \def U_HAVE_STD_STRING
- * Define whether the standard C++ (STL) &lt;string&gt; header is available.
- * For platforms that do not use platform.h and do not define this constant
- * in their platform-specific headers, std_string.h defaults
- * U_HAVE_STD_STRING to 1.
- * @internal
- */
-#ifndef U_HAVE_STD_STRING
-#define U_HAVE_STD_STRING 1
-#endif
-
-/** @{ Determines whether specific types are available */
-#ifndef U_HAVE_INT8_T
-#define U_HAVE_INT8_T 1
-#endif
-
-#ifndef U_HAVE_UINT8_T
-#define U_HAVE_UINT8_T 1
-#endif
-
-#ifndef U_HAVE_INT16_T
-#define U_HAVE_INT16_T 1
-#endif
-
-#ifndef U_HAVE_UINT16_T
-#define U_HAVE_UINT16_T 1
-#endif
-
-#ifndef U_HAVE_INT32_T
-#define U_HAVE_INT32_T 1
-#endif
-
-#ifndef U_HAVE_UINT32_T
-#define U_HAVE_UINT32_T 1
-#endif
-
-#ifndef U_HAVE_INT64_T
-#define U_HAVE_INT64_T 1
-#endif
-
-#ifndef U_HAVE_UINT64_T
-#define U_HAVE_UINT64_T 1
-#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
-   It's done this way in case multiple architectures are being built at once.
-   For example, Darwin supports fat binaries, which can be both PPC and x86 based. */
-#if defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
-#else
-#define U_IS_BIG_ENDIAN 0
-#endif
-
-/* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
-#ifndef ICU_USE_THREADS 
-#define ICU_USE_THREADS 1
-#endif
-
-/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define UMTX_STRONG_MEMORY_MODEL 1
-#endif
-
-#ifndef U_DEBUG
-#define U_DEBUG 0
-#endif
-
-#ifndef U_RELEASE
-#define U_RELEASE 1
-#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 enable tracing. */
-#ifndef U_ENABLE_TRACING
-#define U_ENABLE_TRACING 0
-#endif
-
-/**
- * Whether to enable Dynamic loading in ICU
- * @internal
- */
-#ifndef U_ENABLE_DYLOAD
-#define U_ENABLE_DYLOAD 1
-#endif
-
-/**
- * Whether to test Dynamic loading as an OS capabilty
- * @internal
- */
-#ifndef U_CHECK_DYLOAD
-#define U_CHECK_DYLOAD 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
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Character data types                                                      */
-/*===========================================================================*/
-
-#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
-#   define U_CHARSET_FAMILY 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about wchar support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_WCHAR_H
-#define U_HAVE_WCHAR_H      1
-#endif
-
-#ifndef U_SIZEOF_WCHAR_T
-#define U_SIZEOF_WCHAR_T    4
-#endif
-
-#ifndef U_HAVE_WCSCPY
-#define U_HAVE_WCSCPY       1
-#endif
-
-/** @} */
-
-/**
- * @{
- * \def U_DECLARE_UTF16
- * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
- * instead.
- * @internal
- *
- * \def U_GNUC_UTF16_STRING
- * @internal
- */
-#ifndef U_GNUC_UTF16_STRING
-#define U_GNUC_UTF16_STRING 0
-#endif
-#if 1 || defined(U_CHECK_UTF16_STRING)
-#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
-    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
-    || (defined(__HP_cc) && __HP_cc >= 111106) \
-    || U_GNUC_UTF16_STRING
-#define U_DECLARE_UTF16(string) u ## string
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
-/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
-/* Sun's C compiler has issues with this notation, and it's unreliable. */
-#define U_DECLARE_UTF16(string) U ## string
-#elif U_SIZEOF_WCHAR_T == 2 \
-    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
-#define U_DECLARE_UTF16(string) L ## string
-#endif
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Information about POSIX support                                           */
-/*===========================================================================*/
-
-#ifndef U_HAVE_NL_LANGINFO_CODESET
-#define U_HAVE_NL_LANGINFO_CODESET  1
-#endif
-
-#ifndef U_NL_LANGINFO_CODESET
-#define U_NL_LANGINFO_CODESET       CODESET
-#endif
-
-#if 1
-#define U_TZSET         tzset
-#endif
-#ifndef U_IOS
-/* The iOS version of timezone is busted (at least in the simulator, it is
-   never set to anything useful). Leave it undefined to avoid a code path
-   in putil.c. */
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
-#define U_TIMEZONE 0
-#else
-#define U_TIMEZONE timezone
-#endif
-#endif  // !U_IOS
-#if 1
-#define U_TZNAME        tzname
-#endif
-
-#define U_HAVE_MMAP     1
-#define U_HAVE_POPEN    1
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Symbol import-export control                                              */
-/*===========================================================================*/
-
-#ifdef U_STATIC_IMPLEMENTATION
-#define U_EXPORT
-#elif 1
-#define U_EXPORT __attribute__((visibility("default")))
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
-   || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
-#define U_EXPORT __global
-/*#elif defined(__HP_aCC) || defined(__HP_cc)
-#define U_EXPORT __declspec(dllexport)*/
-#else
-#define U_EXPORT
-#endif
-
-/* U_CALLCONV is releated to U_EXPORT2 */
-#define U_EXPORT2
-
-/* cygwin needs to export/import data */
-#if defined(U_CYGWIN) && !defined(__GNUC__)
-#define U_IMPORT __declspec(dllimport)
-#else
-#define U_IMPORT 
-#endif
-
-/* @} */
-
-/*===========================================================================*/
-/** @{ Code alignment and C function inlining                                    */
-/*===========================================================================*/
-
-#ifndef U_INLINE
-#   ifdef __cplusplus
-#       define U_INLINE inline
-#   else
-#       define U_INLINE __inline__
-#   endif
-#endif
-
-#ifndef U_ALIGN_CODE
-#define U_ALIGN_CODE(n) 
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ GCC built in functions for atomic memory operations                       */
-/*===========================================================================*/
-
-/**
- * \def U_HAVE_GCC_ATOMICS
- * @internal
- */
-#ifndef U_HAVE_GCC_ATOMICS
-#define U_HAVE_GCC_ATOMICS 1
-#endif
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-/**
- * \def U_MAKE
- * What program to execute to run 'make'
- */
-#ifndef U_MAKE
-#define U_MAKE  "/usr/bin/gnumake"
-#endif
-
-/** @} */
-
-#endif /* CYGWINMSVC */
-
-/*===========================================================================*/
-/* Custom icu entry point renaming                                                  */
-/*===========================================================================*/
-
-/**
- * Define the library suffix with C syntax.
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME 
-/**
- * Define the library suffix as a string with C syntax
- * @internal
- */
-# define U_LIB_SUFFIX_C_NAME_STRING ""
-/**
- * 1 if a custom library suffix is set
- * @internal
- */
-# define U_HAVE_LIB_SUFFIX 0
-
-#if U_HAVE_LIB_SUFFIX
-# ifndef U_ICU_ENTRY_POINT_RENAME
-/* Renaming pattern:    u_strcpy_41_suffix */
-#  define U_ICU_ENTRY_POINT_RENAME(x)    x ## _ ## 46 ## 
-#  define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt####major##minor##_dat
-
-# endif
-#endif
-
-/*===========================================================================*/
-/* Local defines                                                             */
-/*===========================================================================*/
-
-/* On the Mac, we define U_WCHAR_IS_UTF32 to treat wchar_t as though it
-   contains UTF-32 at all times.  Strictly speaking, that's not entirely
-   correct given Mac's libc (__STDC_ISO_10646__ is not defined) , but provided
-   that we ignore libc's locale support (by not calling setlocale) and its
-   multibyte string support, this should be fine.  Our codebase makes enough
-   other assumptions about a UTF-8 locale and UTF-32 wchar_t strings for this
-   to make sense. */
-#define U_WCHAR_IS_UTF32
-
-#endif
diff --git a/source/common/unicode/popenbsd.h b/source/common/unicode/popenbsd.h
deleted file mode 100644
index add9831..0000000
--- a/source/common/unicode/popenbsd.h
+++ /dev/null
@@ -1,313 +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 Basic types for the platform 
- */
-
-/* Define the platform we're on. */
-#ifndef U_BSD
-#define U_BSD
-#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 1
-#endif
-
-#ifndef U_HAVE_UINT8_T
-#define U_HAVE_UINT8_T 1
-#endif
-
-#ifndef U_HAVE_INT16_T
-#define U_HAVE_INT16_T 1
-#endif
-
-#ifndef U_HAVE_UINT16_T
-#define U_HAVE_UINT16_T 1
-#endif
-
-#ifndef U_HAVE_INT32_T
-#define U_HAVE_INT32_T 1
-#endif
-
-#ifndef U_HAVE_UINT32_T
-#define U_HAVE_UINT32_T 1
-#endif
-
-#ifndef U_HAVE_INT64_T
-#define U_HAVE_INT64_T 1
-#endif
-
-#ifndef U_HAVE_UINT64_T
-#define U_HAVE_UINT64_T 1
-#endif
-
-/*===========================================================================*/
-/* Generic data types                                                        */
-/*===========================================================================*/
-
-#include <sys/types.h>
-
-/* If your platform does not have the <inttypes.h> header, you may
-   need to edit the typedefs below. */
-#if U_HAVE_INTTYPES_H
-
-/* autoconf 2.13 sometimes can't properly find the data types in <inttypes.h> */
-/* os/390 needs <inttypes.h>, but it doesn't have int8_t, and it sometimes */
-/* doesn't have uint8_t depending on the OS version. */
-/* So we have this work around. */
-#ifdef OS390
-/* The features header is needed to get (u)int64_t sometimes. */
-#include <features.h>
-#if ! U_HAVE_INT8_T
-typedef signed char int8_t;
-#endif
-#if !defined(__uint8_t)
-#define __uint8_t 1
-typedef unsigned char uint8_t;
-#endif
-#endif /* OS390 */
-
-#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
-    typedef signed long long int64_t;
-/* else we may not have a 64-bit type */
-#endif
-
-#if ! U_HAVE_UINT64_T
-    typedef unsigned long long uint64_t;
-/* else we may not have a 64-bit type */
-#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
-   It's done this way in case multiple architectures are being built at once.
-   For example, Darwin supports fat binaries, which can be both PPC and x86 based. */
-#if defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
-#else
-#define U_IS_BIG_ENDIAN 0
-#endif
-
-/* 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 lock. */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define UMTX_STRONG_MEMORY_MODEL 1
-#endif
-
-#ifndef U_DEBUG
-#define U_DEBUG 0
-#endif
-
-#ifndef U_RELEASE
-#define U_RELEASE 1
-#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 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 ""
-
-/*===========================================================================*/
-/* Character data types                                                      */
-/*===========================================================================*/
-
-#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
-#   define U_CHARSET_FAMILY 1
-#endif
-
-/*===========================================================================*/
-/* Information about wchar support                                           */
-/*===========================================================================*/
-
-#define U_HAVE_WCHAR_H      1
-#define U_SIZEOF_WCHAR_T    4
-
-#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 || defined(U_CHECK_UTF16_STRING)
-#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
-    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
-    || (defined(__HP_cc) && __HP_cc >= 111106)
-#define U_DECLARE_UTF16(string) u ## string
-#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
-/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
-/* Sun's C compiler has issues with this notation, and it's unreliable. */
-#define U_DECLARE_UTF16(string) U ## string
-#elif U_SIZEOF_WCHAR_T == 2 \
-    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
-#define U_DECLARE_UTF16(string) L ## string
-#endif
-#endif
-
-/*===========================================================================*/
-/* Information about POSIX support                                           */
-/*===========================================================================*/
-
-#define U_HAVE_NL_LANGINFO_CODESET  1
-#define U_NL_LANGINFO_CODESET       CODESET
-
-#if 1
-#define U_TZSET         tzset
-#endif
-#if 0
-#define U_TIMEZONE      
-#endif
-#if 1
-#define U_TZNAME        tzname
-#endif
-
-#define U_HAVE_MMAP     1
-#define U_HAVE_POPEN    1
-
-/*===========================================================================*/
-/* Symbol import-export control                                              */
-/*===========================================================================*/
-
-#if 1
-#define U_EXPORT __attribute__((visibility("default")))
-/*#elif defined(__HP_aCC) || defined(__HP_cc)
-#define U_EXPORT __declspec(dllexport)*/
-#else
-#define U_EXPORT
-#endif
-
-/* U_CALLCONV is releated to U_EXPORT2 */
-#define U_EXPORT2
-
-/* cygwin needs to export/import data */
-#ifdef U_CYGWIN
-#define U_IMPORT __declspec(dllimport)
-#else
-#define U_IMPORT 
-#endif
-
-/*===========================================================================*/
-/* Code alignment and C function inlining                                    */
-/*===========================================================================*/
-
-#ifndef U_INLINE
-#   ifdef __cplusplus
-#       define U_INLINE inline
-#   else
-#       define U_INLINE inline
-#   endif
-#endif
-
-#define U_ALIGN_CODE(n) 
-
-/*===========================================================================*/
-/* Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-#define U_MAKE  "/usr/local/bin/gmake"
diff --git a/source/common/unicode/ppalmos.h b/source/common/unicode/ppalmos.h
deleted file mode 100644
index c15b2ce..0000000
--- a/source/common/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
diff --git a/source/common/unicode/ptypes.h b/source/common/unicode/ptypes.h
deleted file mode 100644
index ea271ed..0000000
--- a/source/common/unicode/ptypes.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-*  FILE NAME : ptypes.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.
-*   09/18/08    srl         Moved basic types back to ptypes.h from platform.h
-******************************************************************************
-*/
-
-#ifndef _PTYPES_H
-#define _PTYPES_H
-
-#include <sys/types.h>
-
-#if defined(__APPLE__)
-#   include "unicode/pmac.h"
-#elif defined(ANDROID)
-#   include "unicode/pandroid.h"
-#elif defined(__linux__)
-#   include "unicode/plinux.h"
-#elif defined(__FreeBSD__)
-#   include "unicode/pfreebsd.h"
-#elif defined(__OpenBSD__)
-#   include "unicode/popenbsd.h"
-#else
-#   include "unicode/platform.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
-
-/* autoconf 2.13 sometimes can't properly find the data types in <inttypes.h> */
-/* os/390 needs <inttypes.h>, but it doesn't have int8_t, and it sometimes */
-/* doesn't have uint8_t depending on the OS version. */
-/* So we have this work around. */
-#ifdef OS390
-/* The features header is needed to get (u)int64_t sometimes. */
-#include <features.h>
-#if ! U_HAVE_INT8_T
-typedef signed char int8_t;
-#endif
-#if !defined(__uint8_t)
-#define __uint8_t 1
-typedef unsigned char uint8_t;
-#endif
-#endif /* OS390 */
-
-#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
-    typedef signed long long int64_t;
-/* else we may not have a 64-bit type */
-#endif
-
-#if ! U_HAVE_UINT64_T
-    typedef unsigned long long uint64_t;
-/* else we may not have a 64-bit type */
-#endif
-
-#endif /* U_HAVE_INTTYPES_H */
-
-#endif /* _PTYPES_H */
diff --git a/source/common/unicode/putil.h b/source/common/unicode/putil.h
deleted file mode 100644
index 090b226..0000000
--- a/source/common/unicode/putil.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2009, 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>
- * \code
- *        #define ICU_DATA_DIR "path" 
- * \endcode
- * </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);
-
-#if !U_CHARSET_IS_UTF8
-/**
- * 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);
-#endif
-
-/**
- * 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
diff --git a/source/common/unicode/pwin32.h b/source/common/unicode/pwin32.h
deleted file mode 100644
index b3f994c..0000000
--- a/source/common/unicode/pwin32.h
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- ******************************************************************************
- *
- *   Copyright (C) 1997-2010, 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 _MSC_VER >= 1700
-#include <stdint.h>
-#endif
-
-#if defined(__BORLANDC__)
-#define U_HAVE_PLACEMENT_NEW 0
-#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
-#   if defined(__BORLANDC__) || defined(__MINGW32__)
-#       define U_HAVE_INTTYPES_H 1
-#   else
-#       define U_HAVE_INTTYPES_H 0
-#   endif
-#endif
-
-/**
- * Define what support for C++ streams is available.
- *     If U_IOSTREAM_SOURCE is set to 199711, then &lt;iostream&gt; 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 &lt;iostream.h&gt; 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. */
-#ifndef ICU_USE_THREADS
-#define ICU_USE_THREADS 1
-#endif
-
-/** 0 or 1 to enable or disable auto cleanup of libraries. If undefined, default is: disabled. */
-#ifndef UCLN_NO_AUTO_CLEANUP
-#define UCLN_NO_AUTO_CLEANUP 1
-#endif
-
-/* 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
-
-/** Enable or disable debugging options **/
-#ifndef U_DEBUG
-#ifdef _DEBUG
-#define U_DEBUG 1
-#else
-#define U_DEBUG 0
-#endif
-#endif
-
-/** Enable or disable release options **/
-#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. */
-#ifndef U_HAVE_LIB_SUFFIX
-#define U_HAVE_LIB_SUFFIX 0
-#endif
-#ifndef U_LIB_SUFFIX_C_NAME
-#define U_LIB_SUFFIX_C_NAME
-#endif
-#ifndef U_LIB_SUFFIX_C_NAME_STRING
-#define U_LIB_SUFFIX_C_NAME_STRING ""
-#endif
-/** @} */
-
-/*===========================================================================*/
-/** @{ 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                                           */
-/*===========================================================================*/
-
-/**
- * @internal 
- */
-#if 1
-#define U_TZSET         _tzset
-#endif
-/**
- * @internal 
- */
-#if 1
-#define U_TIMEZONE      _timezone
-#endif
-/**
- * @internal 
- */
-#if 1
-#define U_TZNAME        _tzname
-#endif
-/**
- * @internal 
- */
-#if 1
-#define U_DAYLIGHT      _daylight
-#endif
-
-#define U_HAVE_MMAP 0
-#define U_HAVE_POPEN 0
-
-#ifndef U_ENABLE_DYLOAD
-#define U_ENABLE_DYLOAD 1
-#endif
-
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ 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
-
-/**
- * Flag for workaround of MSVC 2003 optimization bugs
- */
-#if defined(_MSC_VER) && (_MSC_VER < 1400)
-#define U_HAVE_MSVC_2003_OR_EARLIER
-#endif
-
-
-/** @} */
-
-/*===========================================================================*/
-/** @{ Programs used by ICU code                                                 */
-/*===========================================================================*/
-
-#ifndef U_MAKE
-#define U_MAKE  "nmake"
-#define U_MAKE_IS_NMAKE 1
-#endif
-
-/** @} */
-
diff --git a/source/common/unicode/rbbi.h b/source/common/unicode/rbbi.h
deleted file mode 100644
index 90ec6e6..0000000
--- a/source/common/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
diff --git a/source/common/unicode/rep.h b/source/common/unicode/rep.h
deleted file mode 100644
index 3fab6fa..0000000
--- a/source/common/unicode/rep.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
-**************************************************************************
-* Copyright (C) 1999-2005, International Business Machines Corporation and
-* others. All Rights Reserved.
-**************************************************************************
-*   Date        Name        Description
-*   11/17/99    aliu        Creation.  Ported from java.  Modified to
-*                           match current UnicodeString API.  Forced
-*                           to use name "handleReplaceBetween" because
-*                           of existing methods in UnicodeString.
-**************************************************************************
-*/
-
-#ifndef REP_H
-#define REP_H
-
-#include "unicode/uobject.h"
-
-/**
- * \file 
- * \brief C++ API: Replaceable String
- */
- 
-U_NAMESPACE_BEGIN
-
-class UnicodeString;
-
-/**
- * <code>Replaceable</code> is an abstract base class representing a
- * string of characters that supports the replacement of a range of
- * itself with a new string of characters.  It is used by APIs that
- * change a piece of text while retaining metadata.  Metadata is data
- * other than the Unicode characters returned by char32At().  One
- * example of metadata is style attributes; another is an edit
- * history, marking each character with an author and revision number.
- *
- * <p>An implicit aspect of the <code>Replaceable</code> API is that
- * during a replace operation, new characters take on the metadata of
- * the old characters.  For example, if the string "the <b>bold</b>
- * font" has range (4, 8) replaced with "strong", then it becomes "the
- * <b>strong</b> font".
- *
- * <p><code>Replaceable</code> specifies ranges using a start
- * offset and a limit offset.  The range of characters thus specified
- * includes the characters at offset start..limit-1.  That is, the
- * start offset is inclusive, and the limit offset is exclusive.
- *
- * <p><code>Replaceable</code> also includes API to access characters
- * in the string: <code>length()</code>, <code>charAt()</code>,
- * <code>char32At()</code>, and <code>extractBetween()</code>.
- *
- * <p>For a subclass to support metadata, typical behavior of
- * <code>replace()</code> is the following:
- * <ul>
- *   <li>Set the metadata of the new text to the metadata of the first
- *   character replaced</li>
- *   <li>If no characters are replaced, use the metadata of the
- *   previous character</li>
- *   <li>If there is no previous character (i.e. start == 0), use the
- *   following character</li>
- *   <li>If there is no following character (i.e. the replaceable was
- *   empty), use default metadata.<br>
- *   <li>If the code point U+FFFF is seen, it should be interpreted as
- *   a special marker having no metadata<li>
- *   </li>
- * </ul>
- * If this is not the behavior, the subclass should document any differences.
- * @author Alan Liu
- * @stable ICU 2.0
- */
-class U_COMMON_API Replaceable : public UObject {
-
-public:
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~Replaceable();
-
-    /**
-     * Returns the number of 16-bit code units in the text.
-     * @return number of 16-bit code units in text
-     * @stable ICU 1.8
-     */ 
-    inline int32_t length() const;
-
-    /**
-     * Returns the 16-bit code unit at the given offset into the text.
-     * @param offset an integer between 0 and <code>length()</code>-1
-     * inclusive
-     * @return 16-bit code unit of text at given offset
-     * @stable ICU 1.8
-     */
-    inline UChar charAt(int32_t offset) const;
-
-    /**
-     * Returns the 32-bit code point at the given 16-bit offset into
-     * the text.  This assumes the text is stored as 16-bit code units
-     * with surrogate pairs intermixed.  If the offset of a leading or
-     * trailing code unit of a surrogate pair is given, return the
-     * code point of the surrogate pair.
-     *
-     * @param offset an integer between 0 and <code>length()</code>-1
-     * inclusive
-     * @return 32-bit code point of text at given offset
-     * @stable ICU 1.8
-     */
-    inline UChar32 char32At(int32_t offset) const;
-
-    /**
-     * Copies characters in the range [<tt>start</tt>, <tt>limit</tt>) 
-     * into the UnicodeString <tt>target</tt>.
-     * @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.1
-     */
-    virtual void extractBetween(int32_t start,
-                                int32_t limit,
-                                UnicodeString& target) const = 0;
-
-    /**
-     * Replaces a substring of this object with the given text.  If the
-     * characters being replaced have metadata, the new characters
-     * that replace them should be given the same metadata.
-     *
-     * <p>Subclasses must ensure that if the text between start and
-     * limit is equal to the replacement text, that replace has no
-     * effect. That is, any metadata
-     * should be unaffected. In addition, subclasses are encouraged to
-     * check for initial and trailing identical characters, and make a
-     * smaller replacement if possible. This will preserve as much
-     * metadata as possible.
-     * @param start the beginning index, inclusive; <code>0 <= start
-     * <= limit</code>.
-     * @param limit the ending index, exclusive; <code>start <= limit
-     * <= length()</code>.
-     * @param text the text to replace characters <code>start</code>
-     * to <code>limit - 1</code> 
-     * @stable ICU 2.0
-     */
-    virtual void handleReplaceBetween(int32_t start,
-                                      int32_t limit,
-                                      const UnicodeString& text) = 0;
-    // Note: All other methods in this class take the names of
-    // existing UnicodeString methods.  This method is the exception.
-    // It is named differently because all replace methods of
-    // UnicodeString return a UnicodeString&.  The 'between' is
-    // required in order to conform to the UnicodeString naming
-    // convention; API taking start/length are named <operation>, and
-    // those taking start/limit are named <operationBetween>.  The
-    // 'handle' is added because 'replaceBetween' and
-    // 'doReplaceBetween' are already taken.
-
-    /**
-     * Copies a substring of this object, retaining metadata.
-     * This method is used to duplicate or reorder substrings.
-     * The destination index must not overlap the source range.
-     * 
-     * @param start the beginning index, inclusive; <code>0 <= start <=
-     * limit</code>.
-     * @param limit the ending index, exclusive; <code>start <= limit <=
-     * length()</code>.
-     * @param dest the destination index.  The characters from
-     * <code>start..limit-1</code> will be copied to <code>dest</code>.
-     * Implementations of this method may assume that <code>dest <= start ||
-     * dest >= limit</code>.
-     * @stable ICU 2.0
-     */
-    virtual void copy(int32_t start, int32_t limit, int32_t dest) = 0;
-
-    /**
-     * Returns true if this object contains metadata.  If a
-     * Replaceable object has metadata, calls to the Replaceable API
-     * must be made so as to preserve metadata.  If it does not, calls
-     * to the Replaceable API may be optimized to improve performance.
-     * The default implementation returns true.
-     * @return true if this object contains metadata
-     * @stable ICU 2.2
-     */
-    virtual UBool hasMetaData() const;
-
-    /**
-     * Clone this object, an instance of a subclass of Replaceable.
-     * Clones can be used concurrently in multiple threads.
-     * If a subclass does not implement clone(), or if an error occurs,
-     * then NULL is returned.
-     * The clone functions in all subclasses return a pointer to a Replaceable
-     * because some compilers do not support covariant (same-as-this)
-     * return types; cast to the appropriate subclass if necessary.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.6
-     */
-    virtual Replaceable *clone() const;
-
-protected:
-
-    /**
-     * Default constructor.
-     * @stable ICU 2.4
-     */
-    Replaceable();
-
-    /*
-     * Assignment operator not declared. The compiler will provide one
-     * which does nothing since this class does not contain any data members.
-     * API/code coverage may show the assignment operator as present and
-     * untested - ignore.
-     * Subclasses need this assignment operator if they use compiler-provided
-     * assignment operators of their own. An alternative to not declaring one
-     * here would be to declare and empty-implement a protected or public one.
-    Replaceable &Replaceable::operator=(const Replaceable &);
-     */
-
-    /**
-     * Virtual version of length().
-     * @stable ICU 2.4
-     */ 
-    virtual int32_t getLength() const = 0;
-
-    /**
-     * Virtual version of charAt().
-     * @stable ICU 2.4
-     */
-    virtual UChar getCharAt(int32_t offset) const = 0;
-
-    /**
-     * Virtual version of char32At().
-     * @stable ICU 2.4
-     */
-    virtual UChar32 getChar32At(int32_t offset) const = 0;
-};
-
-inline int32_t
-Replaceable::length() const {
-    return getLength();
-}
-
-inline UChar
-Replaceable::charAt(int32_t offset) const {
-    return getCharAt(offset);
-}
-
-inline UChar32
-Replaceable::char32At(int32_t offset) const {
-    return getChar32At(offset);
-}
-
-// There is no rep.cpp, see unistr.cpp for Replaceable function implementations.
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/resbund.h b/source/common/unicode/resbund.h
deleted file mode 100644
index 6d6b991..0000000
--- a/source/common/unicode/resbund.h
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1996-2007, International Business Machines Corporation
-*   and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File resbund.h
-*
-*   CREATED BY
-*       Richard Gillam
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   2/5/97      aliu        Added scanForLocaleInFile.  Added
-*                           constructor which attempts to read resource bundle
-*                           from a specific file, without searching other files.
-*   2/11/97     aliu        Added UErrorCode return values to constructors.  Fixed
-*                           infinite loops in scanForFile and scanForLocale.
-*                           Modified getRawResourceData to not delete storage
-*                           in localeData and resourceData which it doesn't own.
-*                           Added Mac compatibility #ifdefs for tellp() and
-*                           ios::nocreate.
-*   2/18/97     helena      Updated with 100% documentation coverage.
-*   3/13/97     aliu        Rewrote to load in entire resource bundle and store
-*                           it as a Hashtable of ResourceBundleData objects.
-*                           Added state table to govern parsing of files.
-*                           Modified to load locale index out of new file
-*                           distinct from default.txt.
-*   3/25/97     aliu        Modified to support 2-d arrays, needed for timezone
-*                           data. Added support for custom file suffixes.  Again,
-*                           needed to support timezone data.
-*   4/7/97      aliu        Cleaned up.
-* 03/02/99      stephen     Removed dependency on FILE*.
-* 03/29/99      helena      Merged Bertrand and Stephen's changes.
-* 06/11/99      stephen     Removed parsing of .txt files.
-*                           Reworked to use new binary format.
-*                           Cleaned up.
-* 06/14/99      stephen     Removed methods taking a filename suffix.
-* 11/09/99      weiv        Added getLocale(), fRealLocale, removed fRealLocaleID
-******************************************************************************
-*/
-
-#ifndef RESBUND_H
-#define RESBUND_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/ures.h"
-#include "unicode/unistr.h"
-#include "unicode/locid.h"
-
-/**
- * \file 
- * \brief C++ API: Resource Bundle
- */
- 
-U_NAMESPACE_BEGIN
-
-/**
- * A class representing a collection of resource information pertaining to a given
- * locale. A resource bundle provides a way of accessing locale- specfic information in
- * a data file. You create a resource bundle that manages the resources for a given
- * locale and then ask it for individual resources.
- * <P>
- * Resource bundles in ICU4C are currently defined using text files which conform to the following
- * <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt">BNF definition</a>.
- * More on resource bundle concepts and syntax can be found in the
- * <a href="http://icu-project.org/userguide/ResourceManagement.html">Users Guide</a>.
- * <P>
- *
- * The ResourceBundle class is not suitable for subclassing.
- *
- * @stable ICU 2.0
- */
-class U_COMMON_API ResourceBundle : public UObject {
-public:
-    /**
-     * Constructor
-     *
-     * @param packageName   The packageName and locale together point to an ICU udata object, 
-     *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
-     *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
-     *                      a package registered with udata_setAppData(). Using a full file or directory
-     *                      pathname for packageName is deprecated.
-     * @param locale  This is the locale this resource bundle is for. To get resources
-     *                for the French locale, for example, you would create a
-     *                ResourceBundle passing Locale::FRENCH for the "locale" parameter,
-     *                and all subsequent calls to that resource bundle will return
-     *                resources that pertain to the French locale. If the caller doesn't
-     *                pass a locale parameter, the default locale for the system (as
-     *                returned by Locale::getDefault()) will be used.
-     * @param err     The Error Code.
-     * 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_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.
-     * @stable ICU 2.0
-     */
-    ResourceBundle(const UnicodeString&    packageName,
-                   const Locale&           locale,
-                   UErrorCode&              err);
-
-    /**
-     * Construct a resource bundle for the default bundle in the specified package.
-     *
-     * @param packageName   The packageName and locale together point to an ICU udata object, 
-     *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
-     *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
-     *                      a package registered with udata_setAppData(). Using a full file or directory
-     *                      pathname for packageName is deprecated.
-     * @param err A UErrorCode value
-     * @stable ICU 2.0
-     */
-    ResourceBundle(const UnicodeString&    packageName,
-                   UErrorCode&              err);
-
-    /**
-     * Construct a resource bundle for the ICU default bundle.
-     *
-     * @param err A UErrorCode value
-     * @stable ICU 2.0
-     */
-    ResourceBundle(UErrorCode &err);
-
-    /**
-     * Standard constructor, onstructs a resource bundle for the locale-specific
-     * bundle in the specified package.
-     *
-     * @param packageName   The packageName and locale together point to an ICU udata object, 
-     *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
-     *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
-     *                      a package registered with udata_setAppData(). Using a full file or directory
-     *                      pathname for packageName is deprecated.
-     *                      NULL is used to refer to ICU data.
-     * @param locale The locale for which to open a resource bundle.
-     * @param err A UErrorCode value
-     * @stable ICU 2.0
-     */
-    ResourceBundle(const char* packageName,
-                   const Locale& locale,
-                   UErrorCode& err);
-
-    /**
-     * Copy constructor.
-     *
-     * @param original The resource bundle to copy.
-     * @stable ICU 2.0
-     */
-    ResourceBundle(const ResourceBundle &original);
-
-    /**
-     * Constructor from a C UResourceBundle. The resource bundle is
-     * copied and not adopted. ures_close will still need to be used on the
-     * original resource bundle.
-     *
-     * @param res A pointer to the C resource bundle.
-     * @param status A UErrorCode value.
-     * @stable ICU 2.0
-     */
-    ResourceBundle(UResourceBundle *res,
-                   UErrorCode &status);
-
-    /**
-     * Assignment operator.
-     *
-     * @param other The resource bundle to copy.
-     * @stable ICU 2.0
-     */
-    ResourceBundle&
-      operator=(const ResourceBundle& other);
-
-    /** Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~ResourceBundle();
-
-    /**
-     * Clone this object.
-     * Clones can be used concurrently in multiple threads.
-     * If an error occurs, then NULL is returned.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    ResourceBundle *clone() const;
-
-    /**
-     * Returns the size of a resource. Size for scalar types is always 1, and for vector/table types is
-     * the number of child resources.
-     * @warning Integer array is treated as a scalar type. There are no
-     *          APIs to access individual members of an integer array. It
-     *          is always returned as a whole.
-     *
-     * @return number of resources in a given resource.
-     * @stable ICU 2.0
-     */
-    int32_t
-      getSize(void) const;
-
-    /**
-     * returns a string from a string resource type
-     *
-     * @param status  fills in the outgoing error code
-     *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
-     *                could be a warning
-     *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
-     * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
-     * @stable ICU 2.0
-     */
-    UnicodeString
-      getString(UErrorCode& status) const;
-
-    /**
-     * returns a binary data from a resource. Can be used at most primitive resource types (binaries,
-     * strings, ints)
-     *
-     * @param len     fills in the length of resulting byte chunk
-     * @param status  fills in the outgoing error code
-     *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
-     *                could be a warning
-     *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
-     * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file.
-     * @stable ICU 2.0
-     */
-    const uint8_t*
-      getBinary(int32_t& len, UErrorCode& status) const;
-
-
-    /**
-     * returns an integer vector from a resource.
-     *
-     * @param len     fills in the length of resulting integer vector
-     * @param status  fills in the outgoing error code
-     *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
-     *                could be a warning
-     *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
-     * @return a pointer to a vector of integers that lives in a memory mapped/DLL file.
-     * @stable ICU 2.0
-     */
-    const int32_t*
-      getIntVector(int32_t& len, UErrorCode& status) const;
-
-    /**
-     * returns an unsigned integer from a resource.
-     * This integer is originally 28 bits.
-     *
-     * @param status  fills in the outgoing error code
-     *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
-     *                could be a warning
-     *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
-     * @return an unsigned integer value
-     * @stable ICU 2.0
-     */
-    uint32_t
-      getUInt(UErrorCode& status) const;
-
-    /**
-     * returns a signed integer from a resource.
-     * This integer is originally 28 bit and the sign gets propagated.
-     *
-     * @param status  fills in the outgoing error code
-     *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
-     *                could be a warning
-     *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
-     * @return a signed integer value
-     * @stable ICU 2.0
-     */
-    int32_t
-      getInt(UErrorCode& status) const;
-
-    /**
-     * Checks whether the resource has another element to iterate over.
-     *
-     * @return TRUE if there are more elements, FALSE if there is no more elements
-     * @stable ICU 2.0
-     */
-    UBool
-      hasNext(void) const;
-
-    /**
-     * Resets the internal context of a resource so that iteration starts from the first element.
-     *
-     * @stable ICU 2.0
-     */
-    void
-      resetIterator(void);
-
-    /**
-     * Returns the key associated with this resource. Not all the resources have a key - only
-     * those that are members of a table.
-     *
-     * @return a key associated to this resource, or NULL if it doesn't have a key
-     * @stable ICU 2.0
-     */
-    const char*
-      getKey(void) const;
-
-    /**
-     * Gets the locale ID of the resource bundle as a string.
-     * Same as getLocale().getName() .
-     *
-     * @return the locale ID of the resource bundle as a string
-     * @stable ICU 2.0
-     */
-    const char*
-      getName(void) const;
-
-
-    /**
-     * Returns the type of a resource. Available types are defined in enum UResType
-     *
-     * @return type of the given resource.
-     * @stable ICU 2.0
-     */
-    UResType
-      getType(void) const;
-
-    /**
-     * Returns the next resource in a given resource or NULL if there are no more resources
-     *
-     * @param status            fills in the outgoing error code
-     * @return                  ResourceBundle object.
-     * @stable ICU 2.0
-     */
-    ResourceBundle
-      getNext(UErrorCode& status);
-
-    /**
-     * Returns the next string in a resource or NULL if there are no more resources
-     * to iterate over.
-     *
-     * @param status            fills in the outgoing error code
-     * @return an UnicodeString object.
-     * @stable ICU 2.0
-     */
-    UnicodeString
-      getNextString(UErrorCode& status);
-
-    /**
-     * Returns the next string in a resource or NULL if there are no more resources
-     * to iterate over.
-     *
-     * @param key               fill in for key associated with this string
-     * @param status            fills in the outgoing error code
-     * @return an UnicodeString object.
-     * @stable ICU 2.0
-     */
-    UnicodeString
-      getNextString(const char ** key,
-                    UErrorCode& status);
-
-    /**
-     * Returns the resource in a resource at the specified index.
-     *
-     * @param index             an index to the wanted resource.
-     * @param status            fills in the outgoing error code
-     * @return                  ResourceBundle object. If there is an error, resource is invalid.
-     * @stable ICU 2.0
-     */
-    ResourceBundle
-      get(int32_t index,
-          UErrorCode& status) const;
-
-    /**
-     * Returns the string in a given resource at the specified index.
-     *
-     * @param index             an index to the wanted string.
-     * @param status            fills in the outgoing error code
-     * @return                  an UnicodeString object. If there is an error, string is bogus
-     * @stable ICU 2.0
-     */
-    UnicodeString
-      getStringEx(int32_t index,
-                  UErrorCode& status) const;
-
-    /**
-     * Returns a resource in a resource that has a given key. This procedure works only with table
-     * resources.
-     *
-     * @param key               a key associated with the wanted resource
-     * @param status            fills in the outgoing error code.
-     * @return                  ResourceBundle object. If there is an error, resource is invalid.
-     * @stable ICU 2.0
-     */
-    ResourceBundle
-      get(const char* key,
-          UErrorCode& status) const;
-
-    /**
-     * Returns a string in a resource that has a given key. This procedure works only with table
-     * resources.
-     *
-     * @param key               a key associated with the wanted string
-     * @param status            fills in the outgoing error code
-     * @return                  an UnicodeString object. If there is an error, string is bogus
-     * @stable ICU 2.0
-     */
-    UnicodeString
-      getStringEx(const char* key,
-                  UErrorCode& status) const;
-
-    /**
-     * Return the version number associated with this ResourceBundle as a string. Please
-     * use getVersion, as this method is going to be deprecated.
-     *
-     * @return  A version number string as specified in the resource bundle or its parent.
-     *          The caller does not own this string.
-     * @see getVersion
-     * @deprecated ICU 2.8 Use getVersion instead.
-     */
-    const char*
-      getVersionNumber(void) const;
-
-    /**
-     * Return the version number associated with this ResourceBundle as a UVersionInfo array.
-     *
-     * @param versionInfo A UVersionInfo array that is filled with the version number
-     *                    as specified in the resource bundle or its parent.
-     * @stable ICU 2.0
-     */
-    void
-      getVersion(UVersionInfo versionInfo) const;
-
-    /**
-     * Return the Locale associated with this ResourceBundle.
-     *
-     * @return a Locale object
-     * @deprecated ICU 2.8 Use getLocale(ULocDataLocaleType type, UErrorCode &status) overload instead.
-     */
-    const Locale&
-      getLocale(void) const;
-
-    /**
-     * Return the Locale associated with this ResourceBundle.
-     * @param type You can choose between requested, valid and actual
-     *             locale. For description see the definition of
-     *             ULocDataLocaleType in uloc.h
-     * @param status just for catching illegal arguments
-     *
-     * @return a Locale object
-     * @stable ICU 2.8
-     */
-    const Locale
-      getLocale(ULocDataLocaleType type, UErrorCode &status) const;
-    /**
-     * This API implements multilevel fallback
-     * @internal
-     */
-    ResourceBundle
-        getWithFallback(const char* key, UErrorCode& status);
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-    ResourceBundle(); // default constructor not implemented
-
-    UResourceBundle *fResource;
-    void constructForLocale(const UnicodeString& path, const Locale& locale, UErrorCode& error);
-    Locale *fLocale;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/source/common/unicode/schriter.h b/source/common/unicode/schriter.h
deleted file mode 100644
index d0b5e22..0000000
--- a/source/common/unicode/schriter.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1998-2005, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File schriter.h
-*
-* Modification History:
-*
-*   Date        Name        Description
-*  05/05/99     stephen     Cleaned up.
-******************************************************************************
-*/
-
-#ifndef SCHRITER_H
-#define SCHRITER_H
-
-#include "unicode/utypes.h"
-#include "unicode/chariter.h"
-#include "unicode/uchriter.h"
-
-/**
- * \file 
- * \brief C++ API: String Character Iterator
- */
- 
-U_NAMESPACE_BEGIN
-/**
- * A concrete subclass of CharacterIterator that iterates over the
- * characters (code units or code points) in a UnicodeString.
- * It's possible not only to create an
- * iterator that iterates over an entire UnicodeString, but also to
- * create one that iterates over only a subrange of a UnicodeString
- * (iterators over different subranges of the same UnicodeString don't
- * compare equal).
- * @see CharacterIterator
- * @see ForwardCharacterIterator
- * @stable ICU 2.0
- */
-class U_COMMON_API StringCharacterIterator : public UCharCharacterIterator {
-public:
-  /**
-   * Create an iterator over the UnicodeString referred to by "textStr".
-   * The UnicodeString object is copied.
-   * The iteration range is the whole string, and the starting position is 0.
-   * @param textStr The unicode string used to create an iterator
-   * @stable ICU 2.0
-   */
-  StringCharacterIterator(const UnicodeString& textStr);
-
-  /**
-   * Create an iterator over the UnicodeString referred to by "textStr".
-   * The iteration range is the whole string, and the starting
-   * position is specified by "textPos".  If "textPos" is outside the valid
-   * iteration range, the behavior of this object is undefined.
-   * @param textStr The unicode string used to create an iterator
-   * @param textPos The starting position of the iteration
-   * @stable ICU 2.0
-   */
-  StringCharacterIterator(const UnicodeString&    textStr,
-              int32_t              textPos);
-
-  /**
-   * Create an iterator over the UnicodeString referred to by "textStr".
-   * The UnicodeString object is copied.
-   * The iteration range begins with the code unit specified by
-   * "textBegin" and ends with the code unit BEFORE the code unit specfied
-   * by "textEnd".  The starting position is specified by "textPos".  If
-   * "textBegin" and "textEnd" don't form a valid range on "text" (i.e.,
-   * textBegin >= textEnd or either is negative or greater than text.size()),
-   * or "textPos" is outside the range defined by "textBegin" and "textEnd",
-   * the behavior of this iterator is undefined.
-   * @param textStr    The unicode string used to create the StringCharacterIterator
-   * @param textBegin  The begin position of the iteration range
-   * @param textEnd    The end position of the iteration range
-   * @param textPos    The starting position of the iteration
-   * @stable ICU 2.0
-   */
-  StringCharacterIterator(const UnicodeString&    textStr,
-              int32_t              textBegin,
-              int32_t              textEnd,
-              int32_t              textPos);
-
-  /**
-   * 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.
-   * The UnicodeString object in "that" is copied.
-   * @param that The StringCharacterIterator to be copied
-   * @stable ICU 2.0
-   */
-  StringCharacterIterator(const StringCharacterIterator&  that);
-
-  /**
-   * Destructor.
-   * @stable ICU 2.0
-   */
-  virtual ~StringCharacterIterator();
-
-  /**
-   * Assignment operator.  *this is altered to iterate over the same
-   * 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
-   */
-  StringCharacterIterator&
-  operator=(const StringCharacterIterator&    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 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;
-
-  /**
-   * Returns a new StringCharacterIterator 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 newly cloned object.
-   * @stable ICU 2.0
-   */
-  virtual CharacterIterator* clone(void) const;
-
-  /**
-   * Sets the iterator to iterate over the provided string.
-   * @param newText The string to be iterated over
-   * @stable ICU 2.0
-   */
-  void setText(const UnicodeString& newText);
-
-  /**
-   * Copies the UnicodeString 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 object (not really public)
-   * @return a class ID for this object.
-   * @stable ICU 2.0
-   */
-  virtual UClassID         getDynamicClassID(void) const;
-
-  /**
-   * 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);
-
-protected:
-  /**
-   * Default constructor, iteration over empty string.
-   * @stable ICU 2.0
-   */
-  StringCharacterIterator();
-
-  /**
-   * Sets the iterator to iterate over the provided string.
-   * @param newText The string to be iterated over
-   * @param newTextLength The length of the String
-   * @stable ICU 2.0
-   */
-  void setText(const UChar* newText, int32_t newTextLength);
-
-  /**
-   * Copy of the iterated string object.
-   * @stable ICU 2.0
-   */
-  UnicodeString            text;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/source/common/unicode/std_string.h b/source/common/unicode/std_string.h
deleted file mode 100644
index dd43b74..0000000
--- a/source/common/unicode/std_string.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  std_string.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009feb19
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __STD_STRING_H__
-#define __STD_STRING_H__
-
-/**
- * \file 
- * \brief C++ API: Central ICU header for including the C++ standard &lt;string&gt;
- *                 header and for related definitions.
- */
-
-#include "unicode/utypes.h"
-
-/**
- * \def U_HAVE_STD_STRING
- * Define whether the standard C++ (STL) &lt;string&gt; header is available.
- * @internal
- */
-#ifndef U_HAVE_STD_STRING
-#define U_HAVE_STD_STRING 1
-#endif
-
-#if U_HAVE_STD_STRING
-
-#include <string>
-
-/**
- * \def U_STD_NS
- * Define the namespace to use for standard C++ (STL) classes.
- * Either std or empty.
- * @draft ICU 4.2
- */
-
-/**
- * \def U_STD_NSQ
- * Define the namespace qualifier to use for standard C++ (STL) classes.
- * Either std:: or empty.
- * For example,
- *   U_STD_NSQ string StringFromUnicodeString(const UnicodeString &unistr);
- * @draft ICU 4.2
- */
-
-/**
- * \def U_STD_NS_USE
- * This is used to specify that the rest of the code uses the
- * standard (STL) namespace.
- * Either "using namespace std;" or empty.
- * @draft ICU 4.2
- */
-#ifndef U_STD_NSQ
-#   if U_HAVE_NAMESPACE
-#       define U_STD_NS std
-#       define U_STD_NSQ U_STD_NS::
-#       define U_STD_NS_USE using namespace U_STD_NS;
-#   else
-#       define U_STD_NS
-#       define U_STD_NSQ
-#       define U_STD_NS_USE
-#   endif
-#endif
-
-#endif  // U_HAVE_STD_STRING
-
-#endif  // __STD_STRING_H__
diff --git a/source/common/unicode/strenum.h b/source/common/unicode/strenum.h
deleted file mode 100644
index ce42195..0000000
--- a/source/common/unicode/strenum.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2007, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*/
-
-#ifndef STRENUM_H
-#define STRENUM_H
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-
-/**
- * \file 
- * \brief C++ API: String Enumeration
- */
- 
-U_NAMESPACE_BEGIN
-
-/**
- * Base class for 'pure' C++ implementations of uenum api.  Adds a
- * method that returns the next UnicodeString since in C++ this can
- * be a common storage format for strings.
- *
- * <p>The model is that the enumeration is over strings maintained by
- * a 'service.'  At any point, the service might change, invalidating
- * the enumerator (though this is expected to be rare).  The iterator
- * returns an error if this has occurred.  Lack of the error is no
- * guarantee that the service didn't change immediately after the
- * call, so the returned string still might not be 'valid' on
- * subsequent use.</p>
- *
- * <p>Strings may take the form of const char*, const UChar*, or const
- * UnicodeString*.  The type you get is determine by the variant of
- * 'next' that you call.  In general the StringEnumeration is
- * optimized for one of these types, but all StringEnumerations can
- * return all types.  Returned strings are each terminated with a NUL.
- * Depending on the service data, they might also include embedded NUL
- * characters, so API is provided to optionally return the true
- * length, counting the embedded NULs but not counting the terminating
- * NUL.</p>
- *
- * <p>The pointers returned by next, unext, and snext become invalid
- * upon any subsequent call to the enumeration's destructor, next,
- * unext, snext, or reset.</p>
- *
- * ICU 2.8 adds some default implementations and helper functions
- * for subclasses.
- *
- * @stable ICU 2.4 
- */
-class U_COMMON_API StringEnumeration : public UObject { 
-public:
-    /**
-     * Destructor.
-     * @stable ICU 2.4
-     */
-    virtual ~StringEnumeration();
-
-    /**
-     * Clone this object, an instance of a subclass of StringEnumeration.
-     * Clones can be used concurrently in multiple threads.
-     * If a subclass does not implement clone(), or if an error occurs,
-     * then NULL is returned.
-     * The clone functions in all subclasses return a base class pointer
-     * because some compilers do not support covariant (same-as-this)
-     * return types; cast to the appropriate subclass if necessary.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    virtual StringEnumeration *clone() const;
-
-    /**
-     * <p>Return the number of elements that the iterator traverses.  If
-     * the iterator is out of sync with its service, status is set to
-     * U_ENUM_OUT_OF_SYNC_ERROR, and the return value is zero.</p>
-     *
-     * <p>The return value will not change except possibly as a result of
-     * a subsequent call to reset, or if the iterator becomes out of sync.</p>
-     *
-     * <p>This is a convenience function. It can end up being very
-     * expensive as all the items might have to be pre-fetched
-     * (depending on the storage format of the data being
-     * traversed).</p>
-     *
-     * @param status the error code.
-     * @return number of elements in the iterator.
-     *
-     * @stable ICU 2.4 */
-    virtual int32_t count(UErrorCode& status) const = 0;
-
-    /**
-     * <p>Returns the next element as a NUL-terminated char*.  If there
-     * are no more elements, returns NULL.  If the resultLength pointer
-     * is not NULL, the length of the string (not counting the
-     * terminating NUL) is returned at that address.  If an error
-     * status is returned, the value at resultLength is undefined.</p>
-     *
-     * <p>The returned pointer is owned by this iterator and must not be
-     * deleted by the caller.  The pointer is valid until the next call
-     * to next, unext, snext, reset, or the enumerator's destructor.</p>
-     *
-     * <p>If the iterator is out of sync with its service, status is set
-     * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p>
-     *
-     * <p>If the native service string is a UChar* string, it is
-     * converted to char* with the invariant converter.  If the
-     * conversion fails (because a character cannot be converted) then
-     * status is set to U_INVARIANT_CONVERSION_ERROR and the return
-     * value is undefined (though not NULL).</p>
-     *
-     * Starting with ICU 2.8, the default implementation calls snext()
-     * and handles the conversion.
-     *
-     * @param status the error code.
-     * @param resultLength a pointer to receive the length, can be NULL.
-     * @return a pointer to the string, or NULL.
-     *
-     * @stable ICU 2.4 
-     */
-    virtual const char* next(int32_t *resultLength, UErrorCode& status);
-
-    /**
-     * <p>Returns the next element as a NUL-terminated UChar*.  If there
-     * are no more elements, returns NULL.  If the resultLength pointer
-     * is not NULL, the length of the string (not counting the
-     * terminating NUL) is returned at that address.  If an error
-     * status is returned, the value at resultLength is undefined.</p>
-     *
-     * <p>The returned pointer is owned by this iterator and must not be
-     * deleted by the caller.  The pointer is valid until the next call
-     * to next, unext, snext, reset, or the enumerator's destructor.</p>
-     *
-     * <p>If the iterator is out of sync with its service, status is set
-     * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p>
-     *
-     * Starting with ICU 2.8, the default implementation calls snext()
-     * and handles the conversion.
-     *
-     * @param status the error code.
-     * @param resultLength a ponter to receive the length, can be NULL.
-     * @return a pointer to the string, or NULL.
-     *
-     * @stable ICU 2.4 
-     */
-    virtual const UChar* unext(int32_t *resultLength, UErrorCode& status);
-
-    /**
-     * <p>Returns the next element a UnicodeString*.  If there are no
-     * more elements, returns NULL.</p>
-     *
-     * <p>The returned pointer is owned by this iterator and must not be
-     * deleted by the caller.  The pointer is valid until the next call
-     * to next, unext, snext, reset, or the enumerator's destructor.</p>
-     *
-     * <p>If the iterator is out of sync with its service, status is set
-     * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p>
-     *
-     * @param status the error code.
-     * @return a pointer to the string, or NULL.
-     *
-     * @stable ICU 2.4 
-     */
-    virtual const UnicodeString* snext(UErrorCode& status) = 0;
-
-    /**
-     * <p>Resets the iterator.  This re-establishes sync with the
-     * service and rewinds the iterator to start at the first
-     * element.</p>
-     *
-     * <p>Previous pointers returned by next, unext, or snext become
-     * invalid, and the value returned by count might change.</p>
-     *
-     * @param status the error code.
-     *
-     * @stable ICU 2.4 
-     */
-    virtual void reset(UErrorCode& status) = 0;
-
-    /**
-     * Compares this enumeration to other to check if both are equal
-     *
-     * @param that The other string enumeration to compare this object to
-     * @return TRUE if the enumerations are equal. FALSE if not.
-     * @stable ICU 3.6 
-     */
-    virtual UBool operator==(const StringEnumeration& that)const;
-    /**
-     * Compares this enumeration to other to check if both are not equal
-     *
-     * @param that The other string enumeration to compare this object to
-     * @return TRUE if the enumerations are equal. FALSE if not.
-     * @stable ICU 3.6 
-     */
-    virtual UBool operator!=(const StringEnumeration& that)const;
-
-protected:
-    /**
-     * UnicodeString field for use with default implementations and subclasses.
-     * @stable ICU 2.8
-     */
-    UnicodeString unistr;
-    /**
-     * char * default buffer for use with default implementations and subclasses.
-     * @stable ICU 2.8
-     */
-    char charsBuffer[32];
-    /**
-     * char * buffer for use with default implementations and subclasses.
-     * Allocated in constructor and in ensureCharsCapacity().
-     * @stable ICU 2.8
-     */
-    char *chars;
-    /**
-     * Capacity of chars, for use with default implementations and subclasses.
-     * @stable ICU 2.8
-     */
-    int32_t charsCapacity;
-
-    /**
-     * Default constructor for use with default implementations and subclasses.
-     * @stable ICU 2.8
-     */
-    StringEnumeration();
-
-    /**
-     * Ensures that chars is at least as large as the requested capacity.
-     * For use with default implementations and subclasses.
-     *
-     * @param capacity Requested capacity.
-     * @param status ICU in/out error code.
-     * @stable ICU 2.8
-     */
-    void ensureCharsCapacity(int32_t capacity, UErrorCode &status);
-
-    /**
-     * Converts s to Unicode and sets unistr to the result.
-     * For use with default implementations and subclasses,
-     * especially for implementations of snext() in terms of next().
-     * This is provided with a helper function instead of a default implementation
-     * of snext() to avoid potential infinite loops between next() and snext().
-     *
-     * For example:
-     * \code
-     * const UnicodeString* snext(UErrorCode& status) {
-     *   int32_t resultLength=0;
-     *   const char *s=next(&resultLength, status);
-     *   return setChars(s, resultLength, status);
-     * }
-     * \endcode
-     *
-     * @param s String to be converted to Unicode.
-     * @param length Length of the string.
-     * @param status ICU in/out error code.
-     * @return A pointer to unistr.
-     * @stable ICU 2.8
-     */
-    UnicodeString *setChars(const char *s, int32_t length, UErrorCode &status);
-};
-
-U_NAMESPACE_END
-
-/* STRENUM_H */
-#endif
diff --git a/source/common/unicode/stringpiece.h b/source/common/unicode/stringpiece.h
deleted file mode 100644
index 79d5a05..0000000
--- a/source/common/unicode/stringpiece.h
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright (C) 2010, International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-// Copyright 2001 and onwards Google Inc.
-// Author: Sanjay Ghemawat
-
-// This code is a contribution of Google code, and the style used here is
-// a compromise between the original Google code and the ICU coding guidelines.
-// For example, data types are ICU-ified (size_t,int->int32_t),
-// and API comments doxygen-ified, but function names and behavior are
-// as in the original, if possible.
-// Assertion-style error handling, not available in ICU, was changed to
-// parameter "pinning" similar to UnicodeString.
-//
-// In addition, this is only a partial port of the original Google code,
-// limited to what was needed so far. The (nearly) complete original code
-// is in the ICU svn repository at icuhtml/trunk/design/strings/contrib
-// (see ICU ticket 6765, r25517).
-
-#ifndef __STRINGPIECE_H__
-#define __STRINGPIECE_H__
-
-/**
- * \file 
- * \brief C++ API: StringPiece: Read-only byte string wrapper class.
- */
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/std_string.h"
-
-// Arghh!  I wish C++ literals were "string".
-
-U_NAMESPACE_BEGIN
-
-/**
- * A string-like object that points to a sized piece of memory.
- *
- * We provide non-explicit singleton constructors so users can pass
- * in a "const char*" or a "string" wherever a "StringPiece" is
- * expected.
- *
- * Functions or methods may use const StringPiece& parameters to accept either
- * a "const char*" or a "string" value that will be implicitly converted to
- * a StringPiece.
- *
- * Systematic usage of StringPiece is encouraged as it will reduce unnecessary
- * conversions from "const char*" to "string" and back again.
- *
- * @stable ICU 4.2
- */
-class U_COMMON_API StringPiece : public UMemory {
- private:
-  const char*   ptr_;
-  int32_t       length_;
-
- public:
-  /**
-   * Default constructor, creates an empty StringPiece.
-   * @stable ICU 4.2
-   */
-  StringPiece() : ptr_(NULL), length_(0) { }
-  /**
-   * Constructs from a NUL-terminated const char * pointer.
-   * @param str a NUL-terminated const char * pointer
-   * @stable ICU 4.2
-   */
-  StringPiece(const char* str);
-#if U_HAVE_STD_STRING
-  /**
-   * Constructs from a std::string.
-   * @stable ICU 4.2
-   */
-  StringPiece(const U_STD_NSQ string& str)
-    : ptr_(str.data()), length_(static_cast<int32_t>(str.size())) { }
-#endif
-  /**
-   * Constructs from a const char * pointer and a specified length.
-   * @param offset a const char * pointer (need not be terminated)
-   * @param len the length of the string; must be non-negative
-   * @stable ICU 4.2
-   */
-  StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { }
-  /**
-   * Substring of another StringPiece.
-   * @param x the other StringPiece
-   * @param pos start position in x; must be non-negative and <= x.length().
-   * @stable ICU 4.2
-   */
-  StringPiece(const StringPiece& x, int32_t pos);
-  /**
-   * Substring of another StringPiece.
-   * @param x the other StringPiece
-   * @param pos start position in x; must be non-negative and <= x.length().
-   * @param len length of the substring;
-   *            must be non-negative and will be pinned to at most x.length() - pos.
-   * @stable ICU 4.2
-   */
-  StringPiece(const StringPiece& x, int32_t pos, int32_t len);
-
-  /**
-   * Returns the string pointer. May be NULL if it is empty.
-   *
-   * data() may return a pointer to a buffer with embedded NULs, and the
-   * returned buffer may or may not be null terminated.  Therefore it is
-   * typically a mistake to pass data() to a routine that expects a NUL
-   * terminated string.
-   * @return the string pointer
-   * @stable ICU 4.2
-   */
-  const char* data() const { return ptr_; }
-  /**
-   * Returns the string length. Same as length().
-   * @return the string length
-   * @stable ICU 4.2
-   */
-  int32_t size() const { return length_; }
-  /**
-   * Returns the string length. Same as size().
-   * @return the string length
-   * @stable ICU 4.2
-   */
-  int32_t length() const { return length_; }
-  /**
-   * Returns whether the string is empty.
-   * @return TRUE if the string is empty
-   * @stable ICU 4.2
-   */
-  UBool empty() const { return length_ == 0; }
-
-  /**
-   * Sets to an empty string.
-   * @stable ICU 4.2
-   */
-  void clear() { ptr_ = NULL; length_ = 0; }
-
-  /**
-   * Reset the stringpiece to refer to new data.
-   * @param data pointer the new string data.  Need not be nul terminated.
-   * @param len the length of the new data
-   * @internal
-   */
-  void set(const char* data, int32_t len) { ptr_ = data; length_ = len; }
-
-  /**
-   * Reset the stringpiece to refer to new data.
-   * @param str a pointer to a NUL-terminated string. 
-   * @internal
-   */
-  void set(const char* str);
-
-  /**
-   * Removes the first n string units.
-   * @param n prefix length, must be non-negative and <=length()
-   * @stable ICU 4.2
-   */
-  void remove_prefix(int32_t n) {
-    if (n >= 0) {
-      if (n > length_) {
-        n = length_;
-      }
-      ptr_ += n;
-      length_ -= n;
-    }
-  }
-
-  /**
-   * Removes the last n string units.
-   * @param n suffix length, must be non-negative and <=length()
-   * @stable ICU 4.2
-   */
-  void remove_suffix(int32_t n) {
-    if (n >= 0) {
-      if (n <= length_) {
-        length_ -= n;
-      } else {
-        length_ = 0;
-      }
-    }
-  }
-
-  /**
-   * Maximum integer, used as a default value for substring methods.
-   * @stable ICU 4.2
-   */
-  static const int32_t npos = 0x7fffffff;
-
-  /**
-   * Returns a substring of this StringPiece.
-   * @param pos start position; must be non-negative and <= length().
-   * @param len length of the substring;
-   *            must be non-negative and will be pinned to at most length() - pos.
-   * @return the substring StringPiece
-   * @stable ICU 4.2
-   */
-  StringPiece substr(int32_t pos, int32_t len = npos) const {
-    return StringPiece(*this, pos, len);
-  }
-};
-
-/**
- * Global operator == for StringPiece
- * @param x The first StringPiece to compare.
- * @param y The second StringPiece to compare.
- * @return TRUE if the string data is equal
- * @internal
- */
-U_EXPORT UBool U_EXPORT2 
-operator==(const StringPiece& x, const StringPiece& y);
-
-/**
- * Global operator != for StringPiece
- * @param x The first StringPiece to compare.
- * @param y The second StringPiece to compare.
- * @return TRUE if the string data is not equal
- * @internal
- */
-inline UBool operator!=(const StringPiece& x, const StringPiece& y) {
-  return !(x == y);
-}
-
-U_NAMESPACE_END
-
-#endif  // __STRINGPIECE_H__
diff --git a/source/common/unicode/symtable.h b/source/common/unicode/symtable.h
deleted file mode 100644
index 428f8bf..0000000
--- a/source/common/unicode/symtable.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (c) 2000-2005, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   02/04/00    aliu        Creation.
-**********************************************************************
-*/
-#ifndef SYMTABLE_H
-#define SYMTABLE_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
-/**
- * \file 
- * \brief C++ API: An interface that defines both lookup protocol and parsing of
- * symbolic names.
- */
- 
-U_NAMESPACE_BEGIN
-
-class ParsePosition;
-class UnicodeFunctor;
-class UnicodeSet;
-class UnicodeString;
-
-/**
- * An interface that defines both lookup protocol and parsing of
- * symbolic names.
- *
- * <p>A symbol table maintains two kinds of mappings.  The first is
- * between symbolic names and their values.  For example, if the
- * variable with the name "start" is set to the value "alpha"
- * (perhaps, though not necessarily, through an expression such as
- * "$start=alpha"), then the call lookup("start") will return the
- * char[] array ['a', 'l', 'p', 'h', 'a'].
- *
- * <p>The second kind of mapping is between character values and
- * UnicodeMatcher objects.  This is used by RuleBasedTransliterator,
- * which uses characters in the private use area to represent objects
- * such as UnicodeSets.  If U+E015 is mapped to the UnicodeSet [a-z],
- * then lookupMatcher(0xE015) will return the UnicodeSet [a-z].
- *
- * <p>Finally, a symbol table defines parsing behavior for symbolic
- * names.  All symbolic names start with the SYMBOL_REF character.
- * When a parser encounters this character, it calls parseReference()
- * with the position immediately following the SYMBOL_REF.  The symbol
- * table parses the name, if there is one, and returns it.
- *
- * @stable ICU 2.8
- */
-class U_COMMON_API SymbolTable /* not : public UObject because this is an interface/mixin class */ {
-public:
-
-    /**
-     * The character preceding a symbol reference name.
-     * @stable ICU 2.8
-     */
-    enum { SYMBOL_REF = 0x0024 /*$*/ };
-
-    /**
-     * Destructor.
-     * @stable ICU 2.8
-     */
-    virtual ~SymbolTable();
-
-    /**
-     * Lookup the characters associated with this string and return it.
-     * Return <tt>NULL</tt> if no such name exists.  The resultant
-     * string may have length zero.
-     * @param s the symbolic name to lookup
-     * @return a string containing the name's value, or <tt>NULL</tt> if
-     * there is no mapping for s.
-     * @stable ICU 2.8
-     */
-    virtual const UnicodeString* lookup(const UnicodeString& s) const = 0;
-
-    /**
-     * Lookup the UnicodeMatcher associated with the given character, and
-     * return it.  Return <tt>NULL</tt> if not found.
-     * @param ch a 32-bit code point from 0 to 0x10FFFF inclusive.
-     * @return the UnicodeMatcher object represented by the given
-     * character, or NULL if there is no mapping for ch.
-     * @stable ICU 2.8
-     */
-    virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const = 0;
-
-    /**
-     * Parse a symbol reference name from the given string, starting
-     * at the given position.  If no valid symbol reference name is
-     * found, return the empty string and leave pos unchanged.  That is, if the
-     * character at pos cannot start a name, or if pos is at or after
-     * text.length(), then return an empty string.  This indicates an
-     * isolated SYMBOL_REF character.
-     * @param text the text to parse for the name
-     * @param pos on entry, the index of the first character to parse.
-     * This is the character following the SYMBOL_REF character.  On
-     * exit, the index after the last parsed character.  If the parse
-     * failed, pos is unchanged on exit.
-     * @param limit the index after the last character to be parsed.
-     * @return the parsed name, or an empty string if there is no
-     * valid symbolic name at the given position.
-     * @stable ICU 2.8
-     */
-    virtual UnicodeString parseReference(const UnicodeString& text,
-                                         ParsePosition& pos, int32_t limit) const = 0;
-};
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/ubidi.h b/source/common/unicode/ubidi.h
deleted file mode 100644
index 1cef221..0000000
--- a/source/common/unicode/ubidi.h
+++ /dev/null
@@ -1,2096 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  ubidi.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999jul27
-*   created by: Markus W. Scherer, updated by Matitiahu Allouche
-*/
-
-#ifndef UBIDI_H
-#define UBIDI_H
-
-#include "unicode/utypes.h"
-#include "unicode/uchar.h"
-#include "unicode/localpointer.h"
-
-/**
- *\file
- * \brief C API: Bidi algorithm
- *
- * <h2>Bidi algorithm for ICU</h2>
- *
- * This is an implementation of the Unicode Bidirectional Algorithm.
- * The algorithm is defined in the
- * <a href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Annex #9</a>.<p>
- *
- * Note: Libraries that perform a bidirectional algorithm and
- * reorder strings accordingly are sometimes called "Storage Layout Engines".
- * ICU's Bidi and shaping (u_shapeArabic()) APIs can be used at the core of such
- * "Storage Layout Engines".
- *
- * <h3>General remarks about the API:</h3>
- *
- * In functions with an error code parameter,
- * the <code>pErrorCode</code> pointer must be valid
- * and the value that it points to must not indicate a failure before
- * the function call. Otherwise, the function returns immediately.
- * After the function call, the value indicates success or failure.<p>
- *
- * The &quot;limit&quot; of a sequence of characters is the position just after their
- * last character, i.e., one more than that position.<p>
- *
- * Some of the API functions provide access to &quot;runs&quot;.
- * Such a &quot;run&quot; is defined as a sequence of characters
- * that are at the same embedding level
- * after performing the Bidi algorithm.<p>
- *
- * @author Markus W. Scherer
- * @version 1.0
- *
- *
- * <h4> Sample code for the ICU Bidi API </h4>
- *
- * <h5>Rendering a paragraph with the ICU Bidi API</h5>
- *
- * This is (hypothetical) sample code that illustrates
- * how the ICU Bidi API could be used to render a paragraph of text.
- * Rendering code depends highly on the graphics system,
- * therefore this sample code must make a lot of assumptions,
- * which may or may not match any existing graphics system's properties.
- *
- * <p>The basic assumptions are:</p>
- * <ul>
- * <li>Rendering is done from left to right on a horizontal line.</li>
- * <li>A run of single-style, unidirectional text can be rendered at once.</li>
- * <li>Such a run of text is passed to the graphics system with
- *     characters (code units) in logical order.</li>
- * <li>The line-breaking algorithm is very complicated
- *     and Locale-dependent -
- *     and therefore its implementation omitted from this sample code.</li>
- * </ul>
- *
- * <pre>
- * \code
- *#include "unicode/ubidi.h"
- *
- *typedef enum {
- *     styleNormal=0, styleSelected=1,
- *     styleBold=2, styleItalics=4,
- *     styleSuper=8, styleSub=16
- *} Style;
- *
- *typedef struct { int32_t limit; Style style; } StyleRun;
- *
- *int getTextWidth(const UChar *text, int32_t start, int32_t limit,
- *                  const StyleRun *styleRuns, int styleRunCount);
- *
- * // set *pLimit and *pStyleRunLimit for a line
- * // from text[start] and from styleRuns[styleRunStart]
- * // using ubidi_getLogicalRun(para, ...)
- *void getLineBreak(const UChar *text, int32_t start, int32_t *pLimit,
- *                  UBiDi *para,
- *                  const StyleRun *styleRuns, int styleRunStart, int *pStyleRunLimit,
- *                  int *pLineWidth);
- *
- * // render runs on a line sequentially, always from left to right
- *
- * // prepare rendering a new line
- * void startLine(UBiDiDirection textDirection, int lineWidth);
- *
- * // render a run of text and advance to the right by the run width
- * // the text[start..limit-1] is always in logical order
- * void renderRun(const UChar *text, int32_t start, int32_t limit,
- *               UBiDiDirection textDirection, Style style);
- *
- * // We could compute a cross-product
- * // from the style runs with the directional runs
- * // and then reorder it.
- * // Instead, here we iterate over each run type
- * // and render the intersections -
- * // with shortcuts in simple (and common) cases.
- * // renderParagraph() is the main function.
- *
- * // render a directional run with
- * // (possibly) multiple style runs intersecting with it
- * void renderDirectionalRun(const UChar *text,
- *                           int32_t start, int32_t limit,
- *                           UBiDiDirection direction,
- *                           const StyleRun *styleRuns, int styleRunCount) {
- *     int i;
- *
- *     // iterate over style runs
- *     if(direction==UBIDI_LTR) {
- *         int styleLimit;
- *
- *         for(i=0; i<styleRunCount; ++i) {
- *             styleLimit=styleRun[i].limit;
- *             if(start<styleLimit) {
- *                 if(styleLimit>limit) { styleLimit=limit; }
- *                 renderRun(text, start, styleLimit,
- *                           direction, styleRun[i].style);
- *                 if(styleLimit==limit) { break; }
- *                 start=styleLimit;
- *             }
- *         }
- *     } else {
- *         int styleStart;
- *
- *         for(i=styleRunCount-1; i>=0; --i) {
- *             if(i>0) {
- *                 styleStart=styleRun[i-1].limit;
- *             } else {
- *                 styleStart=0;
- *             }
- *             if(limit>=styleStart) {
- *                 if(styleStart<start) { styleStart=start; }
- *                 renderRun(text, styleStart, limit,
- *                           direction, styleRun[i].style);
- *                 if(styleStart==start) { break; }
- *                 limit=styleStart;
- *             }
- *         }
- *     }
- * }
- *
- * // the line object represents text[start..limit-1]
- * void renderLine(UBiDi *line, const UChar *text,
- *                 int32_t start, int32_t limit,
- *                 const StyleRun *styleRuns, int styleRunCount) {
- *     UBiDiDirection direction=ubidi_getDirection(line);
- *     if(direction!=UBIDI_MIXED) {
- *         // unidirectional
- *         if(styleRunCount<=1) {
- *             renderRun(text, start, limit, direction, styleRuns[0].style);
- *         } else {
- *             renderDirectionalRun(text, start, limit,
- *                                  direction, styleRuns, styleRunCount);
- *         }
- *     } else {
- *         // mixed-directional
- *         int32_t count, i, length;
- *         UBiDiLevel level;
- *
- *         count=ubidi_countRuns(para, pErrorCode);
- *         if(U_SUCCESS(*pErrorCode)) {
- *             if(styleRunCount<=1) {
- *                 Style style=styleRuns[0].style;
- *
- *                 // iterate over directional runs
- *                for(i=0; i<count; ++i) {
- *                    direction=ubidi_getVisualRun(para, i, &start, &length);
- *                     renderRun(text, start, start+length, direction, style);
- *                }
- *             } else {
- *                 int32_t j;
- *
- *                 // iterate over both directional and style runs
- *                 for(i=0; i<count; ++i) {
- *                     direction=ubidi_getVisualRun(line, i, &start, &length);
- *                     renderDirectionalRun(text, start, start+length,
- *                                          direction, styleRuns, styleRunCount);
- *                 }
- *             }
- *         }
- *     }
- * }
- *
- *void renderParagraph(const UChar *text, int32_t length,
- *                     UBiDiDirection textDirection,
- *                      const StyleRun *styleRuns, int styleRunCount,
- *                      int lineWidth,
- *                      UErrorCode *pErrorCode) {
- *     UBiDi *para;
- *
- *     if(pErrorCode==NULL || U_FAILURE(*pErrorCode) || length<=0) {
- *         return;
- *     }
- *
- *     para=ubidi_openSized(length, 0, pErrorCode);
- *     if(para==NULL) { return; }
- *
- *     ubidi_setPara(para, text, length,
- *                   textDirection ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR,
- *                   NULL, pErrorCode);
- *     if(U_SUCCESS(*pErrorCode)) {
- *         UBiDiLevel paraLevel=1&ubidi_getParaLevel(para);
- *         StyleRun styleRun={ length, styleNormal };
- *         int width;
- *
- *         if(styleRuns==NULL || styleRunCount<=0) {
- *            styleRunCount=1;
- *             styleRuns=&styleRun;
- *         }
- *
- *        // assume styleRuns[styleRunCount-1].limit>=length
- *
- *         width=getTextWidth(text, 0, length, styleRuns, styleRunCount);
- *         if(width<=lineWidth) {
- *             // everything fits onto one line
- *
- *            // prepare rendering a new line from either left or right
- *             startLine(paraLevel, width);
- *
- *             renderLine(para, text, 0, length,
- *                        styleRuns, styleRunCount);
- *         } else {
- *             UBiDi *line;
- *
- *             // we need to render several lines
- *             line=ubidi_openSized(length, 0, pErrorCode);
- *             if(line!=NULL) {
- *                 int32_t start=0, limit;
- *                 int styleRunStart=0, styleRunLimit;
- *
- *                 for(;;) {
- *                     limit=length;
- *                     styleRunLimit=styleRunCount;
- *                     getLineBreak(text, start, &limit, para,
- *                                  styleRuns, styleRunStart, &styleRunLimit,
- *                                 &width);
- *                     ubidi_setLine(para, start, limit, line, pErrorCode);
- *                     if(U_SUCCESS(*pErrorCode)) {
- *                         // prepare rendering a new line
- *                         // from either left or right
- *                         startLine(paraLevel, width);
- *
- *                         renderLine(line, text, start, limit,
- *                                    styleRuns+styleRunStart,
- *                                    styleRunLimit-styleRunStart);
- *                     }
- *                     if(limit==length) { break; }
- *                     start=limit;
- *                     styleRunStart=styleRunLimit-1;
- *                     if(start>=styleRuns[styleRunStart].limit) {
- *                         ++styleRunStart;
- *                     }
- *                 }
- *
- *                 ubidi_close(line);
- *             }
- *        }
- *    }
- *
- *     ubidi_close(para);
- *}
- *\endcode
- * </pre>
- */
-
-/*DOCXX_TAG*/
-/*@{*/
-
-/**
- * UBiDiLevel is the type of the level values in this
- * Bidi implementation.
- * It holds an embedding level and indicates the visual direction
- * by its bit&nbsp;0 (even/odd value).<p>
- *
- * It can also hold non-level values for the
- * <code>paraLevel</code> and <code>embeddingLevels</code>
- * arguments of <code>ubidi_setPara()</code>; there:
- * <ul>
- * <li>bit&nbsp;7 of an <code>embeddingLevels[]</code>
- * value indicates whether the using application is
- * specifying the level of a character to <i>override</i> whatever the
- * Bidi implementation would resolve it to.</li>
- * <li><code>paraLevel</code> can be set to the
- * pseudo-level values <code>UBIDI_DEFAULT_LTR</code>
- * and <code>UBIDI_DEFAULT_RTL</code>.</li>
- * </ul>
- *
- * @see ubidi_setPara
- *
- * <p>The related constants are not real, valid level values.
- * <code>UBIDI_DEFAULT_XXX</code> can be used to specify
- * a default for the paragraph level for
- * when the <code>ubidi_setPara()</code> function
- * shall determine it but there is no
- * strongly typed character in the input.<p>
- *
- * Note that the value for <code>UBIDI_DEFAULT_LTR</code> is even
- * and the one for <code>UBIDI_DEFAULT_RTL</code> is odd,
- * just like with normal LTR and RTL level values -
- * these special values are designed that way. Also, the implementation
- * assumes that UBIDI_MAX_EXPLICIT_LEVEL is odd.
- *
- * @see UBIDI_DEFAULT_LTR
- * @see UBIDI_DEFAULT_RTL
- * @see UBIDI_LEVEL_OVERRIDE
- * @see UBIDI_MAX_EXPLICIT_LEVEL
- * @stable ICU 2.0
- */
-typedef uint8_t UBiDiLevel;
-
-/** Paragraph level setting.<p>
- *
- * Constant indicating that the base direction depends on the first strong
- * directional character in the text according to the Unicode Bidirectional
- * Algorithm. If no strong directional character is present,
- * then set the paragraph level to 0 (left-to-right).<p>
- *
- * If this value is used in conjunction with reordering modes
- * <code>UBIDI_REORDER_INVERSE_LIKE_DIRECT</code> or
- * <code>UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the text to reorder
- * is assumed to be visual LTR, and the text after reordering is required
- * to be the corresponding logical string with appropriate contextual
- * direction. The direction of the result string will be RTL if either
- * the righmost or leftmost strong character of the source text is RTL
- * or Arabic Letter, the direction will be LTR otherwise.<p>
- *
- * If reordering option <code>UBIDI_OPTION_INSERT_MARKS</code> is set, an RLM may
- * be added at the beginning of the result string to ensure round trip
- * (that the result string, when reordered back to visual, will produce
- * the original source text).
- * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT
- * @see UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
- * @stable ICU 2.0
- */
-#define UBIDI_DEFAULT_LTR 0xfe
-
-/** Paragraph level setting.<p>
- *
- * Constant indicating that the base direction depends on the first strong
- * directional character in the text according to the Unicode Bidirectional
- * Algorithm. If no strong directional character is present,
- * then set the paragraph level to 1 (right-to-left).<p>
- *
- * If this value is used in conjunction with reordering modes
- * <code>UBIDI_REORDER_INVERSE_LIKE_DIRECT</code> or
- * <code>UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the text to reorder
- * is assumed to be visual LTR, and the text after reordering is required
- * to be the corresponding logical string with appropriate contextual
- * direction. The direction of the result string will be RTL if either
- * the righmost or leftmost strong character of the source text is RTL
- * or Arabic Letter, or if the text contains no strong character;
- * the direction will be LTR otherwise.<p>
- *
- * If reordering option <code>UBIDI_OPTION_INSERT_MARKS</code> is set, an RLM may
- * be added at the beginning of the result string to ensure round trip
- * (that the result string, when reordered back to visual, will produce
- * the original source text).
- * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT
- * @see UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
- * @stable ICU 2.0
- */
-#define UBIDI_DEFAULT_RTL 0xff
-
-/**
- * Maximum explicit embedding level.
- * (The maximum resolved level can be up to <code>UBIDI_MAX_EXPLICIT_LEVEL+1</code>).
- * @stable ICU 2.0
- */
-#define UBIDI_MAX_EXPLICIT_LEVEL 61
-
-/** Bit flag for level input.
- *  Overrides directional properties.
- * @stable ICU 2.0
- */
-#define UBIDI_LEVEL_OVERRIDE 0x80
-
-/**
- * Special value which can be returned by the mapping functions when a logical
- * index has no corresponding visual index or vice-versa. This may happen
- * for the logical-to-visual mapping of a Bidi control when option
- * <code>#UBIDI_OPTION_REMOVE_CONTROLS</code> is specified. This can also happen
- * for the visual-to-logical mapping of a Bidi mark (LRM or RLM) inserted
- * by option <code>#UBIDI_OPTION_INSERT_MARKS</code>.
- * @see ubidi_getVisualIndex
- * @see ubidi_getVisualMap
- * @see ubidi_getLogicalIndex
- * @see ubidi_getLogicalMap
- * @stable ICU 3.6
- */
-#define UBIDI_MAP_NOWHERE   (-1)
-
-/**
- * <code>UBiDiDirection</code> values indicate the text direction.
- * @stable ICU 2.0
- */
-enum UBiDiDirection {
-  /** Left-to-right text. This is a 0 value.
-   * <ul>
-   * <li>As return value for <code>ubidi_getDirection()</code>, it means
-   *     that the source string contains no right-to-left characters, or
-   *     that the source string is empty and the paragraph level is even.
-   * <li> As return value for <code>ubidi_getBaseDirection()</code>, it
-   *      means that the first strong character of the source string has
-   *      a left-to-right direction.
-   * </ul>
-   * @stable ICU 2.0
-   */
-  UBIDI_LTR,
-  /** Right-to-left text. This is a 1 value.
-   * <ul>
-   * <li>As return value for <code>ubidi_getDirection()</code>, it means
-   *     that the source string contains no left-to-right characters, or
-   *     that the source string is empty and the paragraph level is odd.
-   * <li> As return value for <code>ubidi_getBaseDirection()</code>, it
-   *      means that the first strong character of the source string has
-   *      a right-to-left direction.
-   * </ul>
-   * @stable ICU 2.0
-   */
-  UBIDI_RTL,
-  /** Mixed-directional text.
-   * <p>As return value for <code>ubidi_getDirection()</code>, it means
-   *    that the source string contains both left-to-right and
-   *    right-to-left characters.
-   * @stable ICU 2.0
-   */
-  UBIDI_MIXED,
-  /** No strongly directional text.
-   * <p>As return value for <code>ubidi_getBaseDirection()</code>, it means
-   *    that the source string is missing or empty, or contains neither left-to-right
-   *    nor right-to-left characters.
-   * @draft ICU 4.6
-   */
-  UBIDI_NEUTRAL
-};
-
-/** @stable ICU 2.0 */
-typedef enum UBiDiDirection UBiDiDirection;
-
-/**
- * Forward declaration of the <code>UBiDi</code> structure for the declaration of
- * the API functions. Its fields are implementation-specific.<p>
- * This structure holds information about a paragraph (or multiple paragraphs)
- * of text with Bidi-algorithm-related details, or about one line of
- * such a paragraph.<p>
- * Reordering can be done on a line, or on one or more paragraphs which are
- * then interpreted each as one single line.
- * @stable ICU 2.0
- */
-struct UBiDi;
-
-/** @stable ICU 2.0 */
-typedef struct UBiDi UBiDi;
-
-/**
- * Allocate a <code>UBiDi</code> structure.
- * Such an object is initially empty. It is assigned
- * the Bidi properties of a piece of text containing one or more paragraphs
- * by <code>ubidi_setPara()</code>
- * or the Bidi properties of a line within a paragraph by
- * <code>ubidi_setLine()</code>.<p>
- * This object can be reused for as long as it is not deallocated
- * by calling <code>ubidi_close()</code>.<p>
- * <code>ubidi_setPara()</code> and <code>ubidi_setLine()</code> will allocate
- * additional memory for internal structures as necessary.
- *
- * @return An empty <code>UBiDi</code> object.
- * @stable ICU 2.0
- */
-U_STABLE UBiDi * U_EXPORT2
-ubidi_open(void);
-
-/**
- * Allocate a <code>UBiDi</code> structure with preallocated memory
- * for internal structures.
- * This function provides a <code>UBiDi</code> object like <code>ubidi_open()</code>
- * with no arguments, but it also preallocates memory for internal structures
- * according to the sizings supplied by the caller.<p>
- * Subsequent functions will not allocate any more memory, and are thus
- * guaranteed not to fail because of lack of memory.<p>
- * The preallocation can be limited to some of the internal memory
- * by setting some values to 0 here. That means that if, e.g.,
- * <code>maxRunCount</code> cannot be reasonably predetermined and should not
- * be set to <code>maxLength</code> (the only failproof value) to avoid
- * wasting memory, then <code>maxRunCount</code> could be set to 0 here
- * and the internal structures that are associated with it will be allocated
- * on demand, just like with <code>ubidi_open()</code>.
- *
- * @param maxLength is the maximum text or line length that internal memory
- *        will be preallocated for. An attempt to associate this object with a
- *        longer text will fail, unless this value is 0, which leaves the allocation
- *        up to the implementation.
- *
- * @param maxRunCount is the maximum anticipated number of same-level runs
- *        that internal memory will be preallocated for. An attempt to access
- *        visual runs on an object that was not preallocated for as many runs
- *        as the text was actually resolved to will fail,
- *        unless this value is 0, which leaves the allocation up to the implementation.<br><br>
- *        The number of runs depends on the actual text and maybe anywhere between
- *        1 and <code>maxLength</code>. It is typically small.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return An empty <code>UBiDi</code> object with preallocated memory.
- * @stable ICU 2.0
- */
-U_STABLE UBiDi * U_EXPORT2
-ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode);
-
-/**
- * <code>ubidi_close()</code> must be called to free the memory
- * associated with a UBiDi object.<p>
- *
- * <strong>Important: </strong>
- * A parent <code>UBiDi</code> object must not be destroyed or reused if
- * it still has children.
- * If a <code>UBiDi</code> object has become the <i>child</i>
- * of another one (its <i>parent</i>) by calling
- * <code>ubidi_setLine()</code>, then the child object must
- * be destroyed (closed) or reused (by calling
- * <code>ubidi_setPara()</code> or <code>ubidi_setLine()</code>)
- * before the parent object.
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- *
- * @see ubidi_setPara
- * @see ubidi_setLine
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_close(UBiDi *pBiDi);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUBiDiPointer
- * "Smart pointer" class, closes a UBiDi via ubidi_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiPointer, UBiDi, ubidi_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Modify the operation of the Bidi algorithm such that it
- * approximates an "inverse Bidi" algorithm. This function
- * must be called before <code>ubidi_setPara()</code>.
- *
- * <p>The normal operation of the Bidi algorithm as described
- * in the Unicode Technical Report is to take text stored in logical
- * (keyboard, typing) order and to determine the reordering of it for visual
- * rendering.
- * Some legacy systems store text in visual order, and for operations
- * with standard, Unicode-based algorithms, the text needs to be transformed
- * to logical order. This is effectively the inverse algorithm of the
- * described Bidi algorithm. Note that there is no standard algorithm for
- * this "inverse Bidi" and that the current implementation provides only an
- * approximation of "inverse Bidi".</p>
- *
- * <p>With <code>isInverse</code> set to <code>TRUE</code>,
- * this function changes the behavior of some of the subsequent functions
- * in a way that they can be used for the inverse Bidi algorithm.
- * Specifically, runs of text with numeric characters will be treated in a
- * special way and may need to be surrounded with LRM characters when they are
- * written in reordered sequence.</p>
- *
- * <p>Output runs should be retrieved using <code>ubidi_getVisualRun()</code>.
- * Since the actual input for "inverse Bidi" is visually ordered text and
- * <code>ubidi_getVisualRun()</code> gets the reordered runs, these are actually
- * the runs of the logically ordered output.</p>
- *
- * <p>Calling this function with argument <code>isInverse</code> set to
- * <code>TRUE</code> is equivalent to calling
- * <code>ubidi_setReorderingMode</code> with argument
- * <code>reorderingMode</code>
- * set to <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
- * Calling this function with argument <code>isInverse</code> set to
- * <code>FALSE</code> is equivalent to calling
- * <code>ubidi_setReorderingMode</code> with argument
- * <code>reorderingMode</code>
- * set to <code>#UBIDI_REORDER_DEFAULT</code>.
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- *
- * @param isInverse specifies "forward" or "inverse" Bidi operation.
- *
- * @see ubidi_setPara
- * @see ubidi_writeReordered
- * @see ubidi_setReorderingMode
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
-
-/**
- * Is this Bidi object set to perform the inverse Bidi algorithm?
- * <p>Note: calling this function after setting the reordering mode with
- * <code>ubidi_setReorderingMode</code> will return <code>TRUE</code> if the
- * reordering mode was set to <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>,
- * <code>FALSE</code> for all other values.</p>
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- * @return TRUE if the Bidi object is set to perform the inverse Bidi algorithm
- * by handling numbers as L.
- *
- * @see ubidi_setInverse
- * @see ubidi_setReorderingMode
- * @stable ICU 2.0
- */
-
-U_STABLE UBool U_EXPORT2
-ubidi_isInverse(UBiDi *pBiDi);
-
-/**
- * Specify whether block separators must be allocated level zero,
- * so that successive paragraphs will progress from left to right.
- * This function must be called before <code>ubidi_setPara()</code>.
- * Paragraph separators (B) may appear in the text.  Setting them to level zero
- * means that all paragraph separators (including one possibly appearing
- * in the last text position) are kept in the reordered text after the text
- * that they follow in the source text.
- * When this feature is not enabled, a paragraph separator at the last
- * position of the text before reordering will go to the first position
- * of the reordered text when the paragraph level is odd.
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- *
- * @param orderParagraphsLTR specifies whether paragraph separators (B) must
- * receive level 0, so that successive paragraphs progress from left to right.
- *
- * @see ubidi_setPara
- * @stable ICU 3.4
- */
-U_STABLE void U_EXPORT2
-ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
-
-/**
- * Is this Bidi object set to allocate level 0 to block separators so that
- * successive paragraphs progress from left to right?
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- * @return TRUE if the Bidi object is set to allocate level 0 to block
- *         separators.
- *
- * @see ubidi_orderParagraphsLTR
- * @stable ICU 3.4
- */
-U_STABLE UBool U_EXPORT2
-ubidi_isOrderParagraphsLTR(UBiDi *pBiDi);
-
-/**
- * <code>UBiDiReorderingMode</code> values indicate which variant of the Bidi
- * algorithm to use.
- *
- * @see ubidi_setReorderingMode
- * @stable ICU 3.6
- */
-typedef enum UBiDiReorderingMode {
-    /** Regular Logical to Visual Bidi algorithm according to Unicode.
-      * This is a 0 value.
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_DEFAULT = 0,
-    /** Logical to Visual algorithm which handles numbers in a way which
-      * mimicks the behavior of Windows XP.
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_NUMBERS_SPECIAL,
-    /** Logical to Visual algorithm grouping numbers with adjacent R characters
-      * (reversible algorithm).
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_GROUP_NUMBERS_WITH_R,
-    /** Reorder runs only to transform a Logical LTR string to the Logical RTL
-      * string with the same display, or vice-versa.<br>
-      * If this mode is set together with option
-      * <code>#UBIDI_OPTION_INSERT_MARKS</code>, some Bidi controls in the source
-      * text may be removed and other controls may be added to produce the
-      * minimum combination which has the required display.
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_RUNS_ONLY,
-    /** Visual to Logical algorithm which handles numbers like L
-      * (same algorithm as selected by <code>ubidi_setInverse(TRUE)</code>.
-      * @see ubidi_setInverse
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_INVERSE_NUMBERS_AS_L,
-    /** Visual to Logical algorithm equivalent to the regular Logical to Visual
-      * algorithm.
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_INVERSE_LIKE_DIRECT,
-    /** Inverse Bidi (Visual to Logical) algorithm for the
-      * <code>UBIDI_REORDER_NUMBERS_SPECIAL</code> Bidi algorithm.
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL,
-    /** Number of values for reordering mode.
-      * @stable ICU 3.6 */
-    UBIDI_REORDER_COUNT
-} UBiDiReorderingMode;
-
-/**
- * Modify the operation of the Bidi algorithm such that it implements some
- * variant to the basic Bidi algorithm or approximates an "inverse Bidi"
- * algorithm, depending on different values of the "reordering mode".
- * This function must be called before <code>ubidi_setPara()</code>, and stays
- * in effect until called again with a different argument.
- *
- * <p>The normal operation of the Bidi algorithm as described
- * in the Unicode Standard Annex #9 is to take text stored in logical
- * (keyboard, typing) order and to determine how to reorder it for visual
- * rendering.</p>
- *
- * <p>With the reordering mode set to a value other than
- * <code>#UBIDI_REORDER_DEFAULT</code>, this function changes the behavior of
- * some of the subsequent functions in a way such that they implement an
- * inverse Bidi algorithm or some other algorithm variants.</p>
- *
- * <p>Some legacy systems store text in visual order, and for operations
- * with standard, Unicode-based algorithms, the text needs to be transformed
- * into logical order. This is effectively the inverse algorithm of the
- * described Bidi algorithm. Note that there is no standard algorithm for
- * this "inverse Bidi", so a number of variants are implemented here.</p>
- *
- * <p>In other cases, it may be desirable to emulate some variant of the
- * Logical to Visual algorithm (e.g. one used in MS Windows), or perform a
- * Logical to Logical transformation.</p>
- *
- * <ul>
- * <li>When the reordering mode is set to <code>#UBIDI_REORDER_DEFAULT</code>,
- * the standard Bidi Logical to Visual algorithm is applied.</li>
- *
- * <li>When the reordering mode is set to
- * <code>#UBIDI_REORDER_NUMBERS_SPECIAL</code>,
- * the algorithm used to perform Bidi transformations when calling
- * <code>ubidi_setPara</code> should approximate the algorithm used in
- * Microsoft Windows XP rather than strictly conform to the Unicode Bidi
- * algorithm.
- * <br>
- * The differences between the basic algorithm and the algorithm addressed
- * by this option are as follows:
- * <ul>
- *   <li>Within text at an even embedding level, the sequence "123AB"
- *   (where AB represent R or AL letters) is transformed to "123BA" by the
- *   Unicode algorithm and to "BA123" by the Windows algorithm.</li>
- *   <li>Arabic-Indic numbers (AN) are handled by the Windows algorithm just
- *   like regular numbers (EN).</li>
- * </ul></li>
- *
- * <li>When the reordering mode is set to
- * <code>#UBIDI_REORDER_GROUP_NUMBERS_WITH_R</code>,
- * numbers located between LTR text and RTL text are associated with the RTL
- * text. For instance, an LTR paragraph with content "abc 123 DEF" (where
- * upper case letters represent RTL characters) will be transformed to
- * "abc FED 123" (and not "abc 123 FED"), "DEF 123 abc" will be transformed
- * to "123 FED abc" and "123 FED abc" will be transformed to "DEF 123 abc".
- * This makes the algorithm reversible and makes it useful when round trip
- * (from visual to logical and back to visual) must be achieved without
- * adding LRM characters. However, this is a variation from the standard
- * Unicode Bidi algorithm.<br>
- * The source text should not contain Bidi control characters other than LRM
- * or RLM.</li>
- *
- * <li>When the reordering mode is set to
- * <code>#UBIDI_REORDER_RUNS_ONLY</code>,
- * a "Logical to Logical" transformation must be performed:
- * <ul>
- * <li>If the default text level of the source text (argument <code>paraLevel</code>
- * in <code>ubidi_setPara</code>) is even, the source text will be handled as
- * LTR logical text and will be transformed to the RTL logical text which has
- * the same LTR visual display.</li>
- * <li>If the default level of the source text is odd, the source text
- * will be handled as RTL logical text and will be transformed to the
- * LTR logical text which has the same LTR visual display.</li>
- * </ul>
- * This mode may be needed when logical text which is basically Arabic or
- * Hebrew, with possible included numbers or phrases in English, has to be
- * displayed as if it had an even embedding level (this can happen if the
- * displaying application treats all text as if it was basically LTR).
- * <br>
- * This mode may also be needed in the reverse case, when logical text which is
- * basically English, with possible included phrases in Arabic or Hebrew, has to
- * be displayed as if it had an odd embedding level.
- * <br>
- * Both cases could be handled by adding LRE or RLE at the head of the text,
- * if the display subsystem supports these formatting controls. If it does not,
- * the problem may be handled by transforming the source text in this mode
- * before displaying it, so that it will be displayed properly.<br>
- * The source text should not contain Bidi control characters other than LRM
- * or RLM.</li>
- *
- * <li>When the reordering mode is set to
- * <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>, an "inverse Bidi" algorithm
- * is applied.
- * Runs of text with numeric characters will be treated like LTR letters and
- * may need to be surrounded with LRM characters when they are written in
- * reordered sequence (the option <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code> can
- * be used with function <code>ubidi_writeReordered</code> to this end. This
- * mode is equivalent to calling <code>ubidi_setInverse()</code> with
- * argument <code>isInverse</code> set to <code>TRUE</code>.</li>
- *
- * <li>When the reordering mode is set to
- * <code>#UBIDI_REORDER_INVERSE_LIKE_DIRECT</code>, the "direct" Logical to Visual
- * Bidi algorithm is used as an approximation of an "inverse Bidi" algorithm.
- * This mode is similar to mode <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>
- * but is closer to the regular Bidi algorithm.
- * <br>
- * For example, an LTR paragraph with the content "FED 123 456 CBA" (where
- * upper case represents RTL characters) will be transformed to
- * "ABC 456 123 DEF", as opposed to "DEF 123 456 ABC"
- * with mode <code>UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
- * When used in conjunction with option
- * <code>#UBIDI_OPTION_INSERT_MARKS</code>, this mode generally
- * adds Bidi marks to the output significantly more sparingly than mode
- * <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code> with option
- * <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code> in calls to
- * <code>ubidi_writeReordered</code>.</li>
- *
- * <li>When the reordering mode is set to
- * <code>#UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the Logical to Visual
- * Bidi algorithm used in Windows XP is used as an approximation of an "inverse Bidi" algorithm.
- * <br>
- * For example, an LTR paragraph with the content "abc FED123" (where
- * upper case represents RTL characters) will be transformed to "abc 123DEF."</li>
- * </ul>
- *
- * <p>In all the reordering modes specifying an "inverse Bidi" algorithm
- * (i.e. those with a name starting with <code>UBIDI_REORDER_INVERSE</code>),
- * output runs should be retrieved using
- * <code>ubidi_getVisualRun()</code>, and the output text with
- * <code>ubidi_writeReordered()</code>. The caller should keep in mind that in
- * "inverse Bidi" modes the input is actually visually ordered text and
- * reordered output returned by <code>ubidi_getVisualRun()</code> or
- * <code>ubidi_writeReordered()</code> are actually runs or character string
- * of logically ordered output.<br>
- * For all the "inverse Bidi" modes, the source text should not contain
- * Bidi control characters other than LRM or RLM.</p>
- *
- * <p>Note that option <code>#UBIDI_OUTPUT_REVERSE</code> of
- * <code>ubidi_writeReordered</code> has no useful meaning and should not be
- * used in conjunction with any value of the reordering mode specifying
- * "inverse Bidi" or with value <code>UBIDI_REORDER_RUNS_ONLY</code>.
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- * @param reorderingMode specifies the required variant of the Bidi algorithm.
- *
- * @see UBiDiReorderingMode
- * @see ubidi_setInverse
- * @see ubidi_setPara
- * @see ubidi_writeReordered
- * @stable ICU 3.6
- */
-U_STABLE void U_EXPORT2
-ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode);
-
-/**
- * What is the requested reordering mode for a given Bidi object?
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- * @return the current reordering mode of the Bidi object
- * @see ubidi_setReorderingMode
- * @stable ICU 3.6
- */
-U_STABLE UBiDiReorderingMode U_EXPORT2
-ubidi_getReorderingMode(UBiDi *pBiDi);
-
-/**
- * <code>UBiDiReorderingOption</code> values indicate which options are
- * specified to affect the Bidi algorithm.
- *
- * @see ubidi_setReorderingOptions
- * @stable ICU 3.6
- */
-typedef enum UBiDiReorderingOption {
-    /**
-     * option value for <code>ubidi_setReorderingOptions</code>:
-     * disable all the options which can be set with this function
-     * @see ubidi_setReorderingOptions
-     * @stable ICU 3.6
-     */
-    UBIDI_OPTION_DEFAULT = 0,
-
-    /**
-     * option bit for <code>ubidi_setReorderingOptions</code>:
-     * insert Bidi marks (LRM or RLM) when needed to ensure correct result of
-     * a reordering to a Logical order
-     *
-     * <p>This option must be set or reset before calling
-     * <code>ubidi_setPara</code>.</p>
-     *
-     * <p>This option is significant only with reordering modes which generate
-     * a result with Logical order, specifically:</p>
-     * <ul>
-     *   <li><code>#UBIDI_REORDER_RUNS_ONLY</code></li>
-     *   <li><code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code></li>
-     *   <li><code>#UBIDI_REORDER_INVERSE_LIKE_DIRECT</code></li>
-     *   <li><code>#UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code></li>
-     * </ul>
-     *
-     * <p>If this option is set in conjunction with reordering mode
-     * <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code> or with calling
-     * <code>ubidi_setInverse(TRUE)</code>, it implies
-     * option <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code>
-     * in calls to function <code>ubidi_writeReordered()</code>.</p>
-     *
-     * <p>For other reordering modes, a minimum number of LRM or RLM characters
-     * will be added to the source text after reordering it so as to ensure
-     * round trip, i.e. when applying the inverse reordering mode on the
-     * resulting logical text with removal of Bidi marks
-     * (option <code>#UBIDI_OPTION_REMOVE_CONTROLS</code> set before calling
-     * <code>ubidi_setPara()</code> or option <code>#UBIDI_REMOVE_BIDI_CONTROLS</code>
-     * in <code>ubidi_writeReordered</code>), the result will be identical to the
-     * source text in the first transformation.
-     *
-     * <p>This option will be ignored if specified together with option
-     * <code>#UBIDI_OPTION_REMOVE_CONTROLS</code>. It inhibits option
-     * <code>UBIDI_REMOVE_BIDI_CONTROLS</code> in calls to function
-     * <code>ubidi_writeReordered()</code> and it implies option
-     * <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code> in calls to function
-     * <code>ubidi_writeReordered()</code> if the reordering mode is
-     * <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>.</p>
-     *
-     * @see ubidi_setReorderingMode
-     * @see ubidi_setReorderingOptions
-     * @stable ICU 3.6
-     */
-    UBIDI_OPTION_INSERT_MARKS = 1,
-
-    /**
-     * option bit for <code>ubidi_setReorderingOptions</code>:
-     * remove Bidi control characters
-     *
-     * <p>This option must be set or reset before calling
-     * <code>ubidi_setPara</code>.</p>
-     *
-     * <p>This option nullifies option <code>#UBIDI_OPTION_INSERT_MARKS</code>.
-     * It inhibits option <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code> in calls
-     * to function <code>ubidi_writeReordered()</code> and it implies option
-     * <code>#UBIDI_REMOVE_BIDI_CONTROLS</code> in calls to that function.</p>
-     *
-     * @see ubidi_setReorderingMode
-     * @see ubidi_setReorderingOptions
-     * @stable ICU 3.6
-     */
-    UBIDI_OPTION_REMOVE_CONTROLS = 2,
-
-    /**
-     * option bit for <code>ubidi_setReorderingOptions</code>:
-     * process the output as part of a stream to be continued
-     *
-     * <p>This option must be set or reset before calling
-     * <code>ubidi_setPara</code>.</p>
-     *
-     * <p>This option specifies that the caller is interested in processing large
-     * text object in parts.
-     * The results of the successive calls are expected to be concatenated by the
-     * caller. Only the call for the last part will have this option bit off.</p>
-     *
-     * <p>When this option bit is on, <code>ubidi_setPara()</code> may process
-     * less than the full source text in order to truncate the text at a meaningful
-     * boundary. The caller should call <code>ubidi_getProcessedLength()</code>
-     * immediately after calling <code>ubidi_setPara()</code> in order to
-     * determine how much of the source text has been processed.
-     * Source text beyond that length should be resubmitted in following calls to
-     * <code>ubidi_setPara</code>. The processed length may be less than
-     * the length of the source text if a character preceding the last character of
-     * the source text constitutes a reasonable boundary (like a block separator)
-     * for text to be continued.<br>
-     * If the last character of the source text constitutes a reasonable
-     * boundary, the whole text will be processed at once.<br>
-     * If nowhere in the source text there exists
-     * such a reasonable boundary, the processed length will be zero.<br>
-     * The caller should check for such an occurrence and do one of the following:
-     * <ul><li>submit a larger amount of text with a better chance to include
-     *         a reasonable boundary.</li>
-     *     <li>resubmit the same text after turning off option
-     *         <code>UBIDI_OPTION_STREAMING</code>.</li></ul>
-     * In all cases, this option should be turned off before processing the last
-     * part of the text.</p>
-     *
-     * <p>When the <code>UBIDI_OPTION_STREAMING</code> option is used,
-     * it is recommended to call <code>ubidi_orderParagraphsLTR()</code> with
-     * argument <code>orderParagraphsLTR</code> set to <code>TRUE</code> before
-     * calling <code>ubidi_setPara</code> so that later paragraphs may be
-     * concatenated to previous paragraphs on the right.</p>
-     *
-     * @see ubidi_setReorderingMode
-     * @see ubidi_setReorderingOptions
-     * @see ubidi_getProcessedLength
-     * @see ubidi_orderParagraphsLTR
-     * @stable ICU 3.6
-     */
-    UBIDI_OPTION_STREAMING = 4
-} UBiDiReorderingOption;
-
-/**
- * Specify which of the reordering options
- * should be applied during Bidi transformations.
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- * @param reorderingOptions is a combination of zero or more of the following
- * options:
- * <code>#UBIDI_OPTION_DEFAULT</code>, <code>#UBIDI_OPTION_INSERT_MARKS</code>,
- * <code>#UBIDI_OPTION_REMOVE_CONTROLS</code>, <code>#UBIDI_OPTION_STREAMING</code>.
- *
- * @see ubidi_getReorderingOptions
- * @stable ICU 3.6
- */
-U_STABLE void U_EXPORT2
-ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
-
-/**
- * What are the reordering options applied to a given Bidi object?
- *
- * @param pBiDi is a <code>UBiDi</code> object.
- * @return the current reordering options of the Bidi object
- * @see ubidi_setReorderingOptions
- * @stable ICU 3.6
- */
-U_STABLE uint32_t U_EXPORT2
-ubidi_getReorderingOptions(UBiDi *pBiDi);
-
-/**
- * Perform the Unicode Bidi algorithm. It is defined in the
- * <a href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Anned #9</a>,
- * version 13,
- * also described in The Unicode Standard, Version 4.0 .<p>
- *
- * This function takes a piece of plain text containing one or more paragraphs,
- * with or without externally specified embedding levels from <i>styled</i>
- * text and computes the left-right-directionality of each character.<p>
- *
- * If the entire text is all of the same directionality, then
- * the function may not perform all the steps described by the algorithm,
- * i.e., some levels may not be the same as if all steps were performed.
- * This is not relevant for unidirectional text.<br>
- * For example, in pure LTR text with numbers the numbers would get
- * a resolved level of 2 higher than the surrounding text according to
- * the algorithm. This implementation may set all resolved levels to
- * the same value in such a case.<p>
- *
- * The text can be composed of multiple paragraphs. Occurrence of a block
- * separator in the text terminates a paragraph, and whatever comes next starts
- * a new paragraph. The exception to this rule is when a Carriage Return (CR)
- * is followed by a Line Feed (LF). Both CR and LF are block separators, but
- * in that case, the pair of characters is considered as terminating the
- * preceding paragraph, and a new paragraph will be started by a character
- * coming after the LF.
- *
- * @param pBiDi A <code>UBiDi</code> object allocated with <code>ubidi_open()</code>
- *        which will be set to contain the reordering information,
- *        especially the resolved levels for all the characters in <code>text</code>.
- *
- * @param text is a pointer to the text that the Bidi algorithm will be performed on.
- *        This pointer is stored in the UBiDi object and can be retrieved
- *        with <code>ubidi_getText()</code>.<br>
- *        <strong>Note:</strong> the text must be (at least) <code>length</code> long.
- *
- * @param length is the length of the text; if <code>length==-1</code> then
- *        the text must be zero-terminated.
- *
- * @param paraLevel specifies the default level for the text;
- *        it is typically 0 (LTR) or 1 (RTL).
- *        If the function shall determine the paragraph level from the text,
- *        then <code>paraLevel</code> can be set to
- *        either <code>#UBIDI_DEFAULT_LTR</code>
- *        or <code>#UBIDI_DEFAULT_RTL</code>; if the text contains multiple
- *        paragraphs, the paragraph level shall be determined separately for
- *        each paragraph; if a paragraph does not include any strongly typed
- *        character, then the desired default is used (0 for LTR or 1 for RTL).
- *        Any other value between 0 and <code>#UBIDI_MAX_EXPLICIT_LEVEL</code>
- *        is also valid, with odd levels indicating RTL.
- *
- * @param embeddingLevels (in) may be used to preset the embedding and override levels,
- *        ignoring characters like LRE and PDF in the text.
- *        A level overrides the directional property of its corresponding
- *        (same index) character if the level has the
- *        <code>#UBIDI_LEVEL_OVERRIDE</code> bit set.<br><br>
- *        Except for that bit, it must be
- *        <code>paraLevel<=embeddingLevels[]<=UBIDI_MAX_EXPLICIT_LEVEL</code>,
- *        with one exception: a level of zero may be specified for a paragraph
- *        separator even if <code>paraLevel>0</code> when multiple paragraphs
- *        are submitted in the same call to <code>ubidi_setPara()</code>.<br><br>
- *        <strong>Caution: </strong>A copy of this pointer, not of the levels,
- *        will be stored in the <code>UBiDi</code> object;
- *        the <code>embeddingLevels</code> array must not be
- *        deallocated before the <code>UBiDi</code> structure is destroyed or reused,
- *        and the <code>embeddingLevels</code>
- *        should not be modified to avoid unexpected results on subsequent Bidi operations.
- *        However, the <code>ubidi_setPara()</code> and
- *        <code>ubidi_setLine()</code> functions may modify some or all of the levels.<br><br>
- *        After the <code>UBiDi</code> object is reused or destroyed, the caller
- *        must take care of the deallocation of the <code>embeddingLevels</code> array.<br><br>
- *        <strong>Note:</strong> the <code>embeddingLevels</code> array must be
- *        at least <code>length</code> long.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
-              UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
-              UErrorCode *pErrorCode);
-
-/**
- * <code>ubidi_setLine()</code> sets a <code>UBiDi</code> to
- * contain the reordering information, especially the resolved levels,
- * for all the characters in a line of text. This line of text is
- * specified by referring to a <code>UBiDi</code> object representing
- * this information for a piece of text containing one or more paragraphs,
- * and by specifying a range of indexes in this text.<p>
- * In the new line object, the indexes will range from 0 to <code>limit-start-1</code>.<p>
- *
- * This is used after calling <code>ubidi_setPara()</code>
- * for a piece of text, and after line-breaking on that text.
- * It is not necessary if each paragraph is treated as a single line.<p>
- *
- * After line-breaking, rules (L1) and (L2) for the treatment of
- * trailing WS and for reordering are performed on
- * a <code>UBiDi</code> object that represents a line.<p>
- *
- * <strong>Important: </strong><code>pLineBiDi</code> shares data with
- * <code>pParaBiDi</code>.
- * You must destroy or reuse <code>pLineBiDi</code> before <code>pParaBiDi</code>.
- * In other words, you must destroy or reuse the <code>UBiDi</code> object for a line
- * before the object for its parent paragraph.<p>
- *
- * The text pointer that was stored in <code>pParaBiDi</code> is also copied,
- * and <code>start</code> is added to it so that it points to the beginning of the
- * line for this object.
- *
- * @param pParaBiDi is the parent paragraph object. It must have been set
- * by a successful call to ubidi_setPara.
- *
- * @param start is the line's first index into the text.
- *
- * @param limit is just behind the line's last index into the text
- *        (its last index +1).<br>
- *        It must be <code>0<=start<limit<=</code>containing paragraph limit.
- *        If the specified line crosses a paragraph boundary, the function
- *        will terminate with error code U_ILLEGAL_ARGUMENT_ERROR.
- *
- * @param pLineBiDi is the object that will now represent a line of the text.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @see ubidi_setPara
- * @see ubidi_getProcessedLength
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_setLine(const UBiDi *pParaBiDi,
-              int32_t start, int32_t limit,
-              UBiDi *pLineBiDi,
-              UErrorCode *pErrorCode);
-
-/**
- * Get the directionality of the text.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @return a value of <code>UBIDI_LTR</code>, <code>UBIDI_RTL</code>
- *         or <code>UBIDI_MIXED</code>
- *         that indicates if the entire text
- *         represented by this object is unidirectional,
- *         and which direction, or if it is mixed-directional.
- * Note -  The value <code>UBIDI_NEUTRAL</code> is never returned from this method.
- *
- * @see UBiDiDirection
- * @stable ICU 2.0
- */
-U_STABLE UBiDiDirection U_EXPORT2
-ubidi_getDirection(const UBiDi *pBiDi);
-
-/**
- * Gets the base direction of the text provided according
- * to the Unicode Bidirectional Algorithm. The base direction
- * is derived from the first character in the string with bidirectional
- * character type L, R, or AL. If the first such character has type L,
- * <code>UBIDI_LTR</code> is returned. If the first such character has
- * type R or AL, <code>UBIDI_RTL</code> is returned. If the string does
- * not contain any character of these types, then
- * <code>UBIDI_NEUTRAL</code> is returned.
- *
- * This is a lightweight function for use when only the base direction
- * is needed and no further bidi processing of the text is needed.
- *
- * @param text is a pointer to the text whose base
- *             direction is needed.
- * Note: the text must be (at least) @c length long.
- *
- * @param length is the length of the text;
- *               if <code>length==-1</code> then the text
- *               must be zero-terminated.
- *
- * @return  <code>UBIDI_LTR</code>, <code>UBIDI_RTL</code>,
- *          <code>UBIDI_NEUTRAL</code>
- *
- * @see UBiDiDirection
- * @draft ICU 4.6
- */
-U_DRAFT UBiDiDirection U_EXPORT2
-ubidi_getBaseDirection(const UChar *text,  int32_t length );
-
-/**
- * Get the pointer to the text.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @return The pointer to the text that the UBiDi object was created for.
- *
- * @see ubidi_setPara
- * @see ubidi_setLine
- * @stable ICU 2.0
- */
-U_STABLE const UChar * U_EXPORT2
-ubidi_getText(const UBiDi *pBiDi);
-
-/**
- * Get the length of the text.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @return The length of the text that the UBiDi object was created for.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_getLength(const UBiDi *pBiDi);
-
-/**
- * Get the paragraph level of the text.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @return The paragraph level. If there are multiple paragraphs, their
- *         level may vary if the required paraLevel is UBIDI_DEFAULT_LTR or
- *         UBIDI_DEFAULT_RTL.  In that case, the level of the first paragraph
- *         is returned.
- *
- * @see UBiDiLevel
- * @see ubidi_getParagraph
- * @see ubidi_getParagraphByIndex
- * @stable ICU 2.0
- */
-U_STABLE UBiDiLevel U_EXPORT2
-ubidi_getParaLevel(const UBiDi *pBiDi);
-
-/**
- * Get the number of paragraphs.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @return The number of paragraphs.
- * @stable ICU 3.4
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_countParagraphs(UBiDi *pBiDi);
-
-/**
- * Get a paragraph, given a position within the text.
- * This function returns information about a paragraph.<br>
- * Note: if the paragraph index is known, it is more efficient to
- * retrieve the paragraph information using ubidi_getParagraphByIndex().<p>
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param charIndex is the index of a character within the text, in the
- *        range <code>[0..ubidi_getProcessedLength(pBiDi)-1]</code>.
- *
- * @param pParaStart will receive the index of the first character of the
- *        paragraph in the text.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pParaLimit will receive the limit of the paragraph.
- *        The l-value that you point to here may be the
- *        same expression (variable) as the one for
- *        <code>charIndex</code>.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pParaLevel will receive the level of the paragraph.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The index of the paragraph containing the specified position.
- *
- * @see ubidi_getProcessedLength
- * @stable ICU 3.4
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart,
-                   int32_t *pParaLimit, UBiDiLevel *pParaLevel,
-                   UErrorCode *pErrorCode);
-
-/**
- * Get a paragraph, given the index of this paragraph.
- *
- * This function returns information about a paragraph.<p>
- *
- * @param pBiDi is the paragraph <code>UBiDi</code> object.
- *
- * @param paraIndex is the number of the paragraph, in the
- *        range <code>[0..ubidi_countParagraphs(pBiDi)-1]</code>.
- *
- * @param pParaStart will receive the index of the first character of the
- *        paragraph in the text.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pParaLimit will receive the limit of the paragraph.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pParaLevel will receive the level of the paragraph.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @stable ICU 3.4
- */
-U_STABLE void U_EXPORT2
-ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
-                          int32_t *pParaStart, int32_t *pParaLimit,
-                          UBiDiLevel *pParaLevel, UErrorCode *pErrorCode);
-
-/**
- * Get the level for one character.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param charIndex the index of a character. It must be in the range
- *         [0..ubidi_getProcessedLength(pBiDi)].
- *
- * @return The level for the character at charIndex (0 if charIndex is not
- *         in the valid range).
- *
- * @see UBiDiLevel
- * @see ubidi_getProcessedLength
- * @stable ICU 2.0
- */
-U_STABLE UBiDiLevel U_EXPORT2
-ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex);
-
-/**
- * Get an array of levels for each character.<p>
- *
- * Note that this function may allocate memory under some
- * circumstances, unlike <code>ubidi_getLevelAt()</code>.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object, whose
- *        text length must be strictly positive.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The levels array for the text,
- *         or <code>NULL</code> if an error occurs.
- *
- * @see UBiDiLevel
- * @see ubidi_getProcessedLength
- * @stable ICU 2.0
- */
-U_STABLE const UBiDiLevel * U_EXPORT2
-ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
-
-/**
- * Get a logical run.
- * This function returns information about a run and is used
- * to retrieve runs in logical order.<p>
- * This is especially useful for line-breaking on a paragraph.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param logicalPosition is a logical position within the source text.
- *
- * @param pLogicalLimit will receive the limit of the corresponding run.
- *        The l-value that you point to here may be the
- *        same expression (variable) as the one for
- *        <code>logicalPosition</code>.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @param pLevel will receive the level of the corresponding run.
- *        This pointer can be <code>NULL</code> if this
- *        value is not necessary.
- *
- * @see ubidi_getProcessedLength
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
-                    int32_t *pLogicalLimit, UBiDiLevel *pLevel);
-
-/**
- * Get the number of runs.
- * This function may invoke the actual reordering on the
- * <code>UBiDi</code> object, after <code>ubidi_setPara()</code>
- * may have resolved only the levels of the text. Therefore,
- * <code>ubidi_countRuns()</code> may have to allocate memory,
- * and may fail doing so.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The number of runs.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
-
-/**
- * Get one run's logical start, length, and directionality,
- * which can be 0 for LTR or 1 for RTL.
- * In an RTL run, the character at the logical start is
- * visually on the right of the displayed run.
- * The length is the number of characters in the run.<p>
- * <code>ubidi_countRuns()</code> should be called
- * before the runs are retrieved.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param runIndex is the number of the run in visual order, in the
- *        range <code>[0..ubidi_countRuns(pBiDi)-1]</code>.
- *
- * @param pLogicalStart is the first logical character index in the text.
- *        The pointer may be <code>NULL</code> if this index is not needed.
- *
- * @param pLength is the number of characters (at least one) in the run.
- *        The pointer may be <code>NULL</code> if this is not needed.
- *
- * @return the directionality of the run,
- *         <code>UBIDI_LTR==0</code> or <code>UBIDI_RTL==1</code>,
- *         never <code>UBIDI_MIXED</code>,
- *         never <code>UBIDI_NEUTRAL</code>.
- *
- * @see ubidi_countRuns
- *
- * Example:
- * <pre>
- * \code
- * int32_t i, count=ubidi_countRuns(pBiDi),
- *         logicalStart, visualIndex=0, length;
- * for(i=0; i<count; ++i) {
- *    if(UBIDI_LTR==ubidi_getVisualRun(pBiDi, i, &logicalStart, &length)) {
- *         do { // LTR
- *             show_char(text[logicalStart++], visualIndex++);
- *         } while(--length>0);
- *     } else {
- *         logicalStart+=length;  // logicalLimit
- *         do { // RTL
- *             show_char(text[--logicalStart], visualIndex++);
- *         } while(--length>0);
- *     }
- * }
- *\endcode
- * </pre>
- *
- * Note that in right-to-left runs, code like this places
- * second surrogates before first ones (which is generally a bad idea)
- * and combining characters before base characters.
- * <p>
- * Use of <code>ubidi_writeReordered()</code>, optionally with the
- * <code>#UBIDI_KEEP_BASE_COMBINING</code> option, can be considered in order
- * to avoid these issues.
- * @stable ICU 2.0
- */
-U_STABLE UBiDiDirection U_EXPORT2
-ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
-                   int32_t *pLogicalStart, int32_t *pLength);
-
-/**
- * Get the visual position from a logical text position.
- * If such a mapping is used many times on the same
- * <code>UBiDi</code> object, then calling
- * <code>ubidi_getLogicalMap()</code> is more efficient.<p>
- *
- * The value returned may be <code>#UBIDI_MAP_NOWHERE</code> if there is no
- * visual position because the corresponding text character is a Bidi control
- * removed from output by the option <code>#UBIDI_OPTION_REMOVE_CONTROLS</code>.
- * <p>
- * When the visual output is altered by using options of
- * <code>ubidi_writeReordered()</code> such as <code>UBIDI_INSERT_LRM_FOR_NUMERIC</code>,
- * <code>UBIDI_KEEP_BASE_COMBINING</code>, <code>UBIDI_OUTPUT_REVERSE</code>,
- * <code>UBIDI_REMOVE_BIDI_CONTROLS</code>, the visual position returned may not
- * be correct. It is advised to use, when possible, reordering options
- * such as <code>UBIDI_OPTION_INSERT_MARKS</code> and <code>UBIDI_OPTION_REMOVE_CONTROLS</code>.
- * <p>
- * Note that in right-to-left runs, this mapping places
- * second surrogates before first ones (which is generally a bad idea)
- * and combining characters before base characters.
- * Use of <code>ubidi_writeReordered()</code>, optionally with the
- * <code>#UBIDI_KEEP_BASE_COMBINING</code> option can be considered instead
- * of using the mapping, in order to avoid these issues.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param logicalIndex is the index of a character in the text.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The visual position of this character.
- *
- * @see ubidi_getLogicalMap
- * @see ubidi_getLogicalIndex
- * @see ubidi_getProcessedLength
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode);
-
-/**
- * Get the logical text position from a visual position.
- * If such a mapping is used many times on the same
- * <code>UBiDi</code> object, then calling
- * <code>ubidi_getVisualMap()</code> is more efficient.<p>
- *
- * The value returned may be <code>#UBIDI_MAP_NOWHERE</code> if there is no
- * logical position because the corresponding text character is a Bidi mark
- * inserted in the output by option <code>#UBIDI_OPTION_INSERT_MARKS</code>.
- * <p>
- * This is the inverse function to <code>ubidi_getVisualIndex()</code>.
- * <p>
- * When the visual output is altered by using options of
- * <code>ubidi_writeReordered()</code> such as <code>UBIDI_INSERT_LRM_FOR_NUMERIC</code>,
- * <code>UBIDI_KEEP_BASE_COMBINING</code>, <code>UBIDI_OUTPUT_REVERSE</code>,
- * <code>UBIDI_REMOVE_BIDI_CONTROLS</code>, the logical position returned may not
- * be correct. It is advised to use, when possible, reordering options
- * such as <code>UBIDI_OPTION_INSERT_MARKS</code> and <code>UBIDI_OPTION_REMOVE_CONTROLS</code>.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param visualIndex is the visual position of a character.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The index of this character in the text.
- *
- * @see ubidi_getVisualMap
- * @see ubidi_getVisualIndex
- * @see ubidi_getResultLength
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode);
-
-/**
- * Get a logical-to-visual index map (array) for the characters in the UBiDi
- * (paragraph or line) object.
- * <p>
- * Some values in the map may be <code>#UBIDI_MAP_NOWHERE</code> if the
- * corresponding text characters are Bidi controls removed from the visual
- * output by the option <code>#UBIDI_OPTION_REMOVE_CONTROLS</code>.
- * <p>
- * When the visual output is altered by using options of
- * <code>ubidi_writeReordered()</code> such as <code>UBIDI_INSERT_LRM_FOR_NUMERIC</code>,
- * <code>UBIDI_KEEP_BASE_COMBINING</code>, <code>UBIDI_OUTPUT_REVERSE</code>,
- * <code>UBIDI_REMOVE_BIDI_CONTROLS</code>, the visual positions returned may not
- * be correct. It is advised to use, when possible, reordering options
- * such as <code>UBIDI_OPTION_INSERT_MARKS</code> and <code>UBIDI_OPTION_REMOVE_CONTROLS</code>.
- * <p>
- * Note that in right-to-left runs, this mapping places
- * second surrogates before first ones (which is generally a bad idea)
- * and combining characters before base characters.
- * Use of <code>ubidi_writeReordered()</code>, optionally with the
- * <code>#UBIDI_KEEP_BASE_COMBINING</code> option can be considered instead
- * of using the mapping, in order to avoid these issues.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param indexMap is a pointer to an array of <code>ubidi_getProcessedLength()</code>
- *        indexes which will reflect the reordering of the characters.
- *        If option <code>#UBIDI_OPTION_INSERT_MARKS</code> is set, the number
- *        of elements allocated in <code>indexMap</code> must be no less than
- *        <code>ubidi_getResultLength()</code>.
- *        The array does not need to be initialized.<br><br>
- *        The index map will result in <code>indexMap[logicalIndex]==visualIndex</code>.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @see ubidi_getVisualMap
- * @see ubidi_getVisualIndex
- * @see ubidi_getProcessedLength
- * @see ubidi_getResultLength
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
-
-/**
- * Get a visual-to-logical index map (array) for the characters in the UBiDi
- * (paragraph or line) object.
- * <p>
- * Some values in the map may be <code>#UBIDI_MAP_NOWHERE</code> if the
- * corresponding text characters are Bidi marks inserted in the visual output
- * by the option <code>#UBIDI_OPTION_INSERT_MARKS</code>.
- * <p>
- * When the visual output is altered by using options of
- * <code>ubidi_writeReordered()</code> such as <code>UBIDI_INSERT_LRM_FOR_NUMERIC</code>,
- * <code>UBIDI_KEEP_BASE_COMBINING</code>, <code>UBIDI_OUTPUT_REVERSE</code>,
- * <code>UBIDI_REMOVE_BIDI_CONTROLS</code>, the logical positions returned may not
- * be correct. It is advised to use, when possible, reordering options
- * such as <code>UBIDI_OPTION_INSERT_MARKS</code> and <code>UBIDI_OPTION_REMOVE_CONTROLS</code>.
- *
- * @param pBiDi is the paragraph or line <code>UBiDi</code> object.
- *
- * @param indexMap is a pointer to an array of <code>ubidi_getResultLength()</code>
- *        indexes which will reflect the reordering of the characters.
- *        If option <code>#UBIDI_OPTION_REMOVE_CONTROLS</code> is set, the number
- *        of elements allocated in <code>indexMap</code> must be no less than
- *        <code>ubidi_getProcessedLength()</code>.
- *        The array does not need to be initialized.<br><br>
- *        The index map will result in <code>indexMap[visualIndex]==logicalIndex</code>.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @see ubidi_getLogicalMap
- * @see ubidi_getLogicalIndex
- * @see ubidi_getProcessedLength
- * @see ubidi_getResultLength
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
-
-/**
- * This is a convenience function that does not use a UBiDi object.
- * It is intended to be used for when an application has determined the levels
- * of objects (character sequences) and just needs to have them reordered (L2).
- * This is equivalent to using <code>ubidi_getLogicalMap()</code> on a
- * <code>UBiDi</code> object.
- *
- * @param levels is an array with <code>length</code> levels that have been determined by
- *        the application.
- *
- * @param length is the number of levels in the array, or, semantically,
- *        the number of objects to be reordered.
- *        It must be <code>length>0</code>.
- *
- * @param indexMap is a pointer to an array of <code>length</code>
- *        indexes which will reflect the reordering of the characters.
- *        The array does not need to be initialized.<p>
- *        The index map will result in <code>indexMap[logicalIndex]==visualIndex</code>.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
-
-/**
- * This is a convenience function that does not use a UBiDi object.
- * It is intended to be used for when an application has determined the levels
- * of objects (character sequences) and just needs to have them reordered (L2).
- * This is equivalent to using <code>ubidi_getVisualMap()</code> on a
- * <code>UBiDi</code> object.
- *
- * @param levels is an array with <code>length</code> levels that have been determined by
- *        the application.
- *
- * @param length is the number of levels in the array, or, semantically,
- *        the number of objects to be reordered.
- *        It must be <code>length>0</code>.
- *
- * @param indexMap is a pointer to an array of <code>length</code>
- *        indexes which will reflect the reordering of the characters.
- *        The array does not need to be initialized.<p>
- *        The index map will result in <code>indexMap[visualIndex]==logicalIndex</code>.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
-
-/**
- * Invert an index map.
- * The index mapping of the first map is inverted and written to
- * the second one.
- *
- * @param srcMap is an array with <code>length</code> elements
- *        which defines the original mapping from a source array containing
- *        <code>length</code> elements to a destination array.
- *        Some elements of the source array may have no mapping in the
- *        destination array. In that case, their value will be
- *        the special value <code>UBIDI_MAP_NOWHERE</code>.
- *        All elements must be >=0 or equal to <code>UBIDI_MAP_NOWHERE</code>.
- *        Some elements may have a value >= <code>length</code>, if the
- *        destination array has more elements than the source array.
- *        There must be no duplicate indexes (two or more elements with the
- *        same value except <code>UBIDI_MAP_NOWHERE</code>).
- *
- * @param destMap is an array with a number of elements equal to 1 + the highest
- *        value in <code>srcMap</code>.
- *        <code>destMap</code> will be filled with the inverse mapping.
- *        If element with index i in <code>srcMap</code> has a value k different
- *        from <code>UBIDI_MAP_NOWHERE</code>, this means that element i of
- *        the source array maps to element k in the destination array.
- *        The inverse map will have value i in its k-th element.
- *        For all elements of the destination array which do not map to
- *        an element in the source array, the corresponding element in the
- *        inverse map will have a value equal to <code>UBIDI_MAP_NOWHERE</code>.
- *
- * @param length is the length of each array.
- * @see UBIDI_MAP_NOWHERE
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
-
-/** option flags for ubidi_writeReordered() */
-
-/**
- * option bit for ubidi_writeReordered():
- * keep combining characters after their base characters in RTL runs
- *
- * @see ubidi_writeReordered
- * @stable ICU 2.0
- */
-#define UBIDI_KEEP_BASE_COMBINING       1
-
-/**
- * option bit for ubidi_writeReordered():
- * replace characters with the "mirrored" property in RTL runs
- * by their mirror-image mappings
- *
- * @see ubidi_writeReordered
- * @stable ICU 2.0
- */
-#define UBIDI_DO_MIRRORING              2
-
-/**
- * option bit for ubidi_writeReordered():
- * surround the run with LRMs if necessary;
- * this is part of the approximate "inverse Bidi" algorithm
- *
- * <p>This option does not imply corresponding adjustment of the index
- * mappings.</p>
- *
- * @see ubidi_setInverse
- * @see ubidi_writeReordered
- * @stable ICU 2.0
- */
-#define UBIDI_INSERT_LRM_FOR_NUMERIC    4
-
-/**
- * option bit for ubidi_writeReordered():
- * remove Bidi control characters
- * (this does not affect #UBIDI_INSERT_LRM_FOR_NUMERIC)
- *
- * <p>This option does not imply corresponding adjustment of the index
- * mappings.</p>
- *
- * @see ubidi_writeReordered
- * @stable ICU 2.0
- */
-#define UBIDI_REMOVE_BIDI_CONTROLS      8
-
-/**
- * option bit for ubidi_writeReordered():
- * write the output in reverse order
- *
- * <p>This has the same effect as calling <code>ubidi_writeReordered()</code>
- * first without this option, and then calling
- * <code>ubidi_writeReverse()</code> without mirroring.
- * Doing this in the same step is faster and avoids a temporary buffer.
- * An example for using this option is output to a character terminal that
- * is designed for RTL scripts and stores text in reverse order.</p>
- *
- * @see ubidi_writeReordered
- * @stable ICU 2.0
- */
-#define UBIDI_OUTPUT_REVERSE            16
-
-/**
- * Get the length of the source text processed by the last call to
- * <code>ubidi_setPara()</code>. This length may be different from the length
- * of the source text if option <code>#UBIDI_OPTION_STREAMING</code>
- * has been set.
- * <br>
- * Note that whenever the length of the text affects the execution or the
- * result of a function, it is the processed length which must be considered,
- * except for <code>ubidi_setPara</code> (which receives unprocessed source
- * text) and <code>ubidi_getLength</code> (which returns the original length
- * of the source text).<br>
- * In particular, the processed length is the one to consider in the following
- * cases:
- * <ul>
- * <li>maximum value of the <code>limit</code> argument of
- * <code>ubidi_setLine</code></li>
- * <li>maximum value of the <code>charIndex</code> argument of
- * <code>ubidi_getParagraph</code></li>
- * <li>maximum value of the <code>charIndex</code> argument of
- * <code>ubidi_getLevelAt</code></li>
- * <li>number of elements in the array returned by <code>ubidi_getLevels</code></li>
- * <li>maximum value of the <code>logicalStart</code> argument of
- * <code>ubidi_getLogicalRun</code></li>
- * <li>maximum value of the <code>logicalIndex</code> argument of
- * <code>ubidi_getVisualIndex</code></li>
- * <li>number of elements filled in the <code>*indexMap</code> argument of
- * <code>ubidi_getLogicalMap</code></li>
- * <li>length of text processed by <code>ubidi_writeReordered</code></li>
- * </ul>
- *
- * @param pBiDi is the paragraph <code>UBiDi</code> object.
- *
- * @return The length of the part of the source text processed by
- *         the last call to <code>ubidi_setPara</code>.
- * @see ubidi_setPara
- * @see UBIDI_OPTION_STREAMING
- * @stable ICU 3.6
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_getProcessedLength(const UBiDi *pBiDi);
-
-/**
- * Get the length of the reordered text resulting from the last call to
- * <code>ubidi_setPara()</code>. This length may be different from the length
- * of the source text if option <code>#UBIDI_OPTION_INSERT_MARKS</code>
- * or option <code>#UBIDI_OPTION_REMOVE_CONTROLS</code> has been set.
- * <br>
- * This resulting length is the one to consider in the following cases:
- * <ul>
- * <li>maximum value of the <code>visualIndex</code> argument of
- * <code>ubidi_getLogicalIndex</code></li>
- * <li>number of elements of the <code>*indexMap</code> argument of
- * <code>ubidi_getVisualMap</code></li>
- * </ul>
- * Note that this length stays identical to the source text length if
- * Bidi marks are inserted or removed using option bits of
- * <code>ubidi_writeReordered</code>, or if option
- * <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code> has been set.
- *
- * @param pBiDi is the paragraph <code>UBiDi</code> object.
- *
- * @return The length of the reordered text resulting from
- *         the last call to <code>ubidi_setPara</code>.
- * @see ubidi_setPara
- * @see UBIDI_OPTION_INSERT_MARKS
- * @see UBIDI_OPTION_REMOVE_CONTROLS
- * @stable ICU 3.6
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_getResultLength(const UBiDi *pBiDi);
-
-U_CDECL_BEGIN
-/**
- * value returned by <code>UBiDiClassCallback</code> callbacks when
- * there is no need to override the standard Bidi class for a given code point.
- * @see UBiDiClassCallback
- * @stable ICU 3.6
- */
-#define U_BIDI_CLASS_DEFAULT  U_CHAR_DIRECTION_COUNT
-
-/**
- * Callback type declaration for overriding default Bidi class values with
- * custom ones.
- * <p>Usually, the function pointer will be propagated to a <code>UBiDi</code>
- * object by calling the <code>ubidi_setClassCallback()</code> function;
- * then the callback will be invoked by the UBA implementation any time the
- * class of a character is to be determined.</p>
- *
- * @param context is a pointer to the callback private data.
- *
- * @param c       is the code point to get a Bidi class for.
- *
- * @return The directional property / Bidi class for the given code point
- *         <code>c</code> if the default class has been overridden, or
- *         <code>#U_BIDI_CLASS_DEFAULT</code> if the standard Bidi class value
- *         for <code>c</code> is to be used.
- * @see ubidi_setClassCallback
- * @see ubidi_getClassCallback
- * @stable ICU 3.6
- */
-typedef UCharDirection U_CALLCONV
-UBiDiClassCallback(const void *context, UChar32 c);
-
-U_CDECL_END
-
-/**
- * Retrieve the Bidi class for a given code point.
- * <p>If a <code>#UBiDiClassCallback</code> callback is defined and returns a
- * value other than <code>#U_BIDI_CLASS_DEFAULT</code>, that value is used;
- * otherwise the default class determination mechanism is invoked.</p>
- *
- * @param pBiDi is the paragraph <code>UBiDi</code> object.
- *
- * @param c     is the code point whose Bidi class must be retrieved.
- *
- * @return The Bidi class for character <code>c</code> based
- *         on the given <code>pBiDi</code> instance.
- * @see UBiDiClassCallback
- * @stable ICU 3.6
- */
-U_STABLE UCharDirection U_EXPORT2
-ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c);
-
-/**
- * Set the callback function and callback data used by the UBA
- * implementation for Bidi class determination.
- * <p>This may be useful for assigning Bidi classes to PUA characters, or
- * for special application needs. For instance, an application may want to
- * handle all spaces like L or R characters (according to the base direction)
- * when creating the visual ordering of logical lines which are part of a report
- * organized in columns: there should not be interaction between adjacent
- * cells.<p>
- *
- * @param pBiDi is the paragraph <code>UBiDi</code> object.
- *
- * @param newFn is the new callback function pointer.
- *
- * @param newContext is the new callback context pointer. This can be NULL.
- *
- * @param oldFn fillin: Returns the old callback function pointer. This can be
- *                      NULL.
- *
- * @param oldContext fillin: Returns the old callback's context. This can be
- *                           NULL.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @see ubidi_getClassCallback
- * @stable ICU 3.6
- */
-U_STABLE void U_EXPORT2
-ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
-                       const void *newContext, UBiDiClassCallback **oldFn,
-                       const void **oldContext, UErrorCode *pErrorCode);
-
-/**
- * Get the current callback function used for Bidi class determination.
- *
- * @param pBiDi is the paragraph <code>UBiDi</code> object.
- *
- * @param fn fillin: Returns the callback function pointer.
- *
- * @param context fillin: Returns the callback's private context.
- *
- * @see ubidi_setClassCallback
- * @stable ICU 3.6
- */
-U_STABLE void U_EXPORT2
-ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context);
-
-/**
- * Take a <code>UBiDi</code> object containing the reordering
- * information for a piece of text (one or more paragraphs) set by
- * <code>ubidi_setPara()</code> or for a line of text set by
- * <code>ubidi_setLine()</code> and write a reordered string to the
- * destination buffer.
- *
- * This function preserves the integrity of characters with multiple
- * code units and (optionally) combining characters.
- * Characters in RTL runs can be replaced by mirror-image characters
- * in the destination buffer. Note that "real" mirroring has
- * to be done in a rendering engine by glyph selection
- * and that for many "mirrored" characters there are no
- * Unicode characters as mirror-image equivalents.
- * There are also options to insert or remove Bidi control
- * characters; see the description of the <code>destSize</code>
- * and <code>options</code> parameters and of the option bit flags.
- *
- * @param pBiDi A pointer to a <code>UBiDi</code> object that
- *              is set by <code>ubidi_setPara()</code> or
- *              <code>ubidi_setLine()</code> and contains the reordering
- *              information for the text that it was defined for,
- *              as well as a pointer to that text.<br><br>
- *              The text was aliased (only the pointer was stored
- *              without copying the contents) and must not have been modified
- *              since the <code>ubidi_setPara()</code> call.
- *
- * @param dest A pointer to where the reordered text is to be copied.
- *             The source text and <code>dest[destSize]</code>
- *             must not overlap.
- *
- * @param destSize The size of the <code>dest</code> buffer,
- *                 in number of UChars.
- *                 If the <code>UBIDI_INSERT_LRM_FOR_NUMERIC</code>
- *                 option is set, then the destination length could be
- *                 as large as
- *                 <code>ubidi_getLength(pBiDi)+2*ubidi_countRuns(pBiDi)</code>.
- *                 If the <code>UBIDI_REMOVE_BIDI_CONTROLS</code> option
- *                 is set, then the destination length may be less than
- *                 <code>ubidi_getLength(pBiDi)</code>.
- *                 If none of these options is set, then the destination length
- *                 will be exactly <code>ubidi_getProcessedLength(pBiDi)</code>.
- *
- * @param options A bit set of options for the reordering that control
- *                how the reordered text is written.
- *                The options include mirroring the characters on a code
- *                point basis and inserting LRM characters, which is used
- *                especially for transforming visually stored text
- *                to logically stored text (although this is still an
- *                imperfect implementation of an "inverse Bidi" algorithm
- *                because it uses the "forward Bidi" algorithm at its core).
- *                The available options are:
- *                <code>#UBIDI_DO_MIRRORING</code>,
- *                <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code>,
- *                <code>#UBIDI_KEEP_BASE_COMBINING</code>,
- *                <code>#UBIDI_OUTPUT_REVERSE</code>,
- *                <code>#UBIDI_REMOVE_BIDI_CONTROLS</code>
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The length of the output string.
- *
- * @see ubidi_getProcessedLength
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_writeReordered(UBiDi *pBiDi,
-                     UChar *dest, int32_t destSize,
-                     uint16_t options,
-                     UErrorCode *pErrorCode);
-
-/**
- * Reverse a Right-To-Left run of Unicode text.
- *
- * This function preserves the integrity of characters with multiple
- * code units and (optionally) combining characters.
- * Characters can be replaced by mirror-image characters
- * in the destination buffer. Note that "real" mirroring has
- * to be done in a rendering engine by glyph selection
- * and that for many "mirrored" characters there are no
- * Unicode characters as mirror-image equivalents.
- * There are also options to insert or remove Bidi control
- * characters.
- *
- * This function is the implementation for reversing RTL runs as part
- * of <code>ubidi_writeReordered()</code>. For detailed descriptions
- * of the parameters, see there.
- * Since no Bidi controls are inserted here, the output string length
- * will never exceed <code>srcLength</code>.
- *
- * @see ubidi_writeReordered
- *
- * @param src A pointer to the RTL run text.
- *
- * @param srcLength The length of the RTL run.
- *
- * @param dest A pointer to where the reordered text is to be copied.
- *             <code>src[srcLength]</code> and <code>dest[destSize]</code>
- *             must not overlap.
- *
- * @param destSize The size of the <code>dest</code> buffer,
- *                 in number of UChars.
- *                 If the <code>UBIDI_REMOVE_BIDI_CONTROLS</code> option
- *                 is set, then the destination length may be less than
- *                 <code>srcLength</code>.
- *                 If this option is not set, then the destination length
- *                 will be exactly <code>srcLength</code>.
- *
- * @param options A bit set of options for the reordering that control
- *                how the reordered text is written.
- *                See the <code>options</code> parameter in <code>ubidi_writeReordered()</code>.
- *
- * @param pErrorCode must be a valid pointer to an error code value.
- *
- * @return The length of the output string.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ubidi_writeReverse(const UChar *src, int32_t srcLength,
-                   UChar *dest, int32_t destSize,
-                   uint16_t options,
-                   UErrorCode *pErrorCode);
-
-/*#define BIDI_SAMPLE_CODE*/
-/*@}*/
-
-#endif
diff --git a/source/common/unicode/ubrk.h b/source/common/unicode/ubrk.h
deleted file mode 100644
index f8304a6..0000000
--- a/source/common/unicode/ubrk.h
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-******************************************************************************
-* Copyright (C) 1996-2010, 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"
-#include "unicode/localpointer.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 struct UBreakIterator 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 identifies the boundaries of
- * "Extended Grapheme Clusters", which are groupings of codepoints
- * that should be treated as character-like units for many text operations.
- * Please see Unicode Standard Annex #29, Unicode Text Segmentation,
- * http://www.unicode.org/reports/tr29/ for additional information 
- * on grapheme clusters and guidelines on their use.
- * <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 snippets 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);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUBreakIteratorPointer
- * "Smart pointer" class, closes a UBreakIterator via ubrk_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUBreakIteratorPointer, UBreakIterator, ubrk_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * 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
diff --git a/source/common/unicode/ucasemap.h b/source/common/unicode/ucasemap.h
deleted file mode 100644
index 483f84f..0000000
--- a/source/common/unicode/ucasemap.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2005-2010, 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"
-#include "unicode/localpointer.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);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUCaseMapPointer
- * "Smart pointer" class, closes a UCaseMap via ucasemap_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUCaseMapPointer, UCaseMap, ucasemap_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * 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 3.8
- */
-#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 3.8
- */
-#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 3.8
- */
-U_STABLE 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 3.8
- */
-U_STABLE 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().)
- *
- * Note: This function takes a non-const UCaseMap pointer because it will
- * open a default break iterator if no break iterator was set yet,
- * and effectively call ucasemap_setBreakIterator();
- * also because the break iterator is stateful and will be modified during
- * the iteration.
- *
- * The titlecase break iterator can be provided to customize for arbitrary
- * styles, using rules and dictionaries beyond the standard iterators.
- * The standard titlecase iterator for the root locale implements the
- * algorithm of Unicode TR 21.
- *
- * This function uses only the setUText(), first(), next() and close() 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. This pointer is non-const!
- *                  See the note above for details.
- * @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 3.8
- */
-U_STABLE 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().)
- *
- * Note: This function takes a non-const UCaseMap pointer because it will
- * open a default break iterator if no break iterator was set yet,
- * and effectively call ucasemap_setBreakIterator();
- * also because the break iterator is stateful and will be modified during
- * the iteration.
- *
- * The titlecase break iterator can be provided to customize for arbitrary
- * styles, using rules and dictionaries beyond the standard iterators.
- * The standard titlecase iterator for the root locale implements the
- * algorithm of Unicode TR 21.
- *
- * This function uses only the setUText(), first(), next() and close() 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. This pointer is non-const!
- *                  See the note above for details.
- * @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 3.8
- */
-U_STABLE 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 3.8
- */
-U_STABLE int32_t U_EXPORT2
-ucasemap_utf8FoldCase(const UCaseMap *csm,
-                      char *dest, int32_t destCapacity,
-                      const char *src, int32_t srcLength,
-                      UErrorCode *pErrorCode);
-
-#endif
diff --git a/source/common/unicode/ucat.h b/source/common/unicode/ucat.h
deleted file mode 100644
index ad9f037..0000000
--- a/source/common/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*/
diff --git a/source/common/unicode/uchar.h b/source/common/unicode/uchar.h
deleted file mode 100644
index 93aa663..0000000
--- a/source/common/unicode/uchar.h
+++ /dev/null
@@ -1,3168 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1997-2010, 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 "6.0"
-
-/**
- * \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.
-        See the documentation for the Normalizer2 class and the
-        Normalizer2::isInert() method.
-        @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.
-        See the documentation for the Normalizer2 class and the
-        Normalizer2::isInert() method.
-        @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.
-        See the documentation for the Normalizer2 class and the
-        Normalizer2::isInert() method.
-        @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.
-        See the documentation for the Normalizer2 class and the
-        Normalizer2::isInert() method.
-        @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 a-umlaut in NFD 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,
-    /** Binary property Cased. For Lowercase, Uppercase and Titlecase characters. @stable ICU 4.4 */
-    UCHAR_CASED=49,
-    /** Binary property Case_Ignorable. Used in context-sensitive case mappings. @stable ICU 4.4 */
-    UCHAR_CASE_IGNORABLE=50,
-    /** Binary property Changes_When_Lowercased. @stable ICU 4.4 */
-    UCHAR_CHANGES_WHEN_LOWERCASED=51,
-    /** Binary property Changes_When_Uppercased. @stable ICU 4.4 */
-    UCHAR_CHANGES_WHEN_UPPERCASED=52,
-    /** Binary property Changes_When_Titlecased. @stable ICU 4.4 */
-    UCHAR_CHANGES_WHEN_TITLECASED=53,
-    /** Binary property Changes_When_Casefolded. @stable ICU 4.4 */
-    UCHAR_CHANGES_WHEN_CASEFOLDED=54,
-    /** Binary property Changes_When_Casemapped. @stable ICU 4.4 */
-    UCHAR_CHANGES_WHEN_CASEMAPPED=55,
-    /** Binary property Changes_When_NFKC_Casefolded. @stable ICU 4.4 */
-    UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED=56,
-    /** One more than the last constant for binary Unicode properties. @stable ICU 2.1 */
-    UCHAR_BINARY_LIMIT=57,
-
-    /** 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,
-
-    /** Provisional property Script_Extensions (new in Unicode 6.0).
-        As a provisional property, it may be modified or removed
-        in future versions of the Unicode Standard, and thus in ICU.
-        Some characters are commonly used in multiple scripts.
-        For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
-        Corresponds to uscript_hasScript and uscript_getScriptExtensions in uscript.h.
-        @draft ICU 4.6 */
-    UCHAR_SCRIPT_EXTENSIONS=0x7000,
-    /** First constant for Unicode properties with unusual value types. @draft ICU 4.6 */
-    UCHAR_OTHER_PROPERTY_START=UCHAR_SCRIPT_EXTENSIONS,
-    /** One more than the last constant for Unicode properties with unusual value types.
-     * @draft ICU 4.6 */
-    UCHAR_OTHER_PROPERTY_LIMIT=0x7001,
-
-    /** 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 */
-
-    /** @stable ICU 4.0 */
-    UBLOCK_SUNDANESE = 155, /*[1B80]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_LEPCHA = 156, /*[1C00]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_OL_CHIKI = 157, /*[1C50]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_CYRILLIC_EXTENDED_A = 158, /*[2DE0]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_VAI = 159, /*[A500]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_CYRILLIC_EXTENDED_B = 160, /*[A640]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_SAURASHTRA = 161, /*[A880]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_KAYAH_LI = 162, /*[A900]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_REJANG = 163, /*[A930]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_CHAM = 164, /*[AA00]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_ANCIENT_SYMBOLS = 165, /*[10190]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_PHAISTOS_DISC = 166, /*[101D0]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_LYCIAN = 167, /*[10280]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_CARIAN = 168, /*[102A0]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_LYDIAN = 169, /*[10920]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_MAHJONG_TILES = 170, /*[1F000]*/
-    /** @stable ICU 4.0 */
-    UBLOCK_DOMINO_TILES = 171, /*[1F030]*/
-
-    /* New blocks in Unicode 5.2 */
-
-    /** @stable ICU 4.4 */
-    UBLOCK_SAMARITAN = 172, /*[0800]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED = 173, /*[18B0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_TAI_THAM = 174, /*[1A20]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_VEDIC_EXTENSIONS = 175, /*[1CD0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_LISU = 176, /*[A4D0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_BAMUM = 177, /*[A6A0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_COMMON_INDIC_NUMBER_FORMS = 178, /*[A830]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_DEVANAGARI_EXTENDED = 179, /*[A8E0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_HANGUL_JAMO_EXTENDED_A = 180, /*[A960]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_JAVANESE = 181, /*[A980]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_MYANMAR_EXTENDED_A = 182, /*[AA60]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_TAI_VIET = 183, /*[AA80]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_MEETEI_MAYEK = 184, /*[ABC0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_HANGUL_JAMO_EXTENDED_B = 185, /*[D7B0]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_IMPERIAL_ARAMAIC = 186, /*[10840]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_OLD_SOUTH_ARABIAN = 187, /*[10A60]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_AVESTAN = 188, /*[10B00]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_INSCRIPTIONAL_PARTHIAN = 189, /*[10B40]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_INSCRIPTIONAL_PAHLAVI = 190, /*[10B60]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_OLD_TURKIC = 191, /*[10C00]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_RUMI_NUMERAL_SYMBOLS = 192, /*[10E60]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_KAITHI = 193, /*[11080]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_EGYPTIAN_HIEROGLYPHS = 194, /*[13000]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_ENCLOSED_ALPHANUMERIC_SUPPLEMENT = 195, /*[1F100]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_ENCLOSED_IDEOGRAPHIC_SUPPLEMENT = 196, /*[1F200]*/
-    /** @stable ICU 4.4 */
-    UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C = 197, /*[2A700]*/
-
-    /* New blocks in Unicode 6.0 */
-
-    /** @stable ICU 4.6 */
-    UBLOCK_MANDAIC = 198, /*[0840]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_BATAK = 199, /*[1BC0]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_ETHIOPIC_EXTENDED_A = 200, /*[AB00]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_BRAHMI = 201, /*[11000]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_BAMUM_SUPPLEMENT = 202, /*[16800]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_KANA_SUPPLEMENT = 203, /*[1B000]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_PLAYING_CARDS = 204, /*[1F0A0]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS = 205, /*[1F300]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_EMOTICONS = 206, /*[1F600]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_TRANSPORT_AND_MAP_SYMBOLS = 207, /*[1F680]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_ALCHEMICAL_SYMBOLS = 208, /*[1F700]*/
-    /** @stable ICU 4.6 */
-    UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D = 209, /*[2B740]*/
-
-    /** @stable ICU 2.0 */
-    UBLOCK_COUNT = 210,
-
-    /** @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_ALIAS,          /**< Corrected name from NameAliases.txt. @stable ICU 4.4 */
-    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_TEH_MARBUTA_GOAL,  /**< @stable ICU 4.6 */
-    U_JG_HAMZA_ON_HEH_GOAL=U_JG_TEH_MARBUTA_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, /**< @stable ICU 4.0 */
-    U_JG_FARSI_YEH, /**< @stable ICU 4.4 */
-    U_JG_NYA,       /**< @stable ICU 4.4 */
-    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_CLOSE_PARENTHESIS = 36, /*[CP]*/ /* new in Unicode 5.2/ICU 4.4 */
-    U_LB_COUNT = 37
-} 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 character (categories "Z" = "Zs" or "Zl" or "Zp"), but is not
- *      also a non-breaking 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.
- *
- * This API tries to sync with the semantics of Java's
- * java.lang.Character.isWhitespace(), but it may not return
- * the exact same results because of the Unicode version
- * difference.
- *
- * Note: Unicode 4.0.1 changed U+200B ZERO WIDTH SPACE from a Space Separator (Zs)
- * to a Format Control (Cf). Since then, isWhitespace(0x200b) returns false.
- * See http://www.unicode.org/versions/Unicode4.0.1/
- *
- * 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.
- *               If there is no name, then the buffer will be set to the empty string.
- * @param bufferLength <code>==sizeof(buffer)</code>
- * @param pErrorCode Pointer to a UErrorCode variable;
- *        check for <code>U_SUCCESS()</code> after <code>u_charName()</code>
- *        returns.
- * @return The length of the name, or 0 if there is no name for this character.
- *         If the bufferLength is less than or equal to the length, then the buffer
- *         contains the truncated name and the returned length indicates the full
- *         length of the name.
- *         The length does not include the zero-termination.
- *
- * @see UCharNameChoice
- * @see u_charFromName
- * @see u_enumCharNames
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_charName(UChar32 code, UCharNameChoice nameChoice,
-           char *buffer, int32_t bufferLength,
-           UErrorCode *pErrorCode);
-
-/**
- * Get the ISO 10646 comment for a character.
- * The ISO 10646 comment is an informative field in the Unicode Character
- * Database (UnicodeData.txt field 11) and is from the ISO 10646 names list.
- *
- * Note: Unicode 5.2 removes all ISO comment data, resulting in empty strings
- * returned for all characters.
- *
- * @param c The character (code point) for which to get the ISO comment.
- *             It must be <code>0<=c<=0x10ffff</code>.
- * @param dest Destination address for copying the comment.
- *             The comment will be zero-terminated if possible.
- *             If there is no comment, then the buffer will be set to the empty string.
- * @param destCapacity <code>==sizeof(dest)</code>
- * @param pErrorCode Pointer to a UErrorCode variable;
- *        check for <code>U_SUCCESS()</code> after <code>u_getISOComment()</code>
- *        returns.
- * @return The length of the comment, or 0 if there is no comment for this character.
- *         If the destCapacity is less than or equal to the length, then the buffer
- *         contains the truncated name and the returned length indicates the full
- *         length of the name.
- *         The length does not include the zero-termination.
- *
- * @stable ICU 2.2
- */
-U_STABLE int32_t U_EXPORT2
-u_getISOComment(UChar32 c,
-                char *dest, int32_t destCapacity,
-                UErrorCode *pErrorCode);
-
-/**
- * Find a Unicode character by its name and return its code point value.
- * The name is matched exactly and completely.
- * If the name does not correspond to a code point, <i>pErrorCode</i>
- * is set to <code>U_INVALID_CHAR_FOUND</code>.
- * A Unicode 1.0 name is matched only if it differs from the modern name.
- * Unicode names are all uppercase. Extended names are lowercase followed
- * by an uppercase hexadecimal number, and within angle brackets.
- *
- * @param nameChoice Selector for which name to match.
- * @param name The name to match.
- * @param pErrorCode Pointer to a UErrorCode variable
- * @return The Unicode value of the code point with the given name,
- *         or an undefined value if there is no such code point.
- *
- * @see UCharNameChoice
- * @see u_charName
- * @see u_enumCharNames
- * @stable ICU 1.7
- */
-U_STABLE UChar32 U_EXPORT2
-u_charFromName(UCharNameChoice nameChoice,
-               const char *name,
-               UErrorCode *pErrorCode);
-
-/**
- * Type of a callback function for u_enumCharNames() that gets called
- * for each Unicode character with the code point value and
- * the character name.
- * If such a function returns FALSE, then the enumeration is stopped.
- *
- * @param context The context pointer that was passed to u_enumCharNames().
- * @param code The Unicode code point for the character with this name.
- * @param nameChoice Selector for which kind of names is enumerated.
- * @param name The character's name, zero-terminated.
- * @param length The length of the name.
- * @return TRUE if the enumeration should continue, FALSE to stop it.
- *
- * @see UCharNameChoice
- * @see u_enumCharNames
- * @stable ICU 1.7
- */
-typedef UBool U_CALLCONV UEnumCharNamesFn(void *context,
-                               UChar32 code,
-                               UCharNameChoice nameChoice,
-                               const char *name,
-                               int32_t length);
-
-/**
- * Enumerate all assigned Unicode characters between the start and limit
- * code points (start inclusive, limit exclusive) and call a function
- * for each, passing the code point value and the character name.
- * For Unicode 1.0 names, only those are enumerated that differ from the
- * modern names.
- *
- * @param start The first code point in the enumeration range.
- * @param limit One more than the last code point in the enumeration range
- *              (the first one after the range).
- * @param fn The function that is to be called for each character name.
- * @param context An arbitrary pointer that is passed to the function.
- * @param nameChoice Selector for which kind of names to enumerate.
- * @param pErrorCode Pointer to a UErrorCode variable
- *
- * @see UCharNameChoice
- * @see UEnumCharNamesFn
- * @see u_charName
- * @see u_charFromName
- * @stable ICU 1.7
- */
-U_STABLE void U_EXPORT2
-u_enumCharNames(UChar32 start, UChar32 limit,
-                UEnumCharNamesFn *fn,
-                void *context,
-                UCharNameChoice nameChoice,
-                UErrorCode *pErrorCode);
-
-/**
- * Return the Unicode name for a given property, as given in the
- * Unicode database file PropertyAliases.txt.
- *
- * In addition, this function maps the property
- * UCHAR_GENERAL_CATEGORY_MASK to the synthetic names "gcm" /
- * "General_Category_Mask".  These names are not in
- * PropertyAliases.txt.
- *
- * @param property UProperty selector other than UCHAR_INVALID_CODE.
- *         If out of range, NULL is returned.
- *
- * @param nameChoice selector for which name to get.  If out of range,
- *         NULL is returned.  All properties have a long name.  Most
- *         have a short name, but some do not.  Unicode allows for
- *         additional names; if present these will be returned by
- *         U_LONG_PROPERTY_NAME + i, where i=1, 2,...
- *
- * @return a pointer to the name, or NULL if either the
- *         property or the nameChoice is out of range.  If a given
- *         nameChoice returns NULL, then all larger values of
- *         nameChoice will return NULL, with one exception: if NULL is
- *         returned for U_SHORT_PROPERTY_NAME, then
- *         U_LONG_PROPERTY_NAME (and higher) may still return a
- *         non-NULL value.  The returned pointer is valid until
- *         u_cleanup() is called.
- *
- * @see UProperty
- * @see UPropertyNameChoice
- * @stable ICU 2.4
- */
-U_STABLE const char* U_EXPORT2
-u_getPropertyName(UProperty property,
-                  UPropertyNameChoice nameChoice);
-
-/**
- * Return the UProperty enum for a given property name, as specified
- * in the Unicode database file PropertyAliases.txt.  Short, long, and
- * any other variants are recognized.
- *
- * In addition, this function maps the synthetic names "gcm" /
- * "General_Category_Mask" to the property
- * UCHAR_GENERAL_CATEGORY_MASK.  These names are not in
- * PropertyAliases.txt.
- *
- * @param alias the property name to be matched.  The name is compared
- *         using "loose matching" as described in PropertyAliases.txt.
- *
- * @return a UProperty enum, or UCHAR_INVALID_CODE if the given name
- *         does not match any property.
- *
- * @see UProperty
- * @stable ICU 2.4
- */
-U_STABLE UProperty U_EXPORT2
-u_getPropertyEnum(const char* alias);
-
-/**
- * Return the Unicode name for a given property value, as given in the
- * Unicode database file PropertyValueAliases.txt.
- *
- * Note: Some of the names in PropertyValueAliases.txt can only be
- * retrieved using UCHAR_GENERAL_CATEGORY_MASK, not
- * UCHAR_GENERAL_CATEGORY.  These include: "C" / "Other", "L" /
- * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P"
- * / "Punctuation", "S" / "Symbol", and "Z" / "Separator".
- *
- * @param property UProperty selector constant.
- *        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.
- *        If out of range, NULL is returned.
- *
- * @param value selector for a value for the given property.  If out
- *         of range, NULL is returned.  In general, valid values range
- *         from 0 up to some maximum.  There are a few exceptions:
- *         (1.) UCHAR_BLOCK values begin at the non-zero value
- *         UBLOCK_BASIC_LATIN.  (2.)  UCHAR_CANONICAL_COMBINING_CLASS
- *         values are not contiguous and range from 0..240.  (3.)
- *         UCHAR_GENERAL_CATEGORY_MASK values are not values of
- *         UCharCategory, but rather mask values produced by
- *         U_GET_GC_MASK().  This allows grouped categories such as
- *         [:L:] to be represented.  Mask values range
- *         non-contiguously from 1..U_GC_P_MASK.
- *
- * @param nameChoice selector for which name to get.  If out of range,
- *         NULL is returned.  All values have a long name.  Most have
- *         a short name, but some do not.  Unicode allows for
- *         additional names; if present these will be returned by
- *         U_LONG_PROPERTY_NAME + i, where i=1, 2,...
-
- * @return a pointer to the name, or NULL if either the
- *         property or the nameChoice is out of range.  If a given
- *         nameChoice returns NULL, then all larger values of
- *         nameChoice will return NULL, with one exception: if NULL is
- *         returned for U_SHORT_PROPERTY_NAME, then
- *         U_LONG_PROPERTY_NAME (and higher) may still return a
- *         non-NULL value.  The returned pointer is valid until
- *         u_cleanup() is called.
- *
- * @see UProperty
- * @see UPropertyNameChoice
- * @stable ICU 2.4
- */
-U_STABLE const char* U_EXPORT2
-u_getPropertyValueName(UProperty property,
-                       int32_t value,
-                       UPropertyNameChoice nameChoice);
-
-/**
- * Return the property value integer for a given value name, as
- * specified in the Unicode database file PropertyValueAliases.txt.
- * Short, long, and any other variants are recognized.
- *
- * Note: Some of the names in PropertyValueAliases.txt will only be
- * recognized with UCHAR_GENERAL_CATEGORY_MASK, not
- * UCHAR_GENERAL_CATEGORY.  These include: "C" / "Other", "L" /
- * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P"
- * / "Punctuation", "S" / "Symbol", and "Z" / "Separator".
- *
- * @param property UProperty selector constant.
- *        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.
- *        If out of range, UCHAR_INVALID_CODE is returned.
- *
- * @param alias the value name to be matched.  The name is compared
- *         using "loose matching" as described in
- *         PropertyValueAliases.txt.
- *
- * @return a value integer or UCHAR_INVALID_CODE if the given name
- *         does not match any value of the given property, or if the
- *         property is invalid.  Note: UCHAR_GENERAL_CATEGORY_MASK values
- *         are not values of UCharCategory, but rather mask values
- *         produced by U_GET_GC_MASK().  This allows grouped
- *         categories such as [:L:] to be represented.
- *
- * @see UProperty
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-u_getPropertyValueEnum(UProperty property,
-                       const char* alias);
-
-/**
- * Determines if the specified character is permissible as the
- * first character in an identifier according to Unicode
- * (The Unicode Standard, Version 3.0, chapter 5.16 Identifiers).
- * True for characters with general categories "L" (letters) and "Nl" (letter numbers).
- *
- * Same as java.lang.Character.isUnicodeIdentifierStart().
- * Same as UCHAR_ID_START
- *
- * @param c the code point to be tested
- * @return TRUE if the code point may start an identifier
- *
- * @see UCHAR_ID_START
- * @see u_isalpha
- * @see u_isIDPart
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2
-u_isIDStart(UChar32 c);
-
-/**
- * Determines if the specified character is permissible
- * in an identifier according to Java.
- * True for characters with general categories "L" (letters),
- * "Nl" (letter numbers), "Nd" (decimal digits),
- * "Mc" and "Mn" (combining marks), "Pc" (connecting punctuation), and
- * u_isIDIgnorable(c).
- *
- * Same as java.lang.Character.isUnicodeIdentifierPart().
- * Almost the same as Unicode's ID_Continue (UCHAR_ID_CONTINUE)
- * except that Unicode recommends to ignore Cf which is less than
- * u_isIDIgnorable(c).
- *
- * @param c the code point to be tested
- * @return TRUE if the code point may occur in an identifier according to Java
- *
- * @see UCHAR_ID_CONTINUE
- * @see u_isIDStart
- * @see u_isIDIgnorable
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2
-u_isIDPart(UChar32 c);
-
-/**
- * Determines if the specified character should be regarded
- * as an ignorable character in an identifier,
- * according to Java.
- * True for characters with general category "Cf" (format controls) as well as
- * non-whitespace ISO controls
- * (U+0000..U+0008, U+000E..U+001B, U+007F..U+009F).
- *
- * Same as java.lang.Character.isIdentifierIgnorable().
- *
- * Note that Unicode just recommends to ignore Cf (format controls).
- *
- * @param c the code point to be tested
- * @return TRUE if the code point is ignorable in identifiers according to Java
- *
- * @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT
- * @see u_isIDStart
- * @see u_isIDPart
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2
-u_isIDIgnorable(UChar32 c);
-
-/**
- * Determines if the specified character is permissible as the
- * first character in a Java identifier.
- * In addition to u_isIDStart(c), true for characters with
- * general categories "Sc" (currency symbols) and "Pc" (connecting punctuation).
- *
- * Same as java.lang.Character.isJavaIdentifierStart().
- *
- * @param c the code point to be tested
- * @return TRUE if the code point may start a Java identifier
- *
- * @see     u_isJavaIDPart
- * @see     u_isalpha
- * @see     u_isIDStart
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2
-u_isJavaIDStart(UChar32 c);
-
-/**
- * Determines if the specified character is permissible
- * in a Java identifier.
- * In addition to u_isIDPart(c), true for characters with
- * general category "Sc" (currency symbols).
- *
- * Same as java.lang.Character.isJavaIdentifierPart().
- *
- * @param c the code point to be tested
- * @return TRUE if the code point may occur in a Java identifier
- *
- * @see     u_isIDIgnorable
- * @see     u_isJavaIDStart
- * @see     u_isalpha
- * @see     u_isdigit
- * @see     u_isIDPart
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2
-u_isJavaIDPart(UChar32 c);
-
-/**
- * The given character is mapped to its lowercase equivalent according to
- * UnicodeData.txt; if the character has no lowercase equivalent, the character
- * itself is returned.
- *
- * Same as java.lang.Character.toLowerCase().
- *
- * This function only returns the simple, single-code point case mapping.
- * Full case mappings should be used whenever possible because they produce
- * better results by working on whole strings.
- * They take into account the string context and the language and can map
- * to a result string with a different length as appropriate.
- * Full case mappings are applied by the string case mapping functions,
- * see ustring.h and the UnicodeString class.
- * See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
- *
- * @param c the code point to be mapped
- * @return the Simple_Lowercase_Mapping of the code point, if any;
- *         otherwise the code point itself.
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-u_tolower(UChar32 c);
-
-/**
- * The given character is mapped to its uppercase equivalent according to UnicodeData.txt;
- * if the character has no uppercase equivalent, the character itself is
- * returned.
- *
- * Same as java.lang.Character.toUpperCase().
- *
- * This function only returns the simple, single-code point case mapping.
- * Full case mappings should be used whenever possible because they produce
- * better results by working on whole strings.
- * They take into account the string context and the language and can map
- * to a result string with a different length as appropriate.
- * Full case mappings are applied by the string case mapping functions,
- * see ustring.h and the UnicodeString class.
- * See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
- *
- * @param c the code point to be mapped
- * @return the Simple_Uppercase_Mapping of the code point, if any;
- *         otherwise the code point itself.
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-u_toupper(UChar32 c);
-
-/**
- * The given character is mapped to its titlecase equivalent
- * according to UnicodeData.txt;
- * if none is defined, the character itself is returned.
- *
- * Same as java.lang.Character.toTitleCase().
- *
- * This function only returns the simple, single-code point case mapping.
- * Full case mappings should be used whenever possible because they produce
- * better results by working on whole strings.
- * They take into account the string context and the language and can map
- * to a result string with a different length as appropriate.
- * Full case mappings are applied by the string case mapping functions,
- * see ustring.h and the UnicodeString class.
- * See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
- *
- * @param c the code point to be mapped
- * @return the Simple_Titlecase_Mapping of the code point, if any;
- *         otherwise the code point itself.
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-u_totitle(UChar32 c);
-
-/** Option value for case folding: use default mappings defined in CaseFolding.txt. @stable ICU 2.0 */
-#define U_FOLD_CASE_DEFAULT 0
-
-/**
- * Option value for case folding:
- *
- * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I
- * and dotless i appropriately for Turkic languages (tr, az).
- *
- * Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that
- * are to be included for default mappings and
- * excluded for the Turkic-specific mappings.
- *
- * Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that
- * are to be excluded for default mappings and
- * included for the Turkic-specific mappings.
- *
- * @stable ICU 2.0
- */
-#define U_FOLD_CASE_EXCLUDE_SPECIAL_I 1
-
-/**
- * The given character is mapped to its case folding equivalent according to
- * UnicodeData.txt and CaseFolding.txt;
- * if the character has no case folding equivalent, the character
- * itself is returned.
- *
- * This function only returns the simple, single-code point case mapping.
- * Full case mappings should be used whenever possible because they produce
- * better results by working on whole strings.
- * They take into account the string context and the language and can map
- * to a result string with a different length as appropriate.
- * Full case mappings are applied by the string case mapping functions,
- * see ustring.h and the UnicodeString class.
- * See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
- *
- * @param c the code point to be mapped
- * @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I
- * @return the Simple_Case_Folding of the code point, if any;
- *         otherwise the code point itself.
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-u_foldCase(UChar32 c, uint32_t options);
-
-/**
- * Returns the decimal digit value of the code point in the
- * specified radix.
- *
- * If the radix is not in the range <code>2<=radix<=36</code> or if the
- * value of <code>c</code> is not a valid digit in the specified
- * radix, <code>-1</code> is returned. A character is a valid digit
- * if at least one of the following is true:
- * <ul>
- * <li>The character has a decimal digit value.
- *     Such characters have the general category "Nd" (decimal digit numbers)
- *     and a Numeric_Type of Decimal.
- *     In this case the value is the character's decimal digit value.</li>
- * <li>The character is one of the uppercase Latin letters
- *     <code>'A'</code> through <code>'Z'</code>.
- *     In this case the value is <code>c-'A'+10</code>.</li>
- * <li>The character is one of the lowercase Latin letters
- *     <code>'a'</code> through <code>'z'</code>.
- *     In this case the value is <code>ch-'a'+10</code>.</li>
- * <li>Latin letters from both the ASCII range (0061..007A, 0041..005A)
- *     as well as from the Fullwidth ASCII range (FF41..FF5A, FF21..FF3A)
- *     are recognized.</li>
- * </ul>
- *
- * Same as java.lang.Character.digit().
- *
- * @param   ch      the code point to be tested.
- * @param   radix   the radix.
- * @return  the numeric value represented by the character in the
- *          specified radix,
- *          or -1 if there is no value or if the value exceeds the radix.
- *
- * @see     UCHAR_NUMERIC_TYPE
- * @see     u_forDigit
- * @see     u_charDigitValue
- * @see     u_isdigit
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_digit(UChar32 ch, int8_t radix);
-
-/**
- * Determines the character representation for a specific digit in
- * the specified radix. If the value of <code>radix</code> is not a
- * valid radix, or the value of <code>digit</code> is not a valid
- * digit in the specified radix, the null character
- * (<code>U+0000</code>) is returned.
- * <p>
- * The <code>radix</code> argument is valid if it is greater than or
- * equal to 2 and less than or equal to 36.
- * The <code>digit</code> argument is valid if
- * <code>0 <= digit < radix</code>.
- * <p>
- * If the digit is less than 10, then
- * <code>'0' + digit</code> is returned. Otherwise, the value
- * <code>'a' + digit - 10</code> is returned.
- *
- * Same as java.lang.Character.forDigit().
- *
- * @param   digit   the number to convert to a character.
- * @param   radix   the radix.
- * @return  the <code>char</code> representation of the specified digit
- *          in the specified radix.
- *
- * @see     u_digit
- * @see     u_charDigitValue
- * @see     u_isdigit
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-u_forDigit(int32_t digit, int8_t radix);
-
-/**
- * Get the "age" of the code point.
- * The "age" is the Unicode version when the code point was first
- * designated (as a non-character or for Private Use)
- * or assigned a character.
- * This can be useful to avoid emitting code points to receiving
- * processes that do not accept newer characters.
- * The data is from the UCD file DerivedAge.txt.
- *
- * @param c The code point.
- * @param versionArray The Unicode version number array, to be filled in.
- *
- * @stable ICU 2.1
- */
-U_STABLE void U_EXPORT2
-u_charAge(UChar32 c, UVersionInfo versionArray);
-
-/**
- * Gets the Unicode version information.
- * The version array is filled in with the version information
- * for the Unicode standard that is currently used by ICU.
- * For example, Unicode version 3.1.1 is represented as an array with
- * the values { 3, 1, 1, 0 }.
- *
- * @param versionArray an output array that will be filled in with
- *                     the Unicode version number
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-u_getUnicodeVersion(UVersionInfo versionArray);
-
-#if !UCONFIG_NO_NORMALIZATION
-/**
- * Get the FC_NFKC_Closure property string for a character.
- * See Unicode Standard Annex #15 for details, search for "FC_NFKC_Closure"
- * or for "FNC": http://www.unicode.org/reports/tr15/
- *
- * @param c The character (code point) for which to get the FC_NFKC_Closure string.
- *             It must be <code>0<=c<=0x10ffff</code>.
- * @param dest Destination address for copying the string.
- *             The string will be zero-terminated if possible.
- *             If there is no FC_NFKC_Closure string,
- *             then the buffer will be set to the empty string.
- * @param destCapacity <code>==sizeof(dest)</code>
- * @param pErrorCode Pointer to a UErrorCode variable.
- * @return The length of the string, or 0 if there is no FC_NFKC_Closure string for this character.
- *         If the destCapacity is less than or equal to the length, then the buffer
- *         contains the truncated name and the returned length indicates the full
- *         length of the name.
- *         The length does not include the zero-termination.
- *
- * @stable ICU 2.2
- */
-U_STABLE int32_t U_EXPORT2
-u_getFC_NFKC_Closure(UChar32 c, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode);
-
-#endif
-
-
-U_CDECL_END
-
-#endif /*_UCHAR*/
-/*eof*/
diff --git a/source/common/unicode/uchriter.h b/source/common/unicode/uchriter.h
deleted file mode 100644
index 6d5a990..0000000
--- a/source/common/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
diff --git a/source/common/unicode/uclean.h b/source/common/unicode/uclean.h
deleted file mode 100644
index de6d736..0000000
--- a/source/common/unicode/uclean.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-******************************************************************************
-*                                                                            *
-* Copyright (C) 2001-2009, 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.
- *
- *  Use of this function is optional.  It is OK to simply use ICU
- *  services and functions without first having initialized
- *  ICU by calling u_init().
- *
- *  u_init() will attempt to load some part of ICU's data, and is
- *  useful as a test for configuration or installation problems that
- *  leave the ICU data inaccessible.  A successful invocation of u_init()
- *  does not, however, guarantee that all ICU data is accessible.
- *
- *  Multiple calls to u_init() cause no harm, aside from the small amount
- *  of time required.
- *
- *  In old versions of ICU, u_init() was required in multi-threaded applications
- *  to ensure the thread safety of ICU.  u_init() is no longer needed for this purpose.
- *
- * @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
diff --git a/source/common/unicode/ucnv.h b/source/common/unicode/ucnv.h
deleted file mode 100644
index 98da8ff..0000000
--- a/source/common/unicode/ucnv.h
+++ /dev/null
@@ -1,1997 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1999-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
- *  ucnv.h:
- *  External APIs for the ICU's codeset conversion library
- *  Bertrand A. Damiba
- *
- * Modification History:
- *
- *   Date        Name        Description
- *   04/04/99    helena      Fixed internal header inclusion.
- *   05/11/00    helena      Added setFallback and usesFallback APIs.
- *   06/29/2000  helena      Major rewrite of the callback APIs.
- *   12/07/2000  srl         Update of documentation
- */
-
-/**
- * \file
- * \brief C API: Character conversion 
- *
- * <h2>Character Conversion C API</h2>
- *
- * <p>This API is used to convert codepage or character encoded data to and
- * from UTF-16. You can open a converter with {@link ucnv_open() }. With that
- * converter, you can get its properties, set options, convert your data and
- * close the converter.</p>
- *
- * <p>Since many software programs recogize different converter names for
- * different types of converters, there are other functions in this API to
- * iterate over the converter aliases. The functions {@link ucnv_getAvailableName() },
- * {@link ucnv_getAlias() } and {@link ucnv_getStandardName() } are some of the
- * more frequently used alias functions to get this information.</p>
- *
- * <p>When a converter encounters an illegal, irregular, invalid or unmappable character
- * its default behavior is to use a substitution character to replace the
- * bad byte sequence. This behavior can be changed by using {@link ucnv_setFromUCallBack() }
- * or {@link ucnv_setToUCallBack() } on the converter. The header ucnv_err.h defines
- * many other callback actions that can be used instead of a character substitution.</p>
- *
- * <p>More information about this API can be found in our 
- * <a href="http://icu-project.org/userguide/conversion.html">User's
- * Guide</a>.</p>
- */
-
-#ifndef UCNV_H
-#define UCNV_H
-
-#include "unicode/ucnv_err.h"
-#include "unicode/uenum.h"
-#include "unicode/localpointer.h"
-
-#ifndef __USET_H__
-
-/**
- * USet is the C API type for Unicode sets.
- * It is forward-declared here to avoid including the header file if related
- * conversion APIs are not used.
- * See unicode/uset.h
- *
- * @see ucnv_getUnicodeSet
- * @stable ICU 2.6
- */
-struct USet;
-/** @stable ICU 2.6 */
-typedef struct USet USet;
-
-#endif
-
-#if !UCONFIG_NO_CONVERSION
-
-U_CDECL_BEGIN
-
-/** Maximum length of a converter name including the terminating NULL @stable ICU 2.0 */
-#define UCNV_MAX_CONVERTER_NAME_LENGTH 60
-/** Maximum length of a converter name including path and terminating NULL @stable ICU 2.0 */
-#define UCNV_MAX_FULL_FILE_NAME_LENGTH (600+UCNV_MAX_CONVERTER_NAME_LENGTH)
-
-/** Shift in for EBDCDIC_STATEFUL and iso2022 states @stable ICU 2.0 */
-#define  UCNV_SI 0x0F
-/** Shift out for EBDCDIC_STATEFUL and iso2022 states @stable ICU 2.0 */
-#define  UCNV_SO 0x0E
-
-/**
- * Enum for specifying basic types of converters
- * @see ucnv_getType
- * @stable ICU 2.0
- */
-typedef enum {
-    UCNV_UNSUPPORTED_CONVERTER = -1,
-    UCNV_SBCS = 0,
-    UCNV_DBCS = 1,
-    UCNV_MBCS = 2,
-    UCNV_LATIN_1 = 3,
-    UCNV_UTF8 = 4,
-    UCNV_UTF16_BigEndian = 5,
-    UCNV_UTF16_LittleEndian = 6,
-    UCNV_UTF32_BigEndian = 7,
-    UCNV_UTF32_LittleEndian = 8,
-    UCNV_EBCDIC_STATEFUL = 9,
-    UCNV_ISO_2022 = 10,
-
-    UCNV_LMBCS_1 = 11,
-    UCNV_LMBCS_2, 
-    UCNV_LMBCS_3,
-    UCNV_LMBCS_4,
-    UCNV_LMBCS_5,
-    UCNV_LMBCS_6,
-    UCNV_LMBCS_8,
-    UCNV_LMBCS_11,
-    UCNV_LMBCS_16,
-    UCNV_LMBCS_17,
-    UCNV_LMBCS_18,
-    UCNV_LMBCS_19,
-    UCNV_LMBCS_LAST = UCNV_LMBCS_19,
-    UCNV_HZ,
-    UCNV_SCSU,
-    UCNV_ISCII,
-    UCNV_US_ASCII,
-    UCNV_UTF7,
-    UCNV_BOCU1,
-    UCNV_UTF16,
-    UCNV_UTF32,
-    UCNV_CESU8,
-    UCNV_IMAP_MAILBOX,
-
-    /* Number of converter types for which we have conversion routines. */
-    UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES
-
-} UConverterType;
-
-/**
- * Enum for specifying which platform a converter ID refers to.
- * The use of platform/CCSID is not recommended. See ucnv_openCCSID().
- *
- * @see ucnv_getPlatform
- * @see ucnv_openCCSID
- * @see ucnv_getCCSID
- * @stable ICU 2.0
- */
-typedef enum {
-    UCNV_UNKNOWN = -1,
-    UCNV_IBM = 0
-} UConverterPlatform;
-
-/**
- * Function pointer for error callback in the codepage to unicode direction.
- * Called when an error has occured in conversion to unicode, or on open/close of the callback (see reason).
- * @param context Pointer to the callback's private data
- * @param args Information about the conversion in progress
- * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param reason Defines the reason the callback was invoked
- * @param pErrorCode    ICU error code in/out parameter.
- *                      For converter callback functions, set to a conversion error
- *                      before the call, and the callback may reset it to U_ZERO_ERROR.
- * @see ucnv_setToUCallBack
- * @see UConverterToUnicodeArgs
- * @stable ICU 2.0
- */
-typedef void (U_EXPORT2 *UConverterToUCallback) (
-                  const void* context,
-                  UConverterToUnicodeArgs *args,
-                  const char *codeUnits,
-                  int32_t length,
-                  UConverterCallbackReason reason,
-                  UErrorCode *pErrorCode);
-
-/**
- * Function pointer for error callback in the unicode to codepage direction.
- * Called when an error has occured in conversion from unicode, or on open/close of the callback (see reason).
- * @param context Pointer to the callback's private data
- * @param args Information about the conversion in progress
- * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
- * @param reason Defines the reason the callback was invoked
- * @param pErrorCode    ICU error code in/out parameter.
- *                      For converter callback functions, set to a conversion error
- *                      before the call, and the callback may reset it to U_ZERO_ERROR.
- * @see ucnv_setFromUCallBack
- * @stable ICU 2.0
- */
-typedef void (U_EXPORT2 *UConverterFromUCallback) (
-                    const void* context,
-                    UConverterFromUnicodeArgs *args,
-                    const UChar* codeUnits,
-                    int32_t length,
-                    UChar32 codePoint,
-                    UConverterCallbackReason reason,
-                    UErrorCode *pErrorCode);
-
-U_CDECL_END
-
-/**
- * Character that separates converter names from options and options from each other.
- * @see ucnv_open
- * @stable ICU 2.0
- */
-#define UCNV_OPTION_SEP_CHAR ','
-
-/**
- * String version of UCNV_OPTION_SEP_CHAR. 
- * @see ucnv_open
- * @stable ICU 2.0
- */
-#define UCNV_OPTION_SEP_STRING ","
-
-/**
- * Character that separates a converter option from its value.
- * @see ucnv_open
- * @stable ICU 2.0
- */
-#define UCNV_VALUE_SEP_CHAR '='
-
-/**
- * String version of UCNV_VALUE_SEP_CHAR. 
- * @see ucnv_open
- * @stable ICU 2.0
- */
-#define UCNV_VALUE_SEP_STRING "="
-
-/**
- * Converter option for specifying a locale.
- * For example, ucnv_open("SCSU,locale=ja", &errorCode);
- * See convrtrs.txt.
- *
- * @see ucnv_open
- * @stable ICU 2.0
- */
-#define UCNV_LOCALE_OPTION_STRING ",locale="
-
-/**
- * Converter option for specifying a version selector (0..9) for some converters.
- * For example, 
- * \code
- *   ucnv_open("UTF-7,version=1", &errorCode);
- * \endcode
- * See convrtrs.txt.
- *
- * @see ucnv_open
- * @stable ICU 2.4
- */
-#define UCNV_VERSION_OPTION_STRING ",version="
-
-/**
- * Converter option for EBCDIC SBCS or mixed-SBCS/DBCS (stateful) codepages.
- * Swaps Unicode mappings for EBCDIC LF and NL codes, as used on
- * S/390 (z/OS) Unix System Services (Open Edition).
- * For example, ucnv_open("ibm-1047,swaplfnl", &errorCode);
- * See convrtrs.txt.
- *
- * @see ucnv_open
- * @stable ICU 2.4
- */
-#define UCNV_SWAP_LFNL_OPTION_STRING ",swaplfnl"
-
-/**
- * Do a fuzzy compare of two converter/alias names.
- * The comparison is case-insensitive, ignores leading zeroes if they are not
- * followed by further digits, and ignores all but letters and digits.
- * Thus the strings "UTF-8", "utf_8", "u*T@f08" and "Utf 8" are exactly equivalent.
- * See section 1.4, Charset Alias Matching in Unicode Technical Standard #22
- * at http://www.unicode.org/reports/tr22/
- *
- * @param name1 a converter name or alias, zero-terminated
- * @param name2 a converter name or alias, zero-terminated
- * @return 0 if the names match, or a negative value if the name1
- * lexically precedes name2, or a positive value if the name1
- * lexically follows name2.
- * @stable ICU 2.0
- */
-U_STABLE int U_EXPORT2
-ucnv_compareNames(const char *name1, const char *name2);
-
-
-/**
- * Creates a UConverter object with the name of a coded character set specified as a C string.
- * The actual name will be resolved with the alias file
- * using a case-insensitive string comparison that ignores
- * leading zeroes and all non-alphanumeric characters.
- * E.g., the names "UTF8", "utf-8", "u*T@f08" and "Utf 8" are all equivalent.
- * (See also ucnv_compareNames().)
- * If <code>NULL</code> is passed for the converter name, it will create one with the
- * getDefaultName return value.
- *
- * <p>A converter name for ICU 1.5 and above may contain options
- * like a locale specification to control the specific behavior of
- * the newly instantiated converter.
- * The meaning of the options depends on the particular converter.
- * If an option is not defined for or recognized by a given converter, then it is ignored.</p>
- *
- * <p>Options are appended to the converter name string, with a
- * <code>UCNV_OPTION_SEP_CHAR</code> between the name and the first option and
- * also between adjacent options.</p>
- *
- * <p>If the alias is ambiguous, then the preferred converter is used
- * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.</p>
- *
- * <p>The conversion behavior and names can vary between platforms. ICU may
- * convert some characters differently from other platforms. Details on this topic
- * are in the <a href="http://icu-project.org/userguide/conversion.html">User's
- * Guide</a>. Aliases starting with a "cp" prefix have no specific meaning
- * other than its an alias starting with the letters "cp". Please do not
- * associate any meaning to these aliases.</p>
- *
- * @param converterName Name of the coded character set table.
- *          This may have options appended to the string.
- *          IANA alias character set names, IBM CCSIDs starting with "ibm-",
- *          Windows codepage numbers starting with "windows-" are frequently
- *          used for this parameter. See ucnv_getAvailableName and
- *          ucnv_getAlias for a complete list that is available.
- *          If this parameter is NULL, the default converter will be used.
- * @param err outgoing error status <TT>U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR</TT>
- * @return the created Unicode converter object, or <TT>NULL</TT> if an error occured
- * @see ucnv_openU
- * @see ucnv_openCCSID
- * @see ucnv_getAvailableName
- * @see ucnv_getAlias
- * @see ucnv_getDefaultName
- * @see ucnv_close
- * @see ucnv_compareNames
- * @stable ICU 2.0
- */
-U_STABLE UConverter* U_EXPORT2 
-ucnv_open(const char *converterName, UErrorCode *err);
-
-
-/**
- * Creates a Unicode converter with the names specified as unicode string. 
- * The name should be limited to the ASCII-7 alphanumerics range.
- * The actual name will be resolved with the alias file
- * using a case-insensitive string comparison that ignores
- * leading zeroes and all non-alphanumeric characters.
- * E.g., the names "UTF8", "utf-8", "u*T@f08" and "Utf 8" are all equivalent.
- * (See also ucnv_compareNames().)
- * If <TT>NULL</TT> is passed for the converter name, it will create 
- * one with the ucnv_getDefaultName() return value.
- * If the alias is ambiguous, then the preferred converter is used
- * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.
- *
- * <p>See ucnv_open for the complete details</p>
- * @param name Name of the UConverter table in a zero terminated 
- *        Unicode string
- * @param err outgoing error status <TT>U_MEMORY_ALLOCATION_ERROR, 
- *        U_FILE_ACCESS_ERROR</TT>
- * @return the created Unicode converter object, or <TT>NULL</TT> if an 
- *        error occured
- * @see ucnv_open
- * @see ucnv_openCCSID
- * @see ucnv_close
- * @see ucnv_compareNames
- * @stable ICU 2.0
- */
-U_STABLE UConverter* U_EXPORT2 
-ucnv_openU(const UChar *name,
-           UErrorCode *err);
-
-/**
- * Creates a UConverter object from a CCSID number and platform pair.
- * Note that the usefulness of this function is limited to platforms with numeric
- * encoding IDs. Only IBM and Microsoft platforms use numeric (16-bit) identifiers for
- * encodings.
- *
- * In addition, IBM CCSIDs and Unicode conversion tables are not 1:1 related.
- * For many IBM CCSIDs there are multiple (up to six) Unicode conversion tables, and
- * for some Unicode conversion tables there are multiple CCSIDs.
- * Some "alternate" Unicode conversion tables are provided by the
- * IBM CDRA conversion table registry.
- * The most prominent example of a systematic modification of conversion tables that is
- * not provided in the form of conversion table files in the repository is
- * that S/390 Unix System Services swaps the codes for Line Feed and New Line in all
- * EBCDIC codepages, which requires such a swap in the Unicode conversion tables as well.
- *
- * Only IBM default conversion tables are accessible with ucnv_openCCSID().
- * ucnv_getCCSID() will return the same CCSID for all conversion tables that are associated
- * with that CCSID.
- *
- * Currently, the only "platform" supported in the ICU converter API is UCNV_IBM.
- *
- * In summary, the use of CCSIDs and the associated API functions is not recommended.
- *
- * In order to open a converter with the default IBM CDRA Unicode conversion table,
- * you can use this function or use the prefix "ibm-":
- * \code
- *     char name[20];
- *     sprintf(name, "ibm-%hu", ccsid);
- *     cnv=ucnv_open(name, &errorCode);
- * \endcode
- *
- * In order to open a converter with the IBM S/390 Unix System Services variant
- * of a Unicode/EBCDIC conversion table,
- * you can use the prefix "ibm-" together with the option string UCNV_SWAP_LFNL_OPTION_STRING:
- * \code
- *     char name[20];
- *     sprintf(name, "ibm-%hu" UCNV_SWAP_LFNL_OPTION_STRING, ccsid);
- *     cnv=ucnv_open(name, &errorCode);
- * \endcode
- *
- * In order to open a converter from a Microsoft codepage number, use the prefix "cp":
- * \code
- *     char name[20];
- *     sprintf(name, "cp%hu", codepageID);
- *     cnv=ucnv_open(name, &errorCode);
- * \endcode
- *
- * If the alias is ambiguous, then the preferred converter is used
- * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.
- *
- * @param codepage codepage number to create
- * @param platform the platform in which the codepage number exists
- * @param err error status <TT>U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR</TT>
- * @return the created Unicode converter object, or <TT>NULL</TT> if an error
- *   occured.
- * @see ucnv_open
- * @see ucnv_openU
- * @see ucnv_close
- * @see ucnv_getCCSID
- * @see ucnv_getPlatform
- * @see UConverterPlatform
- * @stable ICU 2.0
- */
-U_STABLE UConverter* U_EXPORT2
-ucnv_openCCSID(int32_t codepage,
-               UConverterPlatform platform,
-               UErrorCode * err);
-
-/**
- * <p>Creates a UConverter object specified from a packageName and a converterName.</p>
- * 
- * <p>The packageName and converterName must point to an ICU udata object, as defined by
- *   <code> udata_open( packageName, "cnv", converterName, err) </code> or equivalent.
- * Typically, packageName will refer to a (.dat) file, or to a package registered with
- * udata_setAppData(). Using a full file or directory pathname for packageName is deprecated.</p>
- * 
- * <p>The name will NOT be looked up in the alias mechanism, nor will the converter be
- * stored in the converter cache or the alias table. The only way to open further converters
- * is call this function multiple times, or use the ucnv_safeClone() function to clone a 
- * 'master' converter.</p>
- *
- * <p>A future version of ICU may add alias table lookups and/or caching
- * to this function.</p>
- * 
- * <p>Example Use:
- *      <code>cnv = ucnv_openPackage("myapp", "myconverter", &err);</code>
- * </p>
- *
- * @param packageName name of the package (equivalent to 'path' in udata_open() call)
- * @param converterName name of the data item to be used, without suffix.
- * @param err outgoing error status <TT>U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR</TT>
- * @return the created Unicode converter object, or <TT>NULL</TT> if an error occured
- * @see udata_open
- * @see ucnv_open
- * @see ucnv_safeClone
- * @see ucnv_close
- * @stable ICU 2.2
- */
-U_STABLE UConverter* U_EXPORT2 
-ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err);
-
-/**
- * Thread safe converter cloning operation.
- * For most efficient operation, pass in a stackBuffer (and a *pBufferSize)
- * with at least U_CNV_SAFECLONE_BUFFERSIZE bytes of space.
- * If the buffer size is sufficient, then the clone will use the stack buffer;
- * otherwise, it will be allocated, and *pBufferSize will indicate
- * the actual size. (This should not occur with U_CNV_SAFECLONE_BUFFERSIZE.)
- *
- * You must ucnv_close() the clone in any case.
- *
- * If *pBufferSize==0, (regardless of whether stackBuffer==NULL or not)
- * then *pBufferSize will be changed to a sufficient size
- * for cloning this converter,
- * without actually cloning the converter ("pure pre-flighting").
- *
- * If *pBufferSize is greater than zero but not large enough for a stack-based
- * clone, then the converter is cloned using newly allocated memory
- * and *pBufferSize is changed to the necessary size.
- *
- * If the converter clone fits into the stack buffer but the stack buffer is not
- * sufficiently aligned for the clone, then the clone will use an
- * adjusted pointer and use an accordingly smaller buffer size.
- *
- * @param cnv converter 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_CNV_SAFECLONE_BUFFERSIZE. This will probably be enough to avoid memory allocations.
- * @param pBufferSize pointer to size of allocated space. pBufferSize must not be NULL.
- * @param status to indicate whether the operation went on smoothly or there were errors
- *  An informational status value, U_SAFECLONE_ALLOCATED_WARNING,
- *  is used if any allocations were necessary.
- *  However, it is better to check if *pBufferSize grew for checking for
- *  allocations because warning codes can be overridden by subsequent
- *  function calls.
- * @return pointer to the new clone
- * @stable ICU 2.0
- */
-U_STABLE UConverter * U_EXPORT2 
-ucnv_safeClone(const UConverter *cnv, 
-               void             *stackBuffer,
-               int32_t          *pBufferSize, 
-               UErrorCode       *status);
-
-/**
- * \def U_CNV_SAFECLONE_BUFFERSIZE
- * Definition of a buffer size that is designed to be large enough for
- * converters to be cloned with ucnv_safeClone().
- * @stable ICU 2.0
- */
-#define U_CNV_SAFECLONE_BUFFERSIZE  1024
-
-/**
- * Deletes the unicode converter and releases resources associated
- * with just this instance.
- * Does not free up shared converter tables.
- *
- * @param converter the converter object to be deleted
- * @see ucnv_open
- * @see ucnv_openU
- * @see ucnv_openCCSID
- * @stable ICU 2.0
- */
-U_STABLE void  U_EXPORT2
-ucnv_close(UConverter * converter);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUConverterPointer
- * "Smart pointer" class, closes a UConverter via ucnv_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterPointer, UConverter, ucnv_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Fills in the output parameter, subChars, with the substitution characters
- * as multiple bytes.
- * If ucnv_setSubstString() set a Unicode string because the converter is
- * stateful, then subChars will be an empty string.
- *
- * @param converter the Unicode converter
- * @param subChars the subsitution characters
- * @param len on input the capacity of subChars, on output the number 
- * of bytes copied to it
- * @param  err the outgoing error status code.
- * If the substitution character array is too small, an
- * <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT> will be returned.
- * @see ucnv_setSubstString
- * @see ucnv_setSubstChars
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_getSubstChars(const UConverter *converter,
-                   char *subChars,
-                   int8_t *len,
-                   UErrorCode *err);
-
-/**
- * Sets the substitution chars when converting from unicode to a codepage. The
- * substitution is specified as a string of 1-4 bytes, and may contain
- * <TT>NULL</TT> bytes.
- * The subChars must represent a single character. The caller needs to know the
- * byte sequence of a valid character in the converter's charset.
- * For some converters, for example some ISO 2022 variants, only single-byte
- * substitution characters may be supported.
- * The newer ucnv_setSubstString() function relaxes these limitations.
- *
- * @param converter the Unicode converter
- * @param subChars the substitution character byte sequence we want set
- * @param len the number of bytes in subChars
- * @param err the error status code.  <TT>U_INDEX_OUTOFBOUNDS_ERROR </TT> if
- * len is bigger than the maximum number of bytes allowed in subchars
- * @see ucnv_setSubstString
- * @see ucnv_getSubstChars
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_setSubstChars(UConverter *converter,
-                   const char *subChars,
-                   int8_t len,
-                   UErrorCode *err);
-
-/**
- * Set a substitution string for converting from Unicode to a charset.
- * The caller need not know the charset byte sequence for each charset.
- *
- * Unlike ucnv_setSubstChars() which is designed to set a charset byte sequence
- * for a single character, this function takes a Unicode string with
- * zero, one or more characters, and immediately verifies that the string can be
- * converted to the charset.
- * If not, or if the result is too long (more than 32 bytes as of ICU 3.6),
- * then the function returns with an error accordingly.
- *
- * Also unlike ucnv_setSubstChars(), this function works for stateful charsets
- * by converting on the fly at the point of substitution rather than setting
- * a fixed byte sequence.
- *
- * @param cnv The UConverter object.
- * @param s The Unicode string.
- * @param length The number of UChars in s, or -1 for a NUL-terminated string.
- * @param err 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 ucnv_setSubstChars
- * @see ucnv_getSubstChars
- * @stable ICU 3.6
- */
-U_STABLE void U_EXPORT2
-ucnv_setSubstString(UConverter *cnv,
-                    const UChar *s,
-                    int32_t length,
-                    UErrorCode *err);
-
-/**
- * Fills in the output parameter, errBytes, with the error characters from the
- * last failing conversion.
- *
- * @param converter the Unicode converter
- * @param errBytes the codepage bytes which were in error
- * @param len on input the capacity of errBytes, on output the number of
- *  bytes which were copied to it
- * @param err the error status code.
- * If the substitution character array is too small, an
- * <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT> will be returned.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_getInvalidChars(const UConverter *converter,
-                     char *errBytes,
-                     int8_t *len,
-                     UErrorCode *err);
-
-/**
- * Fills in the output parameter, errChars, with the error characters from the
- * last failing conversion.
- *
- * @param converter the Unicode converter
- * @param errUChars the UChars which were in error
- * @param len on input the capacity of errUChars, on output the number of 
- *  UChars which were copied to it
- * @param err the error status code.
- * If the substitution character array is too small, an
- * <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT> will be returned.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_getInvalidUChars(const UConverter *converter,
-                      UChar *errUChars,
-                      int8_t *len,
-                      UErrorCode *err);
-
-/**
- * Resets the state of a converter to the default state. This is used
- * in the case of an error, to restart a conversion from a known default state.
- * It will also empty the internal output buffers.
- * @param converter the Unicode converter
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_reset(UConverter *converter);
-
-/**
- * Resets the to-Unicode part of a converter state to the default state.
- * This is used in the case of an error to restart a conversion to
- * Unicode to a known default state. It will also empty the internal
- * output buffers used for the conversion to Unicode codepoints.
- * @param converter the Unicode converter
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucnv_resetToUnicode(UConverter *converter);
-
-/**
- * Resets the from-Unicode part of a converter state to the default state.
- * This is used in the case of an error to restart a conversion from
- * Unicode to a known default state. It will also empty the internal output
- * buffers used for the conversion from Unicode codepoints.
- * @param converter the Unicode converter
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucnv_resetFromUnicode(UConverter *converter);
-
-/**
- * Returns the maximum number of bytes that are output per UChar in conversion
- * from Unicode using this converter.
- * The returned number can be used with UCNV_GET_MAX_BYTES_FOR_STRING
- * to calculate the size of a target buffer for conversion from Unicode.
- *
- * Note: Before ICU 2.8, this function did not return reliable numbers for
- * some stateful converters (EBCDIC_STATEFUL, ISO-2022) and LMBCS.
- *
- * This number may not be the same as the maximum number of bytes per
- * "conversion unit". In other words, it may not be the intuitively expected
- * number of bytes per character that would be published for a charset,
- * and may not fulfill any other purpose than the allocation of an output
- * buffer of guaranteed sufficient size for a given input length and converter.
- *
- * Examples for special cases that are taken into account:
- * - Supplementary code points may convert to more bytes than BMP code points.
- *   This function returns bytes per UChar (UTF-16 code unit), not per
- *   Unicode code point, for efficient buffer allocation.
- * - State-shifting output (SI/SO, escapes, etc.) from stateful converters.
- * - When m input UChars are converted to n output bytes, then the maximum m/n
- *   is taken into account.
- *
- * The number returned here does not take into account
- * (see UCNV_GET_MAX_BYTES_FOR_STRING):
- * - callbacks which output more than one charset character sequence per call,
- *   like escape callbacks
- * - initial and final non-character bytes that are output by some converters
- *   (automatic BOMs, initial escape sequence, final SI, etc.)
- *
- * Examples for returned values:
- * - SBCS charsets: 1
- * - Shift-JIS: 2
- * - UTF-16: 2 (2 per BMP, 4 per surrogate _pair_, BOM not counted)
- * - UTF-8: 3 (3 per BMP, 4 per surrogate _pair_)
- * - EBCDIC_STATEFUL (EBCDIC mixed SBCS/DBCS): 3 (SO + DBCS)
- * - ISO-2022: 3 (always outputs UTF-8)
- * - ISO-2022-JP: 6 (4-byte escape sequences + DBCS)
- * - ISO-2022-CN: 8 (4-byte designator sequences + 2-byte SS2/SS3 + DBCS)
- *
- * @param converter The Unicode converter.
- * @return The maximum number of bytes per UChar that are output by ucnv_fromUnicode(),
- *         to be used together with UCNV_GET_MAX_BYTES_FOR_STRING for buffer allocation.
- *
- * @see UCNV_GET_MAX_BYTES_FOR_STRING
- * @see ucnv_getMinCharSize
- * @stable ICU 2.0
- */
-U_STABLE int8_t U_EXPORT2
-ucnv_getMaxCharSize(const UConverter *converter);
-
-/**
- * Calculates the size of a buffer for conversion from Unicode to a charset.
- * The calculated size is guaranteed to be sufficient for this conversion.
- *
- * It takes into account initial and final non-character bytes that are output
- * by some converters.
- * It does not take into account callbacks which output more than one charset
- * character sequence per call, like escape callbacks.
- * The default (substitution) callback only outputs one charset character sequence.
- *
- * @param length Number of UChars to be converted.
- * @param maxCharSize Return value from ucnv_getMaxCharSize() for the converter
- *                    that will be used.
- * @return Size of a buffer that will be large enough to hold the output bytes of
- *         converting length UChars with the converter that returned the maxCharSize.
- *
- * @see ucnv_getMaxCharSize
- * @stable ICU 2.8
- */
-#define UCNV_GET_MAX_BYTES_FOR_STRING(length, maxCharSize) \
-     (((int32_t)(length)+10)*(int32_t)(maxCharSize))
-
-/**
- * Returns the minimum byte length for characters in this codepage. 
- * This is usually either 1 or 2.
- * @param converter the Unicode converter
- * @return the minimum number of bytes allowed by this particular converter
- * @see ucnv_getMaxCharSize
- * @stable ICU 2.0
- */
-U_STABLE int8_t U_EXPORT2
-ucnv_getMinCharSize(const UConverter *converter);
-
-/**
- * Returns the display name of the converter passed in based on the Locale 
- * passed in. If the locale contains no display name, the internal ASCII
- * name will be filled in.
- *
- * @param converter the Unicode converter.
- * @param displayLocale is the specific Locale we want to localised for
- * @param displayName user provided buffer to be filled in
- * @param displayNameCapacity size of displayName Buffer
- * @param err error status code
- * @return displayNameLength number of UChar needed in displayName
- * @see ucnv_getName
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_getDisplayName(const UConverter *converter,
-                    const char *displayLocale,
-                    UChar *displayName,
-                    int32_t displayNameCapacity,
-                    UErrorCode *err);
-
-/**
- * Gets the internal, canonical name of the converter (zero-terminated).
- * The lifetime of the returned string will be that of the converter 
- * passed to this function.
- * @param converter the Unicode converter
- * @param err UErrorCode status
- * @return the internal name of the converter
- * @see ucnv_getDisplayName
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2 
-ucnv_getName(const UConverter *converter, UErrorCode *err);
-
-/**
- * Gets a codepage number associated with the converter. This is not guaranteed
- * to be the one used to create the converter. Some converters do not represent
- * platform registered codepages and return zero for the codepage number.
- * The error code fill-in parameter indicates if the codepage number
- * is available.
- * Does not check if the converter is <TT>NULL</TT> or if converter's data
- * table is <TT>NULL</TT>.
- *
- * Important: The use of CCSIDs is not recommended because it is limited
- * to only two platforms in principle and only one (UCNV_IBM) in the current
- * ICU converter API.
- * Also, CCSIDs are insufficient to identify IBM Unicode conversion tables precisely.
- * For more details see ucnv_openCCSID().
- *
- * @param converter the Unicode converter
- * @param err the error status code.
- * @return If any error occurrs, -1 will be returned otherwise, the codepage number
- * will be returned
- * @see ucnv_openCCSID
- * @see ucnv_getPlatform
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_getCCSID(const UConverter *converter,
-              UErrorCode *err);
-
-/**
- * Gets a codepage platform associated with the converter. Currently, 
- * only <TT>UCNV_IBM</TT> will be returned.
- * Does not test if the converter is <TT>NULL</TT> or if converter's data 
- * table is <TT>NULL</TT>. 
- * @param converter the Unicode converter
- * @param err the error status code.
- * @return The codepage platform
- * @stable ICU 2.0
- */
-U_STABLE UConverterPlatform U_EXPORT2
-ucnv_getPlatform(const UConverter *converter,
-                 UErrorCode *err);
-
-/**
- * Gets the type of the converter
- * e.g. SBCS, MBCS, DBCS, UTF8, UTF16_BE, UTF16_LE, ISO_2022, 
- * EBCDIC_STATEFUL, LATIN_1
- * @param converter a valid, opened converter
- * @return the type of the converter
- * @stable ICU 2.0
- */
-U_STABLE UConverterType U_EXPORT2
-ucnv_getType(const UConverter * converter);
-
-/**
- * Gets the "starter" (lead) bytes for converters of type MBCS.
- * Will fill in an <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> if converter passed in
- * is not MBCS. Fills in an array of type UBool, with the value of the byte 
- * as offset to the array. For example, if (starters[0x20] == TRUE) at return,
- * it means that the byte 0x20 is a starter byte in this converter.
- * Context pointers are always owned by the caller.
- * 
- * @param converter a valid, opened converter of type MBCS
- * @param starters an array of size 256 to be filled in
- * @param err error status, <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> if the 
- * converter is not a type which can return starters.
- * @see ucnv_getType
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_getStarters(const UConverter* converter, 
-                 UBool starters[256],
-                 UErrorCode* err);
-
-
-/**
- * Selectors for Unicode sets that can be returned by ucnv_getUnicodeSet().
- * @see ucnv_getUnicodeSet
- * @stable ICU 2.6
- */
-typedef enum UConverterUnicodeSet {
-    /** Select the set of roundtrippable Unicode code points. @stable ICU 2.6 */
-    UCNV_ROUNDTRIP_SET,
-    /** Select the set of Unicode code points with roundtrip or fallback mappings. @stable ICU 4.0 */
-    UCNV_ROUNDTRIP_AND_FALLBACK_SET,
-    /** Number of UConverterUnicodeSet selectors. @stable ICU 2.6 */
-    UCNV_SET_COUNT
-} UConverterUnicodeSet;
-
-
-/**
- * Returns the set of Unicode code points that can be converted by an ICU converter.
- *
- * Returns one of several kinds of set:
- *
- * 1. UCNV_ROUNDTRIP_SET
- *
- * The set of all Unicode code points that can be roundtrip-converted
- * (converted without any data loss) with the converter (ucnv_fromUnicode()).
- * This set will not include code points that have fallback mappings
- * or are only the result of reverse fallback mappings.
- * This set will also not include PUA code points with fallbacks, although
- * ucnv_fromUnicode() will always uses those mappings despite ucnv_setFallback().
- * See UTR #22 "Character Mapping Markup Language"
- * at http://www.unicode.org/reports/tr22/
- *
- * This is useful for example for
- * - checking that a string or document can be roundtrip-converted with a converter,
- *   without/before actually performing the conversion
- * - testing if a converter can be used for text for typical text for a certain locale,
- *   by comparing its roundtrip set with the set of ExemplarCharacters from
- *   ICU's locale data or other sources
- *
- * 2. UCNV_ROUNDTRIP_AND_FALLBACK_SET
- *
- * The set of all Unicode code points that can be converted with the converter (ucnv_fromUnicode())
- * when fallbacks are turned on (see ucnv_setFallback()).
- * This set includes all code points with roundtrips and fallbacks (but not reverse fallbacks).
- *
- * In the future, there may be more UConverterUnicodeSet choices to select
- * sets with different properties.
- *
- * @param cnv The converter for which a set is requested.
- * @param setFillIn A valid USet *. It will be cleared by this function before
- *            the converter's specific set is filled into the USet.
- * @param whichSet A UConverterUnicodeSet selector;
- *              currently UCNV_ROUNDTRIP_SET is the only supported value.
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- *
- * @see UConverterUnicodeSet
- * @see uset_open
- * @see uset_close
- * @stable ICU 2.6
- */
-U_STABLE void U_EXPORT2
-ucnv_getUnicodeSet(const UConverter *cnv,
-                   USet *setFillIn,
-                   UConverterUnicodeSet whichSet,
-                   UErrorCode *pErrorCode);
-
-/**
- * Gets the current calback function used by the converter when an illegal
- *  or invalid codepage sequence is found. 
- * Context pointers are always owned by the caller.
- *
- * @param converter the unicode converter
- * @param action fillin: returns the callback function pointer
- * @param context fillin: returns the callback's private void* context
- * @see ucnv_setToUCallBack
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_getToUCallBack (const UConverter * converter,
-                     UConverterToUCallback *action,
-                     const void **context);
-
-/**
- * Gets the current callback function used by the converter when illegal 
- * or invalid Unicode sequence is found.
- * Context pointers are always owned by the caller.
- *
- * @param converter the unicode converter
- * @param action fillin: returns the callback function pointer
- * @param context fillin: returns the callback's private void* context
- * @see ucnv_setFromUCallBack
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_getFromUCallBack (const UConverter * converter,
-                       UConverterFromUCallback *action,
-                       const void **context);
-
-/**
- * Changes the callback function used by the converter when
- * an illegal or invalid sequence is found.
- * Context pointers are always owned by the caller.
- * Predefined actions and contexts can be found in the ucnv_err.h header.
- *
- * @param converter the unicode converter
- * @param newAction the new callback function
- * @param newContext the new toUnicode callback context pointer. This can be NULL.
- * @param oldAction fillin: returns the old callback function pointer. This can be NULL.
- * @param oldContext fillin: returns the old callback's private void* context. This can be NULL.
- * @param err The error code status
- * @see ucnv_getToUCallBack
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_setToUCallBack (UConverter * converter,
-                     UConverterToUCallback newAction,
-                     const void* newContext,
-                     UConverterToUCallback *oldAction,
-                     const void** oldContext,
-                     UErrorCode * err);
-
-/**
- * Changes the current callback function used by the converter when
- * an illegal or invalid sequence is found.
- * Context pointers are always owned by the caller.
- * Predefined actions and contexts can be found in the ucnv_err.h header.
- *
- * @param converter the unicode converter
- * @param newAction the new callback function
- * @param newContext the new fromUnicode callback context pointer. This can be NULL.
- * @param oldAction fillin: returns the old callback function pointer. This can be NULL.
- * @param oldContext fillin: returns the old callback's private void* context. This can be NULL.
- * @param err The error code status
- * @see ucnv_getFromUCallBack
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_setFromUCallBack (UConverter * converter,
-                       UConverterFromUCallback newAction,
-                       const void *newContext,
-                       UConverterFromUCallback *oldAction,
-                       const void **oldContext,
-                       UErrorCode * err);
-
-/**
- * Converts an array of unicode characters to an array of codepage
- * characters. This function is optimized for converting a continuous
- * stream of data in buffer-sized chunks, where the entire source and
- * target does not fit in available buffers.
- * 
- * The source pointer is an in/out parameter. It starts out pointing where the 
- * conversion is to begin, and ends up pointing after the last UChar consumed. 
- * 
- * Target similarly starts out pointer at the first available byte in the output
- * buffer, and ends up pointing after the last byte written to the output.
- * 
- * The converter always attempts to consume the entire source buffer, unless 
- * (1.) the target buffer is full, or (2.) a failing error is returned from the
- * current callback function.  When a successful error status has been
- * returned, it means that all of the source buffer has been
- *  consumed. At that point, the caller should reset the source and
- *  sourceLimit pointers to point to the next chunk.
- * 
- * At the end of the stream (flush==TRUE), the input is completely consumed
- * when *source==sourceLimit and no error code is set.
- * The converter object is then automatically reset by this function.
- * (This means that a converter need not be reset explicitly between data
- * streams if it finishes the previous stream without errors.)
- * 
- * This is a <I>stateful</I> conversion. Additionally, even when all source data has
- * been consumed, some data may be in the converters' internal state.
- * Call this function repeatedly, updating the target pointers with
- * the next empty chunk of target in case of a
- * <TT>U_BUFFER_OVERFLOW_ERROR</TT>, and updating the source  pointers
- *  with the next chunk of source when a successful error status is
- * returned, until there are no more chunks of source data.
- * @param converter the Unicode converter
- * @param target I/O parameter. Input : Points to the beginning of the buffer to copy
- *  codepage characters to. Output : points to after the last codepage character copied
- *  to <TT>target</TT>.
- * @param targetLimit the pointer just after last of the <TT>target</TT> buffer
- * @param source I/O parameter, pointer to pointer to the source Unicode character buffer. 
- * @param sourceLimit the pointer just after the last of the source buffer
- * @param offsets if NULL is passed, nothing will happen to it, otherwise it needs to have the same number
- * of allocated cells as <TT>target</TT>. Will fill in offsets from target to source pointer
- * e.g: <TT>offsets[3]</TT> is equal to 6, it means that the <TT>target[3]</TT> was a result of transcoding <TT>source[6]</TT>
- * For output data carried across calls, and other data without a specific source character
- * (such as from escape sequences or callbacks)  -1 will be placed for offsets. 
- * @param flush set to <TT>TRUE</TT> if the current source buffer is the last available
- * chunk of the source, <TT>FALSE</TT> otherwise. Note that if a failing status is returned,
- * this function may have to be called multiple times with flush set to <TT>TRUE</TT> until
- * the source buffer is consumed.
- * @param err the error status.  <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> will be set if the
- * converter is <TT>NULL</TT>.
- * <code>U_BUFFER_OVERFLOW_ERROR</code> will be set if the target is full and there is 
- * still data to be written to the target.
- * @see ucnv_fromUChars
- * @see ucnv_convert
- * @see ucnv_getMinCharSize
- * @see ucnv_setToUCallBack
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucnv_fromUnicode (UConverter * converter,
-                  char **target,
-                  const char *targetLimit,
-                  const UChar ** source,
-                  const UChar * sourceLimit,
-                  int32_t* offsets,
-                  UBool flush,
-                  UErrorCode * err);
-
-/**
- * Converts a buffer of codepage bytes into an array of unicode UChars
- * characters. This function is optimized for converting a continuous
- * stream of data in buffer-sized chunks, where the entire source and
- * target does not fit in available buffers.
- * 
- * The source pointer is an in/out parameter. It starts out pointing where the 
- * conversion is to begin, and ends up pointing after the last byte of source consumed. 
- * 
- * Target similarly starts out pointer at the first available UChar in the output
- * buffer, and ends up pointing after the last UChar written to the output. 
- * It does NOT necessarily keep UChar sequences together.
- * 
- * The converter always attempts to consume the entire source buffer, unless 
- * (1.) the target buffer is full, or (2.) a failing error is returned from the
- * current callback function.  When a successful error status has been
- * returned, it means that all of the source buffer has been
- *  consumed. At that point, the caller should reset the source and
- *  sourceLimit pointers to point to the next chunk.
- *
- * At the end of the stream (flush==TRUE), the input is completely consumed
- * when *source==sourceLimit and no error code is set
- * The converter object is then automatically reset by this function.
- * (This means that a converter need not be reset explicitly between data
- * streams if it finishes the previous stream without errors.)
- * 
- * This is a <I>stateful</I> conversion. Additionally, even when all source data has
- * been consumed, some data may be in the converters' internal state.
- * Call this function repeatedly, updating the target pointers with
- * the next empty chunk of target in case of a
- * <TT>U_BUFFER_OVERFLOW_ERROR</TT>, and updating the source  pointers
- *  with the next chunk of source when a successful error status is
- * returned, until there are no more chunks of source data.
- * @param converter the Unicode converter
- * @param target I/O parameter. Input : Points to the beginning of the buffer to copy
- *  UChars into. Output : points to after the last UChar copied.
- * @param targetLimit the pointer just after the end of the <TT>target</TT> buffer
- * @param source I/O parameter, pointer to pointer to the source codepage buffer. 
- * @param sourceLimit the pointer to the byte after the end of the source buffer
- * @param offsets if NULL is passed, nothing will happen to it, otherwise it needs to have the same number
- * of allocated cells as <TT>target</TT>. Will fill in offsets from target to source pointer
- * e.g: <TT>offsets[3]</TT> is equal to 6, it means that the <TT>target[3]</TT> was a result of transcoding <TT>source[6]</TT>
- * For output data carried across calls, and other data without a specific source character
- * (such as from escape sequences or callbacks)  -1 will be placed for offsets. 
- * @param flush set to <TT>TRUE</TT> if the current source buffer is the last available
- * chunk of the source, <TT>FALSE</TT> otherwise. Note that if a failing status is returned,
- * this function may have to be called multiple times with flush set to <TT>TRUE</TT> until
- * the source buffer is consumed.
- * @param err the error status.  <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> will be set if the
- * converter is <TT>NULL</TT>.
- * <code>U_BUFFER_OVERFLOW_ERROR</code> will be set if the target is full and there is 
- * still data to be written to the target. 
- * @see ucnv_fromUChars
- * @see ucnv_convert
- * @see ucnv_getMinCharSize
- * @see ucnv_setFromUCallBack
- * @see ucnv_getNextUChar
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucnv_toUnicode(UConverter *converter,
-               UChar **target,
-               const UChar *targetLimit,
-               const char **source,
-               const char *sourceLimit,
-               int32_t *offsets,
-               UBool flush,
-               UErrorCode *err);
-
-/**
- * Convert the Unicode string into a codepage string using an existing UConverter.
- * The output string is NUL-terminated if possible.
- *
- * This function is a more convenient but less powerful version of ucnv_fromUnicode().
- * It is only useful for whole strings, not for streaming conversion.
- *
- * The maximum output buffer capacity required (barring output from callbacks) will be
- * UCNV_GET_MAX_BYTES_FOR_STRING(srcLength, ucnv_getMaxCharSize(cnv)).
- *
- * @param cnv the converter object to be used (ucnv_resetFromUnicode() will be called)
- * @param src the input Unicode string
- * @param srcLength the input string length, or -1 if NUL-terminated
- * @param dest destination string buffer, can be NULL if destCapacity==0
- * @param destCapacity the number of chars available at dest
- * @param pErrorCode normal ICU error code;
- *                  common error codes that may be set by this function include
- *                  U_BUFFER_OVERFLOW_ERROR, U_STRING_NOT_TERMINATED_WARNING,
- *                  U_ILLEGAL_ARGUMENT_ERROR, and conversion errors
- * @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
- * @see ucnv_fromUnicode
- * @see ucnv_convert
- * @see UCNV_GET_MAX_BYTES_FOR_STRING
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_fromUChars(UConverter *cnv,
-                char *dest, int32_t destCapacity,
-                const UChar *src, int32_t srcLength,
-                UErrorCode *pErrorCode);
-
-/**
- * Convert the codepage string into a Unicode string using an existing UConverter.
- * The output string is NUL-terminated if possible.
- *
- * This function is a more convenient but less powerful version of ucnv_toUnicode().
- * It is only useful for whole strings, not for streaming conversion.
- *
- * The maximum output buffer capacity required (barring output from callbacks) will be
- * 2*srcLength (each char may be converted into a surrogate pair).
- *
- * @param cnv the converter object to be used (ucnv_resetToUnicode() will be called)
- * @param src the input codepage string
- * @param srcLength the input string length, or -1 if NUL-terminated
- * @param dest destination string buffer, can be NULL if destCapacity==0
- * @param destCapacity the number of UChars available at dest
- * @param pErrorCode normal ICU error code;
- *                  common error codes that may be set by this function include
- *                  U_BUFFER_OVERFLOW_ERROR, U_STRING_NOT_TERMINATED_WARNING,
- *                  U_ILLEGAL_ARGUMENT_ERROR, and conversion errors
- * @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
- * @see ucnv_toUnicode
- * @see ucnv_convert
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_toUChars(UConverter *cnv,
-              UChar *dest, int32_t destCapacity,
-              const char *src, int32_t srcLength,
-              UErrorCode *pErrorCode);
-
-/**
- * Convert a codepage buffer into Unicode one character at a time.
- * The input is completely consumed when the U_INDEX_OUTOFBOUNDS_ERROR is set.
- *
- * Advantage compared to ucnv_toUnicode() or ucnv_toUChars():
- * - Faster for small amounts of data, for most converters, e.g.,
- *   US-ASCII, ISO-8859-1, UTF-8/16/32, and most "normal" charsets.
- *   (For complex converters, e.g., SCSU, UTF-7 and ISO 2022 variants,
- *    it uses ucnv_toUnicode() internally.)
- * - Convenient.
- *
- * Limitations compared to ucnv_toUnicode():
- * - Always assumes flush=TRUE.
- *   This makes ucnv_getNextUChar() unsuitable for "streaming" conversion,
- *   that is, for where the input is supplied in multiple buffers,
- *   because ucnv_getNextUChar() will assume the end of the input at the end
- *   of the first buffer.
- * - Does not provide offset output.
- *
- * It is possible to "mix" ucnv_getNextUChar() and ucnv_toUnicode() because
- * ucnv_getNextUChar() uses the current state of the converter
- * (unlike ucnv_toUChars() which always resets first).
- * However, if ucnv_getNextUChar() is called after ucnv_toUnicode()
- * stopped in the middle of a character sequence (with flush=FALSE),
- * then ucnv_getNextUChar() will always use the slower ucnv_toUnicode()
- * internally until the next character boundary.
- * (This is new in ICU 2.6. In earlier releases, ucnv_getNextUChar() had to
- * start at a character boundary.)
- *
- * Instead of using ucnv_getNextUChar(), it is recommended
- * to convert using ucnv_toUnicode() or ucnv_toUChars()
- * and then iterate over the text using U16_NEXT() or a UCharIterator (uiter.h)
- * or a C++ CharacterIterator or similar.
- * This allows streaming conversion and offset output, for example.
- *
- * <p>Handling of surrogate pairs and supplementary-plane code points:<br>
- * There are two different kinds of codepages that provide mappings for surrogate characters:
- * <ul>
- *   <li>Codepages like UTF-8, UTF-32, and GB 18030 provide direct representations for Unicode
- *       code points U+10000-U+10ffff as well as for single surrogates U+d800-U+dfff.
- *       Each valid sequence will result in exactly one returned code point.
- *       If a sequence results in a single surrogate, then that will be returned
- *       by itself, even if a neighboring sequence encodes the matching surrogate.</li>
- *   <li>Codepages like SCSU and LMBCS (and UTF-16) provide direct representations only for BMP code points
- *       including surrogates. Code points in supplementary planes are represented with
- *       two sequences, each encoding a surrogate.
- *       For these codepages, matching pairs of surrogates will be combined into single
- *       code points for returning from this function.
- *       (Note that SCSU is actually a mix of these codepage types.)</li>
- * </ul></p>
- *
- * @param converter an open UConverter
- * @param source the address of a pointer to the codepage buffer, will be
- *  updated to point after the bytes consumed in the conversion call.
- * @param sourceLimit points to the end of the input buffer
- * @param err fills in error status (see ucnv_toUnicode)
- * <code>U_INDEX_OUTOFBOUNDS_ERROR</code> will be set if the input 
- * is empty or does not convert to any output (e.g.: pure state-change 
- * codes SI/SO, escape sequences for ISO 2022,
- * or if the callback did not output anything, ...).
- * This function will not set a <code>U_BUFFER_OVERFLOW_ERROR</code> because
- *  the "buffer" is the return code. However, there might be subsequent output
- *  stored in the converter object
- * that will be returned in following calls to this function.
- * @return a UChar32 resulting from the partial conversion of source
- * @see ucnv_toUnicode
- * @see ucnv_toUChars
- * @see ucnv_convert
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-ucnv_getNextUChar(UConverter * converter,
-                  const char **source,
-                  const char * sourceLimit,
-                  UErrorCode * err);
-
-/**
- * Convert from one external charset to another using two existing UConverters.
- * Internally, two conversions - ucnv_toUnicode() and ucnv_fromUnicode() -
- * are used, "pivoting" through 16-bit Unicode.
- *
- * Important: For streaming conversion (multiple function calls for successive
- * parts of a text stream), the caller must provide a pivot buffer explicitly,
- * and must preserve the pivot buffer and associated pointers from one
- * call to another. (The buffer may be moved if its contents and the relative
- * pointer positions are preserved.)
- *
- * There is a similar function, ucnv_convert(),
- * which has the following limitations:
- * - it takes charset names, not converter objects, so that
- *   - two converters are opened for each call
- *   - only single-string conversion is possible, not streaming operation
- * - it does not provide enough information to find out,
- *   in case of failure, whether the toUnicode or
- *   the fromUnicode conversion failed
- *
- * By contrast, ucnv_convertEx()
- * - takes UConverter parameters instead of charset names
- * - fully exposes the pivot buffer for streaming conversion and complete error handling
- *
- * ucnv_convertEx() also provides further convenience:
- * - an option to reset the converters at the beginning
- *   (if reset==TRUE, see parameters;
- *    also sets *pivotTarget=*pivotSource=pivotStart)
- * - allow NUL-terminated input
- *   (only a single NUL byte, will not work for charsets with multi-byte NULs)
- *   (if sourceLimit==NULL, see parameters)
- * - terminate with a NUL on output
- *   (only a single NUL byte, not useful for charsets with multi-byte NULs),
- *   or set U_STRING_NOT_TERMINATED_WARNING if the output exactly fills
- *   the target buffer
- * - the pivot buffer can be provided internally;
- *   possible only for whole-string conversion, not streaming conversion;
- *   in this case, the caller will not be able to get details about where an
- *   error occurred
- *   (if pivotStart==NULL, see below)
- *
- * The function returns when one of the following is true:
- * - the entire source text has been converted successfully to the target buffer
- * - a target buffer overflow occurred (U_BUFFER_OVERFLOW_ERROR)
- * - a conversion error occurred
- *   (other U_FAILURE(), see description of pErrorCode)
- *
- * Limitation compared to the direct use of
- * ucnv_fromUnicode() and ucnv_toUnicode():
- * ucnv_convertEx() does not provide offset information.
- *
- * Limitation compared to ucnv_fromUChars() and ucnv_toUChars():
- * ucnv_convertEx() does not support preflighting directly.
- *
- * Sample code for converting a single string from
- * one external charset to UTF-8, ignoring the location of errors:
- *
- * \code
- * int32_t
- * myToUTF8(UConverter *cnv,
- *          const char *s, int32_t length,
- *          char *u8, int32_t capacity,
- *          UErrorCode *pErrorCode) {
- *     UConverter *utf8Cnv;
- *     char *target;
- *
- *     if(U_FAILURE(*pErrorCode)) {
- *         return 0;
- *     }
- *
- *     utf8Cnv=myGetCachedUTF8Converter(pErrorCode);
- *     if(U_FAILURE(*pErrorCode)) {
- *         return 0;
- *     }
- *
- *     if(length<0) {
- *         length=strlen(s);
- *     }
- *     target=u8;
- *     ucnv_convertEx(utf8Cnv, cnv,
- *                    &target, u8+capacity,
- *                    &s, s+length,
- *                    NULL, NULL, NULL, NULL,
- *                    TRUE, TRUE,
- *                    pErrorCode);
- * 
- *     myReleaseCachedUTF8Converter(utf8Cnv);
- *
- *     // return the output string length, but without preflighting
- *     return (int32_t)(target-u8);
- * }
- * \endcode
- *
- * @param targetCnv     Output converter, used to convert from the UTF-16 pivot
- *                      to the target using ucnv_fromUnicode().
- * @param sourceCnv     Input converter, used to convert from the source to
- *                      the UTF-16 pivot using ucnv_toUnicode().
- * @param target        I/O parameter, same as for ucnv_fromUChars().
- *                      Input: *target points to the beginning of the target buffer.
- *                      Output: *target points to the first unit after the last char written.
- * @param targetLimit   Pointer to the first unit after the target buffer.
- * @param source        I/O parameter, same as for ucnv_toUChars().
- *                      Input: *source points to the beginning of the source buffer.
- *                      Output: *source points to the first unit after the last char read.
- * @param sourceLimit   Pointer to the first unit after the source buffer.
- * @param pivotStart    Pointer to the UTF-16 pivot buffer. If pivotStart==NULL,
- *                      then an internal buffer is used and the other pivot
- *                      arguments are ignored and can be NULL as well.
- * @param pivotSource   I/O parameter, same as source in ucnv_fromUChars() for
- *                      conversion from the pivot buffer to the target buffer.
- * @param pivotTarget   I/O parameter, same as target in ucnv_toUChars() for
- *                      conversion from the source buffer to the pivot buffer.
- *                      It must be pivotStart<=*pivotSource<=*pivotTarget<=pivotLimit
- *                      and pivotStart<pivotLimit (unless pivotStart==NULL).
- * @param pivotLimit    Pointer to the first unit after the pivot buffer.
- * @param reset         If TRUE, then ucnv_resetToUnicode(sourceCnv) and
- *                      ucnv_resetFromUnicode(targetCnv) are called, and the
- *                      pivot pointers are reset (*pivotTarget=*pivotSource=pivotStart).
- * @param flush         If true, indicates the end of the input.
- *                      Passed directly to ucnv_toUnicode(), and carried over to
- *                      ucnv_fromUnicode() when the source is empty as well.
- * @param pErrorCode    ICU error code in/out parameter.
- *                      Must fulfill U_SUCCESS before the function call.
- *                      U_BUFFER_OVERFLOW_ERROR always refers to the target buffer
- *                      because overflows into the pivot buffer are handled internally.
- *                      Other conversion errors are from the source-to-pivot
- *                      conversion if *pivotSource==pivotStart, otherwise from
- *                      the pivot-to-target conversion.
- *
- * @see ucnv_convert
- * @see ucnv_fromAlgorithmic
- * @see ucnv_toAlgorithmic
- * @see ucnv_fromUnicode
- * @see ucnv_toUnicode
- * @see ucnv_fromUChars
- * @see ucnv_toUChars
- * @stable ICU 2.6
- */
-U_STABLE void U_EXPORT2
-ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
-               char **target, const char *targetLimit,
-               const char **source, const char *sourceLimit,
-               UChar *pivotStart, UChar **pivotSource,
-               UChar **pivotTarget, const UChar *pivotLimit,
-               UBool reset, UBool flush,
-               UErrorCode *pErrorCode);
-
-/**
- * Convert from one external charset to another.
- * Internally, two converters are opened according to the name arguments,
- * then the text is converted to and from the 16-bit Unicode "pivot"
- * using ucnv_convertEx(), then the converters are closed again.
- *
- * This is a convenience function, not an efficient way to convert a lot of text:
- * ucnv_convert()
- * - takes charset names, not converter objects, so that
- *   - two converters are opened for each call
- *   - only single-string conversion is possible, not streaming operation
- * - does not provide enough information to find out,
- *   in case of failure, whether the toUnicode or
- *   the fromUnicode conversion failed
- * - allows NUL-terminated input
- *   (only a single NUL byte, will not work for charsets with multi-byte NULs)
- *   (if sourceLength==-1, see parameters)
- * - terminate with a NUL on output
- *   (only a single NUL byte, not useful for charsets with multi-byte NULs),
- *   or set U_STRING_NOT_TERMINATED_WARNING if the output exactly fills
- *   the target buffer
- * - a pivot buffer is provided internally
- *
- * The function returns when one of the following is true:
- * - the entire source text has been converted successfully to the target buffer
- *   and either the target buffer is terminated with a single NUL byte
- *   or the error code is set to U_STRING_NOT_TERMINATED_WARNING
- * - a target buffer overflow occurred (U_BUFFER_OVERFLOW_ERROR)
- *   and the full output string length is returned ("preflighting")
- * - a conversion error occurred
- *   (other U_FAILURE(), see description of pErrorCode)
- *
- * @param toConverterName   The name of the converter that is used to convert
- *                          from the UTF-16 pivot buffer to the target.
- * @param fromConverterName The name of the converter that is used to convert
- *                          from the source to the UTF-16 pivot buffer.
- * @param target            Pointer to the output buffer.
- * @param targetCapacity    Capacity of the target, in bytes.
- * @param source            Pointer to the input buffer.
- * @param sourceLength      Length of the input text, in bytes, or -1 for NUL-terminated input.
- * @param pErrorCode        ICU error code in/out parameter.
- *                          Must fulfill U_SUCCESS before the function call.
- * @return Length of the complete output text in bytes, even if it exceeds the targetCapacity
- *         and a U_BUFFER_OVERFLOW_ERROR is set.
- *
- * @see ucnv_convertEx
- * @see ucnv_fromAlgorithmic
- * @see ucnv_toAlgorithmic
- * @see ucnv_fromUnicode
- * @see ucnv_toUnicode
- * @see ucnv_fromUChars
- * @see ucnv_toUChars
- * @see ucnv_getNextUChar
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_convert(const char *toConverterName,
-             const char *fromConverterName,
-             char *target,
-             int32_t targetCapacity,
-             const char *source,
-             int32_t sourceLength,
-             UErrorCode *pErrorCode);
-
-/**
- * Convert from one external charset to another.
- * Internally, the text is converted to and from the 16-bit Unicode "pivot"
- * using ucnv_convertEx(). ucnv_toAlgorithmic() works exactly like ucnv_convert()
- * except that the two converters need not be looked up and opened completely.
- *
- * The source-to-pivot conversion uses the cnv converter parameter.
- * The pivot-to-target conversion uses a purely algorithmic converter
- * according to the specified type, e.g., UCNV_UTF8 for a UTF-8 converter.
- *
- * Internally, the algorithmic converter is opened and closed for each
- * function call, which is more efficient than using the public ucnv_open()
- * but somewhat less efficient than only resetting an existing converter
- * and using ucnv_convertEx().
- *
- * This function is more convenient than ucnv_convertEx() for single-string
- * conversions, especially when "preflighting" is desired (returning the length
- * of the complete output even if it does not fit into the target buffer;
- * see the User Guide Strings chapter). See ucnv_convert() for details.
- *
- * @param algorithmicType   UConverterType constant identifying the desired target
- *                          charset as a purely algorithmic converter.
- *                          Those are converters for Unicode charsets like
- *                          UTF-8, BOCU-1, SCSU, UTF-7, IMAP-mailbox-name, etc.,
- *                          as well as US-ASCII and ISO-8859-1.
- * @param cnv               The converter that is used to convert
- *                          from the source to the UTF-16 pivot buffer.
- * @param target            Pointer to the output buffer.
- * @param targetCapacity    Capacity of the target, in bytes.
- * @param source            Pointer to the input buffer.
- * @param sourceLength      Length of the input text, in bytes
- * @param pErrorCode        ICU error code in/out parameter.
- *                          Must fulfill U_SUCCESS before the function call.
- * @return Length of the complete output text in bytes, even if it exceeds the targetCapacity
- *         and a U_BUFFER_OVERFLOW_ERROR is set.
- *
- * @see ucnv_fromAlgorithmic
- * @see ucnv_convert
- * @see ucnv_convertEx
- * @see ucnv_fromUnicode
- * @see ucnv_toUnicode
- * @see ucnv_fromUChars
- * @see ucnv_toUChars
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_toAlgorithmic(UConverterType algorithmicType,
-                   UConverter *cnv,
-                   char *target, int32_t targetCapacity,
-                   const char *source, int32_t sourceLength,
-                   UErrorCode *pErrorCode);
-
-/**
- * Convert from one external charset to another.
- * Internally, the text is converted to and from the 16-bit Unicode "pivot"
- * using ucnv_convertEx(). ucnv_fromAlgorithmic() works exactly like ucnv_convert()
- * except that the two converters need not be looked up and opened completely.
- *
- * The source-to-pivot conversion uses a purely algorithmic converter
- * according to the specified type, e.g., UCNV_UTF8 for a UTF-8 converter.
- * The pivot-to-target conversion uses the cnv converter parameter.
- *
- * Internally, the algorithmic converter is opened and closed for each
- * function call, which is more efficient than using the public ucnv_open()
- * but somewhat less efficient than only resetting an existing converter
- * and using ucnv_convertEx().
- *
- * This function is more convenient than ucnv_convertEx() for single-string
- * conversions, especially when "preflighting" is desired (returning the length
- * of the complete output even if it does not fit into the target buffer;
- * see the User Guide Strings chapter). See ucnv_convert() for details.
- *
- * @param cnv               The converter that is used to convert
- *                          from the UTF-16 pivot buffer to the target.
- * @param algorithmicType   UConverterType constant identifying the desired source
- *                          charset as a purely algorithmic converter.
- *                          Those are converters for Unicode charsets like
- *                          UTF-8, BOCU-1, SCSU, UTF-7, IMAP-mailbox-name, etc.,
- *                          as well as US-ASCII and ISO-8859-1.
- * @param target            Pointer to the output buffer.
- * @param targetCapacity    Capacity of the target, in bytes.
- * @param source            Pointer to the input buffer.
- * @param sourceLength      Length of the input text, in bytes
- * @param pErrorCode        ICU error code in/out parameter.
- *                          Must fulfill U_SUCCESS before the function call.
- * @return Length of the complete output text in bytes, even if it exceeds the targetCapacity
- *         and a U_BUFFER_OVERFLOW_ERROR is set.
- *
- * @see ucnv_fromAlgorithmic
- * @see ucnv_convert
- * @see ucnv_convertEx
- * @see ucnv_fromUnicode
- * @see ucnv_toUnicode
- * @see ucnv_fromUChars
- * @see ucnv_toUChars
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_fromAlgorithmic(UConverter *cnv,
-                     UConverterType algorithmicType,
-                     char *target, int32_t targetCapacity,
-                     const char *source, int32_t sourceLength,
-                     UErrorCode *pErrorCode);
-
-/**
- * Frees up memory occupied by unused, cached converter shared data.
- *
- * @return the number of cached converters successfully deleted
- * @see ucnv_close
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_flushCache(void);
-
-/**
- * Returns the number of available converters, as per the alias file.
- *
- * @return the number of available converters
- * @see ucnv_getAvailableName
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_countAvailable(void);
-
-/**
- * Gets the canonical converter name of the specified converter from a list of
- * all available converters contaied in the alias file. All converters
- * in this list can be opened.
- *
- * @param n the index to a converter available on the system (in the range <TT>[0..ucnv_countAvaiable()]</TT>)
- * @return a pointer a string (library owned), or <TT>NULL</TT> if the index is out of bounds.
- * @see ucnv_countAvailable
- * @stable ICU 2.0
- */
-U_STABLE const char* U_EXPORT2
-ucnv_getAvailableName(int32_t n);
-
-/**
- * Returns a UEnumeration to enumerate all of the canonical converter
- * names, as per the alias file, regardless of the ability to open each
- * converter.
- *
- * @return A UEnumeration object for getting all the recognized canonical
- *   converter names.
- * @see ucnv_getAvailableName
- * @see uenum_close
- * @see uenum_next
- * @stable ICU 2.4
- */
-U_STABLE UEnumeration * U_EXPORT2
-ucnv_openAllNames(UErrorCode *pErrorCode);
-
-/**
- * Gives the number of aliases for a given converter or alias name.
- * If the alias is ambiguous, then the preferred converter is used
- * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.
- * This method only enumerates the listed entries in the alias file.
- * @param alias alias name
- * @param pErrorCode error status
- * @return number of names on alias list for given alias
- * @stable ICU 2.0
- */
-U_STABLE uint16_t U_EXPORT2 
-ucnv_countAliases(const char *alias, UErrorCode *pErrorCode);
-
-/**
- * Gives the name of the alias at given index of alias list.
- * This method only enumerates the listed entries in the alias file.
- * If the alias is ambiguous, then the preferred converter is used
- * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.
- * @param alias alias name
- * @param n index in alias list
- * @param pErrorCode result of operation
- * @return returns the name of the alias at given index
- * @see ucnv_countAliases
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2 
-ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode);
-
-/**
- * Fill-up the list of alias names for the given alias.
- * This method only enumerates the listed entries in the alias file.
- * If the alias is ambiguous, then the preferred converter is used
- * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.
- * @param alias alias name
- * @param aliases fill-in list, aliases is a pointer to an array of
- *        <code>ucnv_countAliases()</code> string-pointers
- *        (<code>const char *</code>) that will be filled in.
- *        The strings themselves are owned by the library.
- * @param pErrorCode result of operation
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode);
-
-/**
- * Return a new UEnumeration object for enumerating all the
- * alias names for a given converter that are recognized by a standard.
- * This method only enumerates the listed entries in the alias file.
- * The convrtrs.txt file can be modified to change the results of
- * this function.
- * The first result in this list is the same result given by
- * <code>ucnv_getStandardName</code>, which is the default alias for
- * the specified standard name. The returned object must be closed with
- * <code>uenum_close</code> when you are done with the object.
- *
- * @param convName original converter name
- * @param standard name of the standard governing the names; MIME and IANA
- *      are such standards
- * @param pErrorCode The error code
- * @return A UEnumeration object for getting all aliases that are recognized
- *      by a standard. If any of the parameters are invalid, NULL
- *      is returned.
- * @see ucnv_getStandardName
- * @see uenum_close
- * @see uenum_next
- * @stable ICU 2.2
- */
-U_STABLE UEnumeration * U_EXPORT2
-ucnv_openStandardNames(const char *convName,
-                       const char *standard,
-                       UErrorCode *pErrorCode);
-
-/**
- * Gives the number of standards associated to converter names.
- * @return number of standards
- * @stable ICU 2.0
- */
-U_STABLE uint16_t U_EXPORT2
-ucnv_countStandards(void);
-
-/**
- * Gives the name of the standard at given index of standard list.
- * @param n index in standard list
- * @param pErrorCode result of operation
- * @return returns the name of the standard at given index. Owned by the library.
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2
-ucnv_getStandard(uint16_t n, UErrorCode *pErrorCode);
-
-/**
- * Returns a standard name for a given converter name.
- * <p>
- * Example alias table:<br>
- * conv alias1 { STANDARD1 } alias2 { STANDARD1* }
- * <p>
- * Result of ucnv_getStandardName("conv", "STANDARD1") from example
- * alias table:<br>
- * <b>"alias2"</b>
- *
- * @param name original converter name
- * @param standard name of the standard governing the names; MIME and IANA
- *        are such standards
- * @param pErrorCode result of operation
- * @return returns the standard converter name;
- *         if a standard converter name cannot be determined,
- *         then <code>NULL</code> is returned. Owned by the library.
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2
-ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorCode);
-
-/**
- * This function will return the internal canonical converter name of the
- * tagged alias. This is the opposite of ucnv_openStandardNames, which
- * returns the tagged alias given the canonical name.
- * <p>
- * Example alias table:<br>
- * conv alias1 { STANDARD1 } alias2 { STANDARD1* }
- * <p>
- * Result of ucnv_getStandardName("alias1", "STANDARD1") from example
- * alias table:<br>
- * <b>"conv"</b>
- *
- * @return returns the canonical converter name;
- *         if a standard or alias name cannot be determined,
- *         then <code>NULL</code> is returned. The returned string is
- *         owned by the library.
- * @see ucnv_getStandardName
- * @stable ICU 2.4
- */
-U_STABLE const char * U_EXPORT2
-ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode);
-
-/**
- * Returns the current default converter name. If you want to open
- * a default converter, you do not need to use this function.
- * It is faster if you pass a NULL argument to ucnv_open the
- * default converter.
- *
- * If U_CHARSET_IS_UTF8 is defined to 1 in utypes.h then this function
- * always returns "UTF-8".
- *
- * @return returns the current default converter name.
- *         Storage owned by the library
- * @see ucnv_setDefaultName
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2
-ucnv_getDefaultName(void);
-
-/**
- * This function is not thread safe. DO NOT call this function when ANY ICU
- * function is being used from more than one thread! This function sets the
- * current default converter name. If this function needs to be called, it
- * should be called during application initialization. Most of the time, the
- * results from ucnv_getDefaultName() or ucnv_open with a NULL string argument
- * is sufficient for your application.
- *
- * If U_CHARSET_IS_UTF8 is defined to 1 in utypes.h then this function
- * does nothing.
- *
- * @param name the converter name to be the default (must be known by ICU).
- * @see ucnv_getDefaultName
- * @system
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_setDefaultName(const char *name);
-
-/**
- * Fixes the backslash character mismapping.  For example, in SJIS, the backslash 
- * character in the ASCII portion is also used to represent the yen currency sign.  
- * When mapping from Unicode character 0x005C, it's unclear whether to map the 
- * character back to yen or backslash in SJIS.  This function will take the input
- * buffer and replace all the yen sign characters with backslash.  This is necessary
- * when the user tries to open a file with the input buffer on Windows.
- * This function will test the converter to see whether such mapping is
- * required.  You can sometimes avoid using this function by using the correct version
- * of Shift-JIS.
- *
- * @param cnv The converter representing the target codepage.
- * @param source the input buffer to be fixed
- * @param sourceLen the length of the input buffer
- * @see ucnv_isAmbiguous
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_fixFileSeparator(const UConverter *cnv, UChar *source, int32_t sourceLen);
-
-/**
- * Determines if the converter contains ambiguous mappings of the same
- * character or not.
- * @param cnv the converter to be tested
- * @return TRUE if the converter contains ambiguous mapping of the same 
- * character, FALSE otherwise.
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2
-ucnv_isAmbiguous(const UConverter *cnv);
-
-/**
- * Sets the converter to use fallback mappings or not.
- * Regardless of this flag, the converter will always use
- * fallbacks from Unicode Private Use code points, as well as
- * reverse fallbacks (to Unicode).
- * For details see ".ucm File Format"
- * in the Conversion Data chapter of the ICU User Guide:
- * http://www.icu-project.org/userguide/conversion-data.html#ucmformat
- *
- * @param cnv The converter to set the fallback mapping usage on.
- * @param usesFallback TRUE if the user wants the converter to take advantage of the fallback 
- * mapping, FALSE otherwise.
- * @stable ICU 2.0
- * @see ucnv_usesFallback
- */
-U_STABLE void U_EXPORT2 
-ucnv_setFallback(UConverter *cnv, UBool usesFallback);
-
-/**
- * Determines if the converter uses fallback mappings or not.
- * This flag has restrictions, see ucnv_setFallback().
- *
- * @param cnv The converter to be tested
- * @return TRUE if the converter uses fallback, FALSE otherwise.
- * @stable ICU 2.0
- * @see ucnv_setFallback
- */
-U_STABLE UBool U_EXPORT2 
-ucnv_usesFallback(const UConverter *cnv);
-
-/**
- * Detects Unicode signature byte sequences at the start of the byte stream
- * and returns the charset name of the indicated Unicode charset.
- * NULL is returned when no Unicode signature is recognized.
- * The number of bytes in the signature is output as well.
- *
- * The caller can ucnv_open() a converter using the charset name.
- * The first code unit (UChar) from the start of the stream will be U+FEFF
- * (the Unicode BOM/signature character) and can usually be ignored.
- *
- * For most Unicode charsets it is also possible to ignore the indicated
- * number of initial stream bytes and start converting after them.
- * However, there are stateful Unicode charsets (UTF-7 and BOCU-1) for which
- * this will not work. Therefore, it is best to ignore the first output UChar
- * instead of the input signature bytes.
- * <p>
- * Usage:
- * @code     
- *      UErrorCode err = U_ZERO_ERROR;
- *      char input[] = { '\xEF','\xBB', '\xBF','\x41','\x42','\x43' };
- *      int32_t signatureLength = 0;
- *      char *encoding = ucnv_detectUnicodeSignature(input,sizeof(input),&signatureLength,&err);
- *      UConverter *conv = NULL;
- *      UChar output[100];
- *      UChar *target = output, *out;
- *      char *source = input;
- *      if(encoding!=NULL && U_SUCCESS(err)){
- *          // should signature be discarded ?
- *          conv = ucnv_open(encoding, &err);
- *          // do the conversion
- *          ucnv_toUnicode(conv,
- *                         target, output + sizeof(output)/U_SIZEOF_UCHAR,
- *                         source, input + sizeof(input),
- *                         NULL, TRUE, &err);
- *          out = output;
- *          if (discardSignature){
- *              ++out; // ignore initial U+FEFF
- *          }
- *          while(out != target) {
- *              printf("%04x ", *out++);
- *          }
- *          puts("");
- *      }
- *     
- * @endcode
- *
- * @param source            The source string in which the signature should be detected.
- * @param sourceLength      Length of the input string, or -1 if terminated with a NUL byte.
- * @param signatureLength   A pointer to int32_t to receive the number of bytes that make up the signature 
- *                          of the detected UTF. 0 if not detected.
- *                          Can be a NULL pointer.
- * @param pErrorCode        ICU error code in/out parameter.
- *                          Must fulfill U_SUCCESS before the function call.
- * @return The name of the encoding detected. NULL if encoding is not detected. 
- * @stable ICU 2.4
- */
-U_STABLE const char* U_EXPORT2
-ucnv_detectUnicodeSignature(const char* source,
-                            int32_t sourceLength,
-                            int32_t *signatureLength,
-                            UErrorCode *pErrorCode);
-
-/**
- * Returns the number of UChars held in the converter's internal state 
- * because more input is needed for completing the conversion. This function is 
- * useful for mapping semantics of ICU's converter interface to those of iconv,
- * and this information is not needed for normal conversion.
- * @param cnv       The converter in which the input is held
- * @param status    ICU error code in/out parameter.
- *                  Must fulfill U_SUCCESS before the function call.
- * @return The number of UChars in the state. -1 if an error is encountered.
- * @stable ICU 3.4
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status);
-
-/**
- * Returns the number of chars held in the converter's internal state
- * because more input is needed for completing the conversion. This function is 
- * useful for mapping semantics of ICU's converter interface to those of iconv,
- * and this information is not needed for normal conversion.
- * @param cnv       The converter in which the input is held as internal state
- * @param status    ICU error code in/out parameter.
- *                  Must fulfill U_SUCCESS before the function call.
- * @return The number of chars in the state. -1 if an error is encountered.
- * @stable ICU 3.4
- */
-U_STABLE int32_t U_EXPORT2
-ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status);
-
-#endif
-
-#endif
-/*_UCNV*/
diff --git a/source/common/unicode/ucnv_cb.h b/source/common/unicode/ucnv_cb.h
deleted file mode 100644
index f0e67ba..0000000
--- a/source/common/unicode/ucnv_cb.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2000-2004, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
- *  ucnv_cb.h:
- *  External APIs for the ICU's codeset conversion library
- *  Helena Shih
- * 
- * Modification History:
- *
- *   Date        Name        Description
- */
-
-/**
- * \file 
- * \brief C UConverter functions to aid the writers of callbacks
- *
- * <h2> Callback API for UConverter </h2>
- * 
- * These functions are provided here for the convenience of the callback
- * writer. If you are just looking for callback functions to use, please
- * see ucnv_err.h.  DO NOT call these functions directly when you are 
- * working with converters, unless your code has been called as a callback
- * via ucnv_setFromUCallback or ucnv_setToUCallback !!
- * 
- * A note about error codes and overflow.  Unlike other ICU functions,
- * these functions do not expect the error status to be U_ZERO_ERROR.
- * Callbacks must be much more careful about their error codes.
- * The error codes used here are in/out parameters, which should be passed
- * back in the callback's error parameter.
- * 
- * For example, if you call ucnv_cbfromUWriteBytes to write data out 
- * to the output codepage, it may return U_BUFFER_OVERFLOW_ERROR if 
- * the data did not fit in the target. But this isn't a failing error, 
- * in fact, ucnv_cbfromUWriteBytes may be called AGAIN with the error
- * status still U_BUFFER_OVERFLOW_ERROR to attempt to write further bytes,
- * which will also go into the internal overflow buffers.
- * 
- * Concerning offsets, the 'offset' parameters here are relative to the start
- * of SOURCE.  For example, Suppose the string "ABCD" was being converted 
- * from Unicode into a codepage which doesn't have a mapping for 'B'.
- * 'A' will be written out correctly, but
- * The FromU Callback will be called on an unassigned character for 'B'.
- * At this point, this is the state of the world:
- *    Target:    A [..]     [points after A]
- *    Source:  A B [C] D    [points to C - B has been consumed]
- *             0 1  2  3 
- *    codePoint = "B"       [the unassigned codepoint] 
- * 
- * Now, suppose a callback wants to write the substitution character '?' to
- * the target. It calls ucnv_cbFromUWriteBytes() to write the ?. 
- * It should pass ZERO as the offset, because the offset as far as the 
- * callback is concerned is relative to the SOURCE pointer [which points 
- * before 'C'.]  If the callback goes into the args and consumes 'C' also,
- * it would call FromUWriteBytes with an offset of 1 (and advance the source
- * pointer).
- *
- */
-
-#ifndef UCNV_CB_H
-#define UCNV_CB_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_CONVERSION
-
-#include "unicode/ucnv.h"
-#include "unicode/ucnv_err.h"
-
-/**
- * ONLY used by FromU callback functions.
- * Writes out the specified byte output bytes to the target byte buffer or to converter internal buffers.
- *
- * @param args callback fromUnicode arguments
- * @param source source bytes to write
- * @param length length of bytes to write
- * @param offsetIndex the relative offset index from callback.
- * @param err error status. If <TT>U_BUFFER_OVERFLOW</TT> is returned, then U_BUFFER_OVERFLOW <STRONG>must</STRONG> 
- * be returned to the user, because it means that not all data could be written into the target buffer, and some is 
- * in the converter error buffer.
- * @see ucnv_cbFromUWriteSub
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args,
-                        const char* source,
-                        int32_t length,
-                        int32_t offsetIndex,
-                        UErrorCode * err);
-
-/**
- * ONLY used by FromU callback functions.  
- * This function will write out the correct substitution character sequence 
- * to the target.
- *
- * @param args callback fromUnicode arguments
- * @param offsetIndex the relative offset index from the current source pointer to be used
- * @param err error status. If <TT>U_BUFFER_OVERFLOW</TT> is returned, then U_BUFFER_OVERFLOW <STRONG>must</STRONG> 
- * be returned to the user, because it means that not all data could be written into the target buffer, and some is 
- * in the converter error buffer.
- * @see ucnv_cbFromUWriteBytes
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args,
-                      int32_t offsetIndex,
-                      UErrorCode * err);
-
-/**
- * ONLY used by fromU callback functions.  
- * This function will write out the error character(s) to the target UChar buffer.
- *
- * @param args callback fromUnicode arguments
- * @param source pointer to pointer to first UChar to write [on exit: 1 after last UChar processed]
- * @param sourceLimit pointer after last UChar to write
- * @param offsetIndex the relative offset index from callback which will be set
- * @param err error status <TT>U_BUFFER_OVERFLOW</TT>
- * @see ucnv_cbToUWriteSub
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args,
-                             const UChar** source,
-                             const UChar*  sourceLimit,
-                             int32_t offsetIndex,
-                             UErrorCode * err);
-
-/**
- * ONLY used by ToU callback functions.
- *  This function will write out the specified characters to the target 
- * UChar buffer.
- *
- * @param args callback toUnicode arguments
- * @param source source string to write
- * @param length the length of source string
- * @param offsetIndex the relative offset index which will be written.
- * @param err error status <TT>U_BUFFER_OVERFLOW</TT>
- * @see ucnv_cbToUWriteSub
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args,
-                                             const UChar* source,
-                                             int32_t length,
-                                             int32_t offsetIndex,
-                                             UErrorCode * err);
-
-/**
- * ONLY used by ToU  callback functions.  
- * This function will write out the Unicode substitution character (U+FFFD).
- *
- * @param args callback fromUnicode arguments
- * @param offsetIndex the relative offset index from callback.
- * @param err error status <TT>U_BUFFER_OVERFLOW</TT>
- * @see ucnv_cbToUWriteUChars
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args,
-                       int32_t offsetIndex,
-                       UErrorCode * err);
-#endif
-
-#endif
diff --git a/source/common/unicode/ucnv_err.h b/source/common/unicode/ucnv_err.h
deleted file mode 100644
index e092e95..0000000
--- a/source/common/unicode/ucnv_err.h
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1999-2009, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
- *
- *
- *   ucnv_err.h:
- */
-
-/**
- * \file
- * \brief C UConverter predefined error callbacks
- *
- *  <h2>Error Behaviour Functions</h2>
- *  Defines some error behaviour functions called by ucnv_{from,to}Unicode
- *  These are provided as part of ICU and many are stable, but they
- *  can also be considered only as an example of what can be done with
- *  callbacks.  You may of course write your own.
- *
- *  If you want to write your own, you may also find the functions from
- *  ucnv_cb.h useful when writing your own callbacks.
- *
- *  These functions, although public, should NEVER be called directly.
- *  They should be used as parameters to the ucnv_setFromUCallback
- *  and ucnv_setToUCallback functions, to set the behaviour of a converter
- *  when it encounters ILLEGAL/UNMAPPED/INVALID sequences.
- *
- *  usage example:  'STOP' doesn't need any context, but newContext
- *    could be set to something other than 'NULL' if needed. The available
- *    contexts in this header can modify the default behavior of the callback.
- *
- *  \code
- *  UErrorCode err = U_ZERO_ERROR;
- *  UConverter *myConverter = ucnv_open("ibm-949", &err);
- *  const void *oldContext;
- *  UConverterFromUCallback oldAction;
- *
- *
- *  if (U_SUCCESS(err))
- *  {
- *      ucnv_setFromUCallBack(myConverter,
- *                       UCNV_FROM_U_CALLBACK_STOP,
- *                       NULL,
- *                       &oldAction,
- *                       &oldContext,
- *                       &status);
- *  }
- *  \endcode
- *
- *  The code above tells "myConverter" to stop when it encounters an
- *  ILLEGAL/TRUNCATED/INVALID sequences when it is used to convert from
- *  Unicode -> Codepage. The behavior from Codepage to Unicode is not changed,
- *  and ucnv_setToUCallBack would need to be called in order to change
- *  that behavior too.
- *
- *  Here is an example with a context:
- *
- *  \code
- *  UErrorCode err = U_ZERO_ERROR;
- *  UConverter *myConverter = ucnv_open("ibm-949", &err);
- *  const void *oldContext;
- *  UConverterFromUCallback oldAction;
- *
- *
- *  if (U_SUCCESS(err))
- *  {
- *      ucnv_setToUCallBack(myConverter,
- *                       UCNV_TO_U_CALLBACK_SUBSTITUTE,
- *                       UCNV_SUB_STOP_ON_ILLEGAL,
- *                       &oldAction,
- *                       &oldContext,
- *                       &status);
- *  }
- *  \endcode
- *
- *  The code above tells "myConverter" to stop when it encounters an
- *  ILLEGAL/TRUNCATED/INVALID sequences when it is used to convert from
- *  Codepage -> Unicode. Any unmapped and legal characters will be
- *  substituted to be the default substitution character.
- */
-
-#ifndef UCNV_ERR_H
-#define UCNV_ERR_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_CONVERSION
-
-/** Forward declaring the UConverter structure. @stable ICU 2.0 */
-struct UConverter;
-
-/** @stable ICU 2.0 */
-typedef struct UConverter UConverter;
-
-/**
- * FROM_U, TO_U context options for sub callback
- * @stable ICU 2.0
- */
-#define UCNV_SUB_STOP_ON_ILLEGAL "i"
-
-/**
- * FROM_U, TO_U context options for skip callback
- * @stable ICU 2.0
- */
-#define UCNV_SKIP_STOP_ON_ILLEGAL "i"
-
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to ICU (%UXXXX) 
- * @stable ICU 2.0
- */
-#define UCNV_ESCAPE_ICU       NULL
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to JAVA (\\uXXXX)
- * @stable ICU 2.0
- */
-#define UCNV_ESCAPE_JAVA      "J"
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to C (\\uXXXX \\UXXXXXXXX)
- * TO_U_CALLBACK_ESCAPE option to escape the character value accoding to C (\\xXXXX)
- * @stable ICU 2.0
- */
-#define UCNV_ESCAPE_C         "C"
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Decimal escape \htmlonly(&amp;#DDDD;)\endhtmlonly
- * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Decimal escape \htmlonly(&amp;#DDDD;)\endhtmlonly
- * @stable ICU 2.0
- */
-#define UCNV_ESCAPE_XML_DEC   "D"
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Hex escape \htmlonly(&amp;#xXXXX;)\endhtmlonly
- * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Hex escape \htmlonly(&amp;#xXXXX;)\endhtmlonly
- * @stable ICU 2.0
- */
-#define UCNV_ESCAPE_XML_HEX   "X"
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to Unicode (U+XXXXX)
- * @stable ICU 2.0
- */
-#define UCNV_ESCAPE_UNICODE   "U"
-
-/**
- * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to CSS2 conventions (\\HH..H<space>, that is,
- * a backslash, 1..6 hex digits, and a space)
- * @stable ICU 4.0
- */
-#define UCNV_ESCAPE_CSS2   "S"
-
-/** 
- * The process condition code to be used with the callbacks.  
- * Codes which are greater than UCNV_IRREGULAR should be 
- * passed on to any chained callbacks.
- * @stable ICU 2.0
- */
-typedef enum {
-    UCNV_UNASSIGNED = 0,  /**< The code point is unassigned.
-                             The error code U_INVALID_CHAR_FOUND will be set. */
-    UCNV_ILLEGAL = 1,     /**< The code point is illegal. For example, 
-                             \\x81\\x2E is illegal in SJIS because \\x2E
-                             is not a valid trail byte for the \\x81 
-                             lead byte.
-                             Also, starting with Unicode 3.0.1, non-shortest byte sequences
-                             in UTF-8 (like \\xC1\\xA1 instead of \\x61 for U+0061)
-                             are also illegal, not just irregular.
-                             The error code U_ILLEGAL_CHAR_FOUND will be set. */
-    UCNV_IRREGULAR = 2,   /**< The codepoint is not a regular sequence in 
-                             the encoding. For example, \\xED\\xA0\\x80..\\xED\\xBF\\xBF
-                             are irregular UTF-8 byte sequences for single surrogate
-                             code points.
-                             The error code U_INVALID_CHAR_FOUND will be set. */
-    UCNV_RESET = 3,       /**< The callback is called with this reason when a
-                             'reset' has occured. Callback should reset all
-                             state. */
-    UCNV_CLOSE = 4,        /**< Called when the converter is closed. The
-                             callback should release any allocated memory.*/
-    UCNV_CLONE = 5         /**< Called when ucnv_safeClone() is called on the
-                              converter. the pointer available as the
-                              'context' is an alias to the original converters'
-                              context pointer. If the context must be owned
-                              by the new converter, the callback must clone 
-                              the data and call ucnv_setFromUCallback 
-                              (or setToUCallback) with the correct pointer.
-                              @stable ICU 2.2
-                           */
-} UConverterCallbackReason;
-
-
-/**
- * The structure for the fromUnicode callback function parameter.
- * @stable ICU 2.0
- */
-typedef struct {
-    uint16_t size;              /**< The size of this struct. @stable ICU 2.0 */
-    UBool flush;                /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0    */
-    UConverter *converter;      /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0  */
-    const UChar *source;        /**< Pointer to the source source buffer. @stable ICU 2.0    */
-    const UChar *sourceLimit;   /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0    */
-    char *target;               /**< Pointer to the target buffer. @stable ICU 2.0    */
-    const char *targetLimit;    /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0     */
-    int32_t *offsets;           /**< Pointer to the buffer that recieves the offsets. *offset = blah ; offset++;. @stable ICU 2.0  */
-} UConverterFromUnicodeArgs;
-
-
-/**
- * The structure for the toUnicode callback function parameter.
- * @stable ICU 2.0
- */
-typedef struct {
-    uint16_t size;              /**< The size of this struct   @stable ICU 2.0 */
-    UBool flush;                /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0   */
-    UConverter *converter;      /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */
-    const char *source;         /**< Pointer to the source source buffer. @stable ICU 2.0    */
-    const char *sourceLimit;    /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0    */
-    UChar *target;              /**< Pointer to the target buffer. @stable ICU 2.0    */
-    const UChar *targetLimit;   /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0     */
-    int32_t *offsets;           /**< Pointer to the buffer that recieves the offsets. *offset = blah ; offset++;. @stable ICU 2.0  */
-} UConverterToUnicodeArgs;
-
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This From Unicode callback STOPS at the ILLEGAL_SEQUENCE,
- * returning the error code back to the caller immediately.
- *
- * @param context Pointer to the callback's private data
- * @param fromUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
- * @param reason Defines the reason the callback was invoked
- * @param err This should always be set to a failure status prior to calling.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP (
-                  const void *context,
-                  UConverterFromUnicodeArgs *fromUArgs,
-                  const UChar* codeUnits,
-                  int32_t length,
-                  UChar32 codePoint,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This To Unicode callback STOPS at the ILLEGAL_SEQUENCE,
- * returning the error code back to the caller immediately.
- *
- * @param context Pointer to the callback's private data
- * @param toUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param reason Defines the reason the callback was invoked
- * @param err This should always be set to a failure status prior to calling.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP (
-                  const void *context,
-                  UConverterToUnicodeArgs *toUArgs,
-                  const char* codeUnits,
-                  int32_t length,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This From Unicode callback skips any ILLEGAL_SEQUENCE, or
- * skips only UNASSINGED_SEQUENCE depending on the context parameter
- * simply ignoring those characters. 
- *
- * @param context  The function currently recognizes the callback options:
- *                 UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
- *                      returning the error code back to the caller immediately.
- *                 NULL: Skips any ILLEGAL_SEQUENCE
- * @param fromUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
- * @param reason Defines the reason the callback was invoked
- * @param err Return value will be set to success if the callback was handled,
- *      otherwise this value will be set to a failure status.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP (
-                  const void *context,
-                  UConverterFromUnicodeArgs *fromUArgs,
-                  const UChar* codeUnits,
-                  int32_t length,
-                  UChar32 codePoint,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This From Unicode callback will Substitute the ILLEGAL SEQUENCE, or 
- * UNASSIGNED_SEQUENCE depending on context parameter, with the
- * current substitution string for the converter. This is the default
- * callback.
- *
- * @param context The function currently recognizes the callback options:
- *                 UCNV_SUB_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
- *                      returning the error code back to the caller immediately.
- *                 NULL: Substitutes any ILLEGAL_SEQUENCE
- * @param fromUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
- * @param reason Defines the reason the callback was invoked
- * @param err Return value will be set to success if the callback was handled,
- *      otherwise this value will be set to a failure status.
- * @see ucnv_setSubstChars
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
-                  const void *context,
-                  UConverterFromUnicodeArgs *fromUArgs,
-                  const UChar* codeUnits,
-                  int32_t length,
-                  UChar32 codePoint,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This From Unicode callback will Substitute the ILLEGAL SEQUENCE with the
- * hexadecimal representation of the illegal codepoints
- *
- * @param context The function currently recognizes the callback options:
- *        <ul>
- *        <li>UCNV_ESCAPE_ICU: Substitues the  ILLEGAL SEQUENCE with the hexadecimal 
- *          representation in the format  %UXXXX, e.g. "%uFFFE%u00AC%uC8FE"). 
- *          In the Event the converter doesn't support the characters {%,U}[A-F][0-9], 
- *          it will  substitute  the illegal sequence with the substitution characters.
- *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
- *          %UD84D%UDC56</li>
- *        <li>UCNV_ESCAPE_JAVA: Substitues the  ILLEGAL SEQUENCE with the hexadecimal 
- *          representation in the format  \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). 
- *          In the Event the converter doesn't support the characters {\,u}[A-F][0-9], 
- *          it will  substitute  the illegal sequence with the substitution characters.
- *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
- *          \\uD84D\\uDC56</li>
- *        <li>UCNV_ESCAPE_C: Substitues the  ILLEGAL SEQUENCE with the hexadecimal 
- *          representation in the format  \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). 
- *          In the Event the converter doesn't support the characters {\,u,U}[A-F][0-9], 
- *          it will  substitute  the illegal sequence with the substitution characters.
- *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
- *          \\U00023456</li>
- *        <li>UCNV_ESCAPE_XML_DEC: Substitues the  ILLEGAL SEQUENCE with the decimal 
- *          representation in the format \htmlonly&amp;#DDDDDDDD;, e.g. "&amp;#65534;&amp;#172;&amp;#51454;")\endhtmlonly. 
- *          In the Event the converter doesn't support the characters {&amp;,#}[0-9], 
- *          it will  substitute  the illegal sequence with the substitution characters.
- *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
- *          &amp;#144470; and Zero padding is ignored.</li>
- *        <li>UCNV_ESCAPE_XML_HEX:Substitues the  ILLEGAL SEQUENCE with the decimal 
- *          representation in the format \htmlonly&amp;#xXXXX; e.g. "&amp;#xFFFE;&amp;#x00AC;&amp;#xC8FE;")\endhtmlonly. 
- *          In the Event the converter doesn't support the characters {&,#,x}[0-9], 
- *          it will  substitute  the illegal sequence with the substitution characters.
- *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
- *          \htmlonly&amp;#x23456;\endhtmlonly</li>
- *        </ul>
- * @param fromUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
- * @param reason Defines the reason the callback was invoked
- * @param err Return value will be set to success if the callback was handled,
- *      otherwise this value will be set to a failure status.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE (
-                  const void *context,
-                  UConverterFromUnicodeArgs *fromUArgs,
-                  const UChar* codeUnits,
-                  int32_t length,
-                  UChar32 codePoint,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This To Unicode callback skips any ILLEGAL_SEQUENCE, or
- * skips only UNASSINGED_SEQUENCE depending on the context parameter
- * simply ignoring those characters. 
- *
- * @param context  The function currently recognizes the callback options:
- *                 UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
- *                      returning the error code back to the caller immediately.
- *                 NULL: Skips any ILLEGAL_SEQUENCE
- * @param toUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param reason Defines the reason the callback was invoked
- * @param err Return value will be set to success if the callback was handled,
- *      otherwise this value will be set to a failure status.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP (
-                  const void *context,
-                  UConverterToUnicodeArgs *toUArgs,
-                  const char* codeUnits,
-                  int32_t length,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This To Unicode callback will Substitute the ILLEGAL SEQUENCE,or 
- * UNASSIGNED_SEQUENCE depending on context parameter,  with the
- * Unicode substitution character, U+FFFD.
- *
- * @param context  The function currently recognizes the callback options:
- *                 UCNV_SUB_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
- *                      returning the error code back to the caller immediately.
- *                 NULL: Substitutes any ILLEGAL_SEQUENCE
- * @param toUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param reason Defines the reason the callback was invoked
- * @param err Return value will be set to success if the callback was handled,
- *      otherwise this value will be set to a failure status.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE (
-                  const void *context,
-                  UConverterToUnicodeArgs *toUArgs,
-                  const char* codeUnits,
-                  int32_t length,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-/**
- * DO NOT CALL THIS FUNCTION DIRECTLY!
- * This To Unicode callback will Substitute the ILLEGAL SEQUENCE with the
- * hexadecimal representation of the illegal bytes
- *  (in the format  %XNN, e.g. "%XFF%X0A%XC8%X03").
- *
- * @param context This function currently recognizes the callback options:
- *      UCNV_ESCAPE_ICU, UCNV_ESCAPE_JAVA, UCNV_ESCAPE_C, UCNV_ESCAPE_XML_DEC,
- *      UCNV_ESCAPE_XML_HEX and UCNV_ESCAPE_UNICODE.
- * @param toUArgs Information about the conversion in progress
- * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
- * @param length Size (in bytes) of the concerned codepage sequence
- * @param reason Defines the reason the callback was invoked
- * @param err Return value will be set to success if the callback was handled,
- *      otherwise this value will be set to a failure status.
- * @stable ICU 2.0
- */
-
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE (
-                  const void *context,
-                  UConverterToUnicodeArgs *toUArgs,
-                  const char* codeUnits,
-                  int32_t length,
-                  UConverterCallbackReason reason,
-                  UErrorCode * err);
-
-#endif
-
-#endif
-
-/*UCNV_ERR_H*/ 
diff --git a/source/common/unicode/ucnvsel.h b/source/common/unicode/ucnvsel.h
deleted file mode 100644
index 0830003..0000000
--- a/source/common/unicode/ucnvsel.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2008-2010, International Business Machines
-*   Corporation, Google and others.  All Rights Reserved.
-*
-*******************************************************************************
-*/
-/*
- * Author : eldawy@google.com (Mohamed Eldawy)
- * ucnvsel.h
- *
- * Purpose: To generate a list of encodings capable of handling
- * a given Unicode text
- *
- * Started 09-April-2008
- */
-
-#ifndef __ICU_UCNV_SEL_H__
-#define __ICU_UCNV_SEL_H__
-
-#include "unicode/uset.h"
-#include "unicode/utypes.h"
-#include "unicode/utf16.h"
-#include "unicode/uenum.h"
-#include "unicode/ucnv.h"
-#include "unicode/localpointer.h"
-
-/**
- * \file
- *
- * A converter selector is built with a set of encoding/charset names
- * and given an input string returns the set of names of the
- * corresponding converters which can convert the string.
- *
- * A converter selector can be serialized into a buffer and reopened
- * from the serialized form.
- */
-
-/**
- * @{
- * The selector data structure
- */
-struct UConverterSelector;
-typedef struct UConverterSelector UConverterSelector;
-/** @} */
-
-/**
- * Open a selector.
- * If converterListSize is 0, build for all available converters.
- * If excludedCodePoints is NULL, don't exclude any code points.
- *
- * @param converterList a pointer to encoding names needed to be involved. 
- *                      Can be NULL if converterListSize==0.
- *                      The list and the names will be cloned, and the caller
- *                      retains ownership of the original.
- * @param converterListSize number of encodings in above list.
- *                          If 0, builds a selector for all available converters.
- * @param excludedCodePoints a set of code points to be excluded from consideration.
- *                           That is, excluded code points in a string do not change
- *                           the selection result. (They might be handled by a callback.)
- *                           Use NULL to exclude nothing.
- * @param whichSet what converter set to use? Use this to determine whether
- *                 to consider only roundtrip mappings or also fallbacks.
- * @param status an in/out ICU UErrorCode
- * @return the new selector
- *
- * @stable ICU 4.2
- */
-U_STABLE UConverterSelector* U_EXPORT2
-ucnvsel_open(const char* const*  converterList, int32_t converterListSize,
-             const USet* excludedCodePoints,
-             const UConverterUnicodeSet whichSet, UErrorCode* status);
-
-/**
- * Closes a selector.
- * If any Enumerations were returned by ucnv_select*, they become invalid.
- * They can be closed before or after calling ucnv_closeSelector,
- * but should never be used after the selector is closed.
- *
- * @see ucnv_selectForString
- * @see ucnv_selectForUTF8
- *
- * @param sel selector to close
- *
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-ucnvsel_close(UConverterSelector *sel);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUConverterSelectorPointer
- * "Smart pointer" class, closes a UConverterSelector via ucnvsel_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterSelectorPointer, UConverterSelector, ucnvsel_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Open a selector from its serialized form.
- * The buffer must remain valid and unchanged for the lifetime of the selector.
- * This is much faster than creating a selector from scratch.
- * Using a serialized form from a different machine (endianness/charset) is supported.
- *
- * @param buffer pointer to the serialized form of a converter selector;
- *               must be 32-bit-aligned
- * @param length the capacity of this buffer (can be equal to or larger than
- *               the actual data length)
- * @param status an in/out ICU UErrorCode
- * @return the new selector
- *
- * @stable ICU 4.2
- */
-U_STABLE UConverterSelector* U_EXPORT2
-ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* status);
-
-/**
- * Serialize a selector into a linear buffer.
- * The serialized form is portable to different machines.
- *
- * @param sel selector to consider
- * @param buffer pointer to 32-bit-aligned memory to be filled with the
- *               serialized form of this converter selector
- * @param bufferCapacity the capacity of this buffer
- * @param status an in/out ICU UErrorCode
- * @return the required buffer capacity to hold serialize data (even if the call fails
- *         with a U_BUFFER_OVERFLOW_ERROR, it will return the required capacity)
- *
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-ucnvsel_serialize(const UConverterSelector* sel,
-                  void* buffer, int32_t bufferCapacity, UErrorCode* status);
-
-/**
- * Select converters that can map all characters in a UTF-16 string,
- * ignoring the excluded code points.
- *
- * @param sel a selector
- * @param s UTF-16 string
- * @param length length of the string, or -1 if NUL-terminated
- * @param status an in/out ICU UErrorCode
- * @return an enumeration containing encoding names.
- *         The returned encoding names and their order will be the same as
- *         supplied when building the selector.
- *
- * @stable ICU 4.2
- */
-U_STABLE UEnumeration * U_EXPORT2
-ucnvsel_selectForString(const UConverterSelector* sel,
-                        const UChar *s, int32_t length, UErrorCode *status);
-
-/**
- * Select converters that can map all characters in a UTF-8 string,
- * ignoring the excluded code points.
- *
- * @param sel a selector
- * @param s UTF-8 string
- * @param length length of the string, or -1 if NUL-terminated
- * @param status an in/out ICU UErrorCode
- * @return an enumeration containing encoding names.
- *         The returned encoding names and their order will be the same as
- *         supplied when building the selector.
- *
- * @stable ICU 4.2
- */
-U_STABLE UEnumeration * U_EXPORT2
-ucnvsel_selectForUTF8(const UConverterSelector* sel,
-                      const char *s, int32_t length, UErrorCode *status);
-
-#endif  /* __ICU_UCNV_SEL_H__ */
diff --git a/source/common/unicode/uconfig.h b/source/common/unicode/uconfig.h
deleted file mode 100644
index 6521eed..0000000
--- a/source/common/unicode/uconfig.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*  
-**********************************************************************
-*   Copyright (C) 2002-2009, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   file name:  uconfig.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002sep19
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __UCONFIG_H__
-#define __UCONFIG_H__
-
-
-/*!
- * \file
- * \brief Switches for excluding parts of ICU library code modules.
- *
- * Allows to build partial, smaller libraries for special purposes.
- * By default, all modules are built.
- * The switches are fairly coarse, controlling large modules.
- * Basic services cannot be turned off.
- *
- * Building with any of these options does not guarantee that the
- * ICU build process will completely work. It is recommended that
- * the ICU libraries and data be built using the normal build.
- * At that time you should remove the data used by those services.
- * After building the ICU data library, you should rebuild the ICU
- * libraries with these switches customized to your needs.
- *
- * @stable ICU 2.4
- */
-
-/**
- * If this switch is defined, ICU will attempt to load a header file named "uconfig_local.h"
- * prior to determining default settings for uconfig variables.
- * 
- * @internal ICU 4.0
- * 
- */
-#if defined(UCONFIG_USE_LOCAL)
-#include "uconfig_local.h"
-#endif
-
-/**
- * \def UCONFIG_ONLY_COLLATION
- * This switch turns off modules that are not needed for collation.
- *
- * It does not turn off legacy conversion because that is necessary
- * for ICU to work on EBCDIC platforms (for the default converter).
- * If you want "only collation" and do not build for EBCDIC,
- * then you can define UCONFIG_NO_LEGACY_CONVERSION 1 as well.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_ONLY_COLLATION
-#   define UCONFIG_ONLY_COLLATION 0
-#endif
-
-#if UCONFIG_ONLY_COLLATION
-    /* common library */
-#   define UCONFIG_NO_BREAK_ITERATION 1
-#   define UCONFIG_NO_IDNA 1
-
-    /* i18n library */
-#   if UCONFIG_NO_COLLATION
-#       error Contradictory collation switches in uconfig.h.
-#   endif
-#   define UCONFIG_NO_FORMATTING 1
-#   define UCONFIG_NO_TRANSLITERATION 1
-#   define UCONFIG_NO_REGULAR_EXPRESSIONS 1
-#endif
-
-/* common library switches -------------------------------------------------- */
-
-/**
- * \def UCONFIG_NO_FILE_IO
- * This switch turns off all file access in the common library
- * where file access is only used for data loading.
- * ICU data must then be provided in the form of a data DLL (or with an
- * equivalent way to link to the data residing in an executable,
- * as in building a combined library with both the common library's code and
- * the data), or via udata_setCommonData().
- * Application data must be provided via udata_setAppData() or by using
- * "open" functions that take pointers to data, for example ucol_openBinary().
- *
- * File access is not used at all in the i18n library.
- *
- * File access cannot be turned off for the icuio library or for the ICU
- * test suites and ICU tools.
- *
- * @stable ICU 3.6
- */
-#ifndef UCONFIG_NO_FILE_IO
-#   define UCONFIG_NO_FILE_IO 0
-#endif
-
-/**
- * \def UCONFIG_NO_CONVERSION
- * ICU will not completely build with this switch turned on.
- * This switch turns off all converters.
- *
- * You may want to use this together with U_CHARSET_IS_UTF8 defined to 1
- * in utypes.h if char* strings in your environment are always in UTF-8.
- *
- * @stable ICU 3.2
- * @see U_CHARSET_IS_UTF8
- */
-#ifndef UCONFIG_NO_CONVERSION
-#   define UCONFIG_NO_CONVERSION 0
-#endif
-
-#if UCONFIG_NO_CONVERSION
-#   define UCONFIG_NO_LEGACY_CONVERSION 1
-#endif
-
-/**
- * \def UCONFIG_NO_LEGACY_CONVERSION
- * This switch turns off all converters except for
- * - Unicode charsets (UTF-7/8/16/32, CESU-8, SCSU, BOCU-1)
- * - US-ASCII
- * - ISO-8859-1
- *
- * Turning off legacy conversion is not possible on EBCDIC platforms
- * because they need ibm-37 or ibm-1047 default converters.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_NO_LEGACY_CONVERSION
-#   define UCONFIG_NO_LEGACY_CONVERSION 0
-#endif
-
-/**
- * \def UCONFIG_NO_NORMALIZATION
- * This switch turns off normalization.
- * It implies turning off several other services as well, for example
- * collation and IDNA.
- *
- * @stable ICU 2.6
- */
-#ifndef UCONFIG_NO_NORMALIZATION
-#   define UCONFIG_NO_NORMALIZATION 0
-#elif UCONFIG_NO_NORMALIZATION
-    /* common library */
-#   define UCONFIG_NO_IDNA 1
-
-    /* i18n library */
-#   if UCONFIG_ONLY_COLLATION
-#       error Contradictory collation switches in uconfig.h.
-#   endif
-#   define UCONFIG_NO_COLLATION 1
-#   define UCONFIG_NO_TRANSLITERATION 1
-#endif
-
-/**
- * \def UCONFIG_NO_BREAK_ITERATION
- * This switch turns off break iteration.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_NO_BREAK_ITERATION
-#   define UCONFIG_NO_BREAK_ITERATION 0
-#endif
-
-/**
- * \def UCONFIG_NO_IDNA
- * This switch turns off IDNA.
- *
- * @stable ICU 2.6
- */
-#ifndef UCONFIG_NO_IDNA
-#   define UCONFIG_NO_IDNA 0
-#endif
-
-/* i18n library switches ---------------------------------------------------- */
-
-/**
- * \def UCONFIG_NO_COLLATION
- * This switch turns off collation and collation-based string search.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_NO_COLLATION
-#   define UCONFIG_NO_COLLATION 0
-#endif
-
-/**
- * \def UCONFIG_NO_FORMATTING
- * This switch turns off formatting and calendar/timezone services.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_NO_FORMATTING
-#   define UCONFIG_NO_FORMATTING 0
-#endif
-
-/**
- * \def UCONFIG_NO_TRANSLITERATION
- * This switch turns off transliteration.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_NO_TRANSLITERATION
-#   define UCONFIG_NO_TRANSLITERATION 0
-#endif
-
-/**
- * \def UCONFIG_NO_REGULAR_EXPRESSIONS
- * This switch turns off regular expressions.
- *
- * @stable ICU 2.4
- */
-#ifndef UCONFIG_NO_REGULAR_EXPRESSIONS
-#   define UCONFIG_NO_REGULAR_EXPRESSIONS 0
-#endif
-
-/**
- * \def UCONFIG_NO_SERVICE
- * This switch turns off service registration.
- *
- * @stable ICU 3.2
- */
-#ifndef UCONFIG_NO_SERVICE
-#   define UCONFIG_NO_SERVICE 0
-#endif
-
-#endif
diff --git a/source/common/unicode/udata.h b/source/common/unicode/udata.h
deleted file mode 100644
index 47edbd8..0000000
--- a/source/common/unicode/udata.h
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  udata.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999oct25
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __UDATA_H__
-#define __UDATA_H__
-
-#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
-
-U_CDECL_BEGIN
-
-/**
- * \file
- * \brief C API: Data loading interface
- *
- * <h2>Information about data loading interface</h2>
- *
- * This API is used to find and efficiently load data for ICU and applications
- * using ICU. It provides an abstract interface that specifies a data type and
- * name to find and load the data. Normally this API is used by other ICU APIs
- * to load required data out of the ICU data library, but it can be used to
- * load data out of other places.
- *
- * See the User Guide Data Management chapter.
- */
- 
-#ifndef U_HIDE_INTERNAL_API
-/**
- * Character used to separate package names from tree names 
- * @internal ICU 3.0
- */
-#define U_TREE_SEPARATOR '-'
-
-/**
- * String used to separate package names from tree names 
- * @internal ICU 3.0
- */
-#define U_TREE_SEPARATOR_STRING "-"
-
-/**
- * Character used to separate parts of entry names
- * @internal ICU 3.0
- */
-#define U_TREE_ENTRY_SEP_CHAR '/'
-
-/**
- * String used to separate parts of entry names
- * @internal ICU 3.0
- */
-#define U_TREE_ENTRY_SEP_STRING "/"
-
-/**
- * Alias for standard ICU data 
- * @internal ICU 3.0
- */
-#define U_ICUDATA_ALIAS "ICUDATA"
-
-#endif /* U_HIDE_INTERNAL_API */
-
-/**
- * UDataInfo contains the properties about the requested data.
- * This is meta data.
- *
- * <p>This structure may grow in the future, indicated by the
- * <code>size</code> field.</p>
- *
- * <p>The platform data property fields help determine if a data
- * file can be efficiently used on a given machine.
- * The particular fields are of importance only if the data
- * is affected by the properties - if there is integer data
- * with word sizes > 1 byte, char* text, or UChar* text.</p>
- *
- * <p>The implementation for the <code>udata_open[Choice]()</code>
- * functions may reject data based on the value in <code>isBigEndian</code>.
- * No other field is used by the <code>udata</code> API implementation.</p>
- *
- * <p>The <code>dataFormat</code> may be used to identify
- * the kind of data, e.g. a converter table.</p>
- *
- * <p>The <code>formatVersion</code> field should be used to
- * make sure that the format can be interpreted.
- * I may be a good idea to check only for the one or two highest
- * of the version elements to allow the data memory to
- * get more or somewhat rearranged contents, for as long
- * as the using code can still interpret the older contents.</p>
- *
- * <p>The <code>dataVersion</code> field is intended to be a
- * common place to store the source version of the data;
- * for data from the Unicode character database, this could
- * reflect the Unicode version.</p>
- * @stable ICU 2.0
- */
-typedef struct {
-    /** sizeof(UDataInfo)
-     *  @stable ICU 2.0 */
-    uint16_t size;
-
-    /** unused, set to 0 
-     *  @stable ICU 2.0*/
-    uint16_t reservedWord;
-
-    /* platform data properties */
-    /** 0 for little-endian machine, 1 for big-endian
-     *  @stable ICU 2.0 */
-    uint8_t isBigEndian;
-
-    /** see U_CHARSET_FAMILY values in utypes.h 
-     *  @stable ICU 2.0*/
-    uint8_t charsetFamily;
-
-    /** sizeof(UChar), one of { 1, 2, 4 } 
-     *  @stable ICU 2.0*/
-    uint8_t sizeofUChar;
-
-    /** unused, set to 0 
-     *  @stable ICU 2.0*/
-    uint8_t reservedByte;
-
-    /** data format identifier 
-     *  @stable ICU 2.0*/
-    uint8_t dataFormat[4];
-
-    /** versions: [0] major [1] minor [2] milli [3] micro 
-     *  @stable ICU 2.0*/
-    uint8_t formatVersion[4];
-
-    /** versions: [0] major [1] minor [2] milli [3] micro 
-     *  @stable ICU 2.0*/
-    uint8_t dataVersion[4];
-} UDataInfo;
-
-/* API for reading data -----------------------------------------------------*/
-
-/**
- * Forward declaration of the data memory type.
- * @stable ICU 2.0
- */
-typedef struct UDataMemory UDataMemory;
-
-/**
- * Callback function for udata_openChoice().
- * @param context parameter passed into <code>udata_openChoice()</code>.
- * @param type The type of the data as passed into <code>udata_openChoice()</code>.
- *             It may be <code>NULL</code>.
- * @param name The name of the data as passed into <code>udata_openChoice()</code>.
- * @param pInfo A pointer to the <code>UDataInfo</code> structure
- *              of data that has been loaded and will be returned
- *              by <code>udata_openChoice()</code> if this function
- *              returns <code>TRUE</code>.
- * @return TRUE if the current data memory is acceptable
- * @stable ICU 2.0
- */
-typedef UBool U_CALLCONV
-UDataMemoryIsAcceptable(void *context,
-                        const char *type, const char *name,
-                        const UDataInfo *pInfo);
-
-
-/**
- * Convenience function.
- * This function works the same as <code>udata_openChoice</code>
- * except that any data that matches the type and name
- * is assumed to be acceptable.
- * @param path Specifies an absolute path and/or a basename for the
- *             finding of the data in the file system.
- *             <code>NULL</code> for ICU data.
- * @param type A string that specifies the type of data to be loaded.
- *             For example, resource bundles are loaded with type "res",
- *             conversion tables with type "cnv".
- *             This may be <code>NULL</code> or empty.
- * @param name A string that specifies the name of the data.
- * @param pErrorCode An ICU UErrorCode parameter. It must not be <code>NULL</code>.
- * @return A pointer (handle) to a data memory object, or <code>NULL</code>
- *         if an error occurs. Call <code>udata_getMemory()</code>
- *         to get a pointer to the actual data.
- *
- * @see udata_openChoice
- * @stable ICU 2.0
- */
-U_STABLE UDataMemory * U_EXPORT2
-udata_open(const char *path, const char *type, const char *name,
-           UErrorCode *pErrorCode);
-
-/**
- * Data loading function.
- * This function is used to find and load efficiently data for
- * ICU and applications using ICU.
- * It provides an abstract interface that allows to specify a data
- * type and name to find and load the data.
- *
- * <p>The implementation depends on platform properties and user preferences
- * and may involve loading shared libraries (DLLs), mapping
- * files into memory, or fopen()/fread() files.
- * It may also involve using static memory or database queries etc.
- * Several or all data items may be combined into one entity
- * (DLL, memory-mappable file).</p>
- *
- * <p>The data is always preceded by a header that includes
- * a <code>UDataInfo</code> structure.
- * The caller's <code>isAcceptable()</code> function is called to make
- * sure that the data is useful. It may be called several times if it
- * rejects the data and there is more than one location with data
- * matching the type and name.</p>
- *
- * <p>If <code>path==NULL</code>, then ICU data is loaded.
- * Otherwise, it is separated into a basename and a basename-less directory string.
- * The basename is used as the data package name, and the directory is
- * logically prepended to the ICU data directory string.</p>
- *
- * <p>For details about ICU data loading see the User Guide
- * Data Management chapter. (http://icu-project.org/userguide/icudata.html)</p>
- *
- * @param path Specifies an absolute path and/or a basename for the
- *             finding of the data in the file system.
- *             <code>NULL</code> for ICU data.
- * @param type A string that specifies the type of data to be loaded.
- *             For example, resource bundles are loaded with type "res",
- *             conversion tables with type "cnv".
- *             This may be <code>NULL</code> or empty.
- * @param name A string that specifies the name of the data.
- * @param isAcceptable This function is called to verify that loaded data
- *                     is useful for the client code. If it returns FALSE
- *                     for all data items, then <code>udata_openChoice()</code>
- *                     will return with an error.
- * @param context Arbitrary parameter to be passed into isAcceptable.
- * @param pErrorCode An ICU UErrorCode parameter. It must not be <code>NULL</code>.
- * @return A pointer (handle) to a data memory object, or <code>NULL</code>
- *         if an error occurs. Call <code>udata_getMemory()</code>
- *         to get a pointer to the actual data.
- * @stable ICU 2.0
- */
-U_STABLE UDataMemory * U_EXPORT2
-udata_openChoice(const char *path, const char *type, const char *name,
-                 UDataMemoryIsAcceptable *isAcceptable, void *context,
-                 UErrorCode *pErrorCode);
-
-/**
- * Close the data memory.
- * This function must be called to allow the system to
- * release resources associated with this data memory.
- * @param pData The pointer to data memory object
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-udata_close(UDataMemory *pData);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUDataMemoryPointer
- * "Smart pointer" class, closes a UDataMemory via udata_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUDataMemoryPointer, UDataMemory, udata_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Get the pointer to the actual data inside the data memory.
- * The data is read-only.
- * @param pData The pointer to data memory object
- * @stable ICU 2.0
- */
-U_STABLE const void * U_EXPORT2
-udata_getMemory(UDataMemory *pData);
-
-/**
- * Get the information from the data memory header.
- * This allows to get access to the header containing
- * platform data properties etc. which is not part of
- * the data itself and can therefore not be accessed
- * via the pointer that <code>udata_getMemory()</code> returns.
- *
- * @param pData pointer to the data memory object
- * @param pInfo pointer to a UDataInfo object;
- *              its <code>size</code> field must be set correctly,
- *              typically to <code>sizeof(UDataInfo)</code>.
- *
- * <code>*pInfo</code> will be filled with the UDataInfo structure
- * in the data memory object. If this structure is smaller than
- * <code>pInfo->size</code>, then the <code>size</code> will be
- * adjusted and only part of the structure will be filled.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-udata_getInfo(UDataMemory *pData, UDataInfo *pInfo);
-
-/**
- * This function bypasses the normal ICU data loading process and
- * allows you to force ICU's system data to come out of a user-specified
- * area in memory.
- *
- * The format of this data is that of the icu common data file, as is
- * generated by the pkgdata tool with mode=common or mode=dll.
- * You can read in a whole common mode file and pass the address to the start of the
- * data, or (with the appropriate link options) pass in the pointer to
- * the data that has been loaded from a dll by the operating system,
- * as shown in this code:
- *
- *       extern const char U_IMPORT U_ICUDATA_ENTRY_POINT [];
- *        // U_ICUDATA_ENTRY_POINT is same as entry point specified to pkgdata tool
- *       UErrorCode  status = U_ZERO_ERROR;
- *
- *       udata_setCommonData(&U_ICUDATA_ENTRY_POINT, &status);
- *
- * It is important that the declaration be as above. The entry point
- * must not be declared as an extern void*.
- *
- * Starting with ICU 4.4, it is possible to set several data packages,
- * one per call to this function.
- * udata_open() will look for data in the multiple data packages in the order
- * in which they were set.
- * The position of the linked-in or default-name ICU .data package in the
- * search list depends on when the first data item is loaded that is not contained
- * in the already explicitly set packages.
- * If data was loaded implicitly before the first call to this function
- * (for example, via opening a converter, constructing a UnicodeString
- * from default-codepage data, using formatting or collation APIs, etc.),
- * then the default data will be first in the list.
- *
- * This function has no effect on application (non ICU) data.  See udata_setAppData()
- * for similar functionality for application data.
- *
- * @param data pointer to ICU common data
- * @param err outgoing error status <code>U_USING_DEFAULT_WARNING, U_UNSUPPORTED_ERROR</code>
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-udata_setCommonData(const void *data, UErrorCode *err);
-
-
-/**
- * This function bypasses the normal ICU data loading process for application-specific
- * data and allows you to force the it to come out of a user-specified
- * pointer.
- *
- * The format of this data is that of the icu common data file, like 'icudt26l.dat'
- * or the corresponding shared library (DLL) file.
- * The application must read in or otherwise construct an image of the data and then
- * pass the address of it to this function.
- *
- *
- * Warning:  setAppData will set a U_USING_DEFAULT_WARNING code if
- *           data with the specifed path that has already been opened, or
- *           if setAppData with the same path has already been called.
- *           Any such calls to setAppData will have no effect.
- *
- *
- * @param packageName the package name by which the application will refer
- *             to (open) this data
- * @param data pointer to the data
- * @param err outgoing error status <code>U_USING_DEFAULT_WARNING, U_UNSUPPORTED_ERROR</code>
- * @see udata_setCommonData
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-udata_setAppData(const char *packageName, const void *data, UErrorCode *err);
-
-/**
- * Possible settings for udata_setFileAccess()
- * @see udata_setFileAccess
- * @stable ICU 3.4
- */
-typedef enum UDataFileAccess {
-    /** ICU looks for data in single files first, then in packages. (default) */
-    UDATA_FILES_FIRST,
-    /** ICU only loads data from packages, not from single files. */
-    UDATA_ONLY_PACKAGES,
-    /** ICU loads data from packages first, and only from single files
-        if the data cannot be found in a package. */
-    UDATA_PACKAGES_FIRST,
-    /** ICU does not access the file system for data loading. */
-    UDATA_NO_FILES,
-    /** An alias for the default access mode. */
-    UDATA_DEFAULT_ACCESS = UDATA_FILES_FIRST,
-    UDATA_FILE_ACCESS_COUNT
-} UDataFileAccess;
-
-/**
- * This function may be called to control how ICU loads data. It must be called
- * before any ICU data is loaded, including application data loaded with 
- * ures/ResourceBundle or udata APIs. This function is not multithread safe.  
- * The results of calling it while other threads are loading data are undefined.
- * @param access The type of file access to be used
- * @param status Error code.
- * @see UDataFileAccess
- * @stable ICU 3.4 
- */
-U_STABLE void U_EXPORT2
-udata_setFileAccess(UDataFileAccess access, UErrorCode *status);
-
-U_CDECL_END
-
-#endif
diff --git a/source/common/unicode/udeprctd.h b/source/common/unicode/udeprctd.h
deleted file mode 100644
index 6e435cc..0000000
--- a/source/common/unicode/udeprctd.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  udeprctd.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: genheaders.pl, a perl script written by Ram Viswanadha
-*
-*  Contains data for commenting out APIs.
-*  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 UDEPRCTD_H
-#define UDEPRCTD_H
-
-#ifdef U_HIDE_DEPRECATED_API
-
-#    if U_DISABLE_RENAMING
-#        define ucol_getContractions ucol_getContractions_DEPRECATED_API_DO_NOT_USE
-#        define ucol_getLocale ucol_getLocale_DEPRECATED_API_DO_NOT_USE
-#        define ures_countArrayItems ures_countArrayItems_DEPRECATED_API_DO_NOT_USE
-#        define ures_getLocale ures_getLocale_DEPRECATED_API_DO_NOT_USE
-#        define ures_getVersionNumber ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE
-#        define utrans_getAvailableID utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE
-#        define utrans_getID utrans_getID_DEPRECATED_API_DO_NOT_USE
-#        define utrans_open utrans_open_DEPRECATED_API_DO_NOT_USE
-#        define utrans_unregister utrans_unregister_DEPRECATED_API_DO_NOT_USE
-#    else
-#        define ucol_getContractions_4_6 ucol_getContractions_DEPRECATED_API_DO_NOT_USE
-#        define ucol_getLocale_4_6 ucol_getLocale_DEPRECATED_API_DO_NOT_USE
-#        define ures_countArrayItems_4_6 ures_countArrayItems_DEPRECATED_API_DO_NOT_USE
-#        define ures_getLocale_4_6 ures_getLocale_DEPRECATED_API_DO_NOT_USE
-#        define ures_getVersionNumber_4_6 ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE
-#        define utrans_getAvailableID_4_6 utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE
-#        define utrans_getID_4_6 utrans_getID_DEPRECATED_API_DO_NOT_USE
-#        define utrans_open_4_6 utrans_open_DEPRECATED_API_DO_NOT_USE
-#        define utrans_unregister_4_6 utrans_unregister_DEPRECATED_API_DO_NOT_USE
-#    endif /* U_DISABLE_RENAMING */
-
-#endif /* U_HIDE_DEPRECATED_API */
-#endif /* UDEPRCTD_H */
-
diff --git a/source/common/unicode/udraft.h b/source/common/unicode/udraft.h
deleted file mode 100644
index c825821..0000000
--- a/source/common/unicode/udraft.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  udraft.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: genheaders.pl, a perl script written by Ram Viswanadha
-*
-*  Contains data for commenting out APIs.
-*  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 UDRAFT_H
-#define UDRAFT_H
-
-#ifdef U_HIDE_DRAFT_API
-
-#    if U_DISABLE_RENAMING
-#        define ubidi_getBaseDirection ubidi_getBaseDirection_DRAFT_API_DO_NOT_USE
-#        define uidna_close uidna_close_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToASCII uidna_labelToASCII_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToASCII_UTF8 uidna_labelToASCII_UTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToUnicode uidna_labelToUnicode_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToUnicodeUTF8 uidna_labelToUnicodeUTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToASCII uidna_nameToASCII_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToASCII_UTF8 uidna_nameToASCII_UTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToUnicode uidna_nameToUnicode_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToUnicodeUTF8 uidna_nameToUnicodeUTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_openUTS46 uidna_openUTS46_DRAFT_API_DO_NOT_USE
-#        define uloc_forLanguageTag uloc_forLanguageTag_DRAFT_API_DO_NOT_USE
-#        define uloc_toLanguageTag uloc_toLanguageTag_DRAFT_API_DO_NOT_USE
-#        define unorm2_getDecomposition unorm2_getDecomposition_DRAFT_API_DO_NOT_USE
-#        define uregex_end64 uregex_end64_DRAFT_API_DO_NOT_USE
-#        define uregex_find64 uregex_find64_DRAFT_API_DO_NOT_USE
-#        define uregex_getFindProgressCallback uregex_getFindProgressCallback_DRAFT_API_DO_NOT_USE
-#        define uregex_lookingAt64 uregex_lookingAt64_DRAFT_API_DO_NOT_USE
-#        define uregex_matches64 uregex_matches64_DRAFT_API_DO_NOT_USE
-#        define uregex_patternUText uregex_patternUText_DRAFT_API_DO_NOT_USE
-#        define uregex_regionEnd64 uregex_regionEnd64_DRAFT_API_DO_NOT_USE
-#        define uregex_regionStart64 uregex_regionStart64_DRAFT_API_DO_NOT_USE
-#        define uregex_reset64 uregex_reset64_DRAFT_API_DO_NOT_USE
-#        define uregex_setFindProgressCallback uregex_setFindProgressCallback_DRAFT_API_DO_NOT_USE
-#        define uregex_setRegion64 uregex_setRegion64_DRAFT_API_DO_NOT_USE
-#        define uregex_setRegionAndStart uregex_setRegionAndStart_DRAFT_API_DO_NOT_USE
-#        define uregex_start64 uregex_start64_DRAFT_API_DO_NOT_USE
-#        define uscript_getScriptExtensions uscript_getScriptExtensions_DRAFT_API_DO_NOT_USE
-#        define uscript_hasScript uscript_hasScript_DRAFT_API_DO_NOT_USE
-#    else
-#        define ubidi_getBaseDirection_4_6 ubidi_getBaseDirection_DRAFT_API_DO_NOT_USE
-#        define uidna_close_4_6 uidna_close_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToASCII_4_6 uidna_labelToASCII_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToASCII_UTF8_4_6 uidna_labelToASCII_UTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToUnicodeUTF8_4_6 uidna_labelToUnicodeUTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_labelToUnicode_4_6 uidna_labelToUnicode_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToASCII_4_6 uidna_nameToASCII_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToASCII_UTF8_4_6 uidna_nameToASCII_UTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToUnicodeUTF8_4_6 uidna_nameToUnicodeUTF8_DRAFT_API_DO_NOT_USE
-#        define uidna_nameToUnicode_4_6 uidna_nameToUnicode_DRAFT_API_DO_NOT_USE
-#        define uidna_openUTS46_4_6 uidna_openUTS46_DRAFT_API_DO_NOT_USE
-#        define uloc_forLanguageTag_4_6 uloc_forLanguageTag_DRAFT_API_DO_NOT_USE
-#        define uloc_toLanguageTag_4_6 uloc_toLanguageTag_DRAFT_API_DO_NOT_USE
-#        define unorm2_getDecomposition_4_6 unorm2_getDecomposition_DRAFT_API_DO_NOT_USE
-#        define uregex_end64_4_6 uregex_end64_DRAFT_API_DO_NOT_USE
-#        define uregex_find64_4_6 uregex_find64_DRAFT_API_DO_NOT_USE
-#        define uregex_getFindProgressCallback_4_6 uregex_getFindProgressCallback_DRAFT_API_DO_NOT_USE
-#        define uregex_lookingAt64_4_6 uregex_lookingAt64_DRAFT_API_DO_NOT_USE
-#        define uregex_matches64_4_6 uregex_matches64_DRAFT_API_DO_NOT_USE
-#        define uregex_patternUText_4_6 uregex_patternUText_DRAFT_API_DO_NOT_USE
-#        define uregex_regionEnd64_4_6 uregex_regionEnd64_DRAFT_API_DO_NOT_USE
-#        define uregex_regionStart64_4_6 uregex_regionStart64_DRAFT_API_DO_NOT_USE
-#        define uregex_reset64_4_6 uregex_reset64_DRAFT_API_DO_NOT_USE
-#        define uregex_setFindProgressCallback_4_6 uregex_setFindProgressCallback_DRAFT_API_DO_NOT_USE
-#        define uregex_setRegion64_4_6 uregex_setRegion64_DRAFT_API_DO_NOT_USE
-#        define uregex_setRegionAndStart_4_6 uregex_setRegionAndStart_DRAFT_API_DO_NOT_USE
-#        define uregex_start64_4_6 uregex_start64_DRAFT_API_DO_NOT_USE
-#        define uscript_getScriptExtensions_4_6 uscript_getScriptExtensions_DRAFT_API_DO_NOT_USE
-#        define uscript_hasScript_4_6 uscript_hasScript_DRAFT_API_DO_NOT_USE
-#    endif /* U_DISABLE_RENAMING */
-
-#endif /* U_HIDE_DRAFT_API */
-#endif /* UDRAFT_H */
-
diff --git a/source/common/unicode/uenum.h b/source/common/unicode/uenum.h
deleted file mode 100644
index 0e7d90c..0000000
--- a/source/common/unicode/uenum.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  uenum.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:2
-*
-*   created on: 2002jul08
-*   created by: Vladimir Weinstein
-*/
-
-#ifndef __UENUM_H
-#define __UENUM_H
-
-#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
-
-#if U_SHOW_CPLUSPLUS_API
-#include "unicode/strenum.h"
-#endif
-
-/**
- * \file
- * \brief C API: String Enumeration 
- */
- 
-/**
- * An enumeration object.
- * For usage in C programs.
- * @stable ICU 2.2
- */
-struct UEnumeration;
-/** structure representing an enumeration object instance @stable ICU 2.2 */
-typedef struct UEnumeration UEnumeration;
-
-/**
- * Disposes of resources in use by the iterator.  If en is NULL,
- * does nothing.  After this call, any char* or UChar* pointer
- * returned by uenum_unext() or uenum_next() is invalid.
- * @param en UEnumeration structure pointer
- * @stable ICU 2.2
- */
-U_STABLE void U_EXPORT2
-uenum_close(UEnumeration* en);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUEnumerationPointer
- * "Smart pointer" class, closes a UEnumeration via uenum_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUEnumerationPointer, UEnumeration, uenum_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Returns the number of elements that the iterator traverses.  If
- * the iterator is out-of-sync with its service, status is set to
- * U_ENUM_OUT_OF_SYNC_ERROR.
- * This is a convenience function. It can end up being very
- * expensive as all the items might have to be pre-fetched (depending
- * on the type of data being traversed). Use with caution and only 
- * when necessary.
- * @param en UEnumeration structure pointer
- * @param status error code, can be U_ENUM_OUT_OF_SYNC_ERROR if the
- *               iterator is out of sync.
- * @return number of elements in the iterator
- * @stable ICU 2.2
- */
-U_STABLE int32_t U_EXPORT2
-uenum_count(UEnumeration* en, UErrorCode* status);
-
-/**
- * Returns the next element in the iterator's list.  If there are
- * no more elements, returns NULL.  If the iterator is out-of-sync
- * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and
- * NULL is returned.  If the native service string is a char* string,
- * it is converted to UChar* with the invariant converter.
- * The result is terminated by (UChar)0.
- * @param en the iterator object
- * @param resultLength pointer to receive the length of the result
- *                     (not including the terminating \\0).
- *                     If the pointer is NULL it is ignored.
- * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
- *               the iterator is out of sync with its service.
- * @return a pointer to the string.  The string will be
- *         zero-terminated.  The return pointer is owned by this iterator
- *         and must not be deleted by the caller.  The pointer is valid
- *         until the next call to any uenum_... method, including
- *         uenum_next() or uenum_unext().  When all strings have been
- *         traversed, returns NULL.
- * @stable ICU 2.2
- */
-U_STABLE const UChar* U_EXPORT2
-uenum_unext(UEnumeration* en,
-            int32_t* resultLength,
-            UErrorCode* status);
-
-/**
- * Returns the next element in the iterator's list.  If there are
- * no more elements, returns NULL.  If the iterator is out-of-sync
- * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and
- * NULL is returned.  If the native service string is a UChar*
- * string, it is converted to char* with the invariant converter.
- * The result is terminated by (char)0.  If the conversion fails
- * (because a character cannot be converted) then status is set to
- * U_INVARIANT_CONVERSION_ERROR and the return value is undefined
- * (but non-NULL).
- * @param en the iterator object
- * @param resultLength pointer to receive the length of the result
- *                     (not including the terminating \\0).
- *                     If the pointer is NULL it is ignored.
- * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
- *               the iterator is out of sync with its service.  Set to
- *               U_INVARIANT_CONVERSION_ERROR if the underlying native string is
- *               UChar* and conversion to char* with the invariant converter
- *               fails. This error pertains only to current string, so iteration
- *               might be able to continue successfully.
- * @return a pointer to the string.  The string will be
- *         zero-terminated.  The return pointer is owned by this iterator
- *         and must not be deleted by the caller.  The pointer is valid
- *         until the next call to any uenum_... method, including
- *         uenum_next() or uenum_unext().  When all strings have been
- *         traversed, returns NULL.
- * @stable ICU 2.2
- */
-U_STABLE const char* U_EXPORT2
-uenum_next(UEnumeration* en,
-           int32_t* resultLength,
-           UErrorCode* status);
-
-/**
- * Resets the iterator to the current list of service IDs.  This
- * re-establishes sync with the service and rewinds the iterator
- * to start at the first element.
- * @param en the iterator object
- * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
- *               the iterator is out of sync with its service.  
- * @stable ICU 2.2
- */
-U_STABLE void U_EXPORT2
-uenum_reset(UEnumeration* en, UErrorCode* status);
-
-#if U_SHOW_CPLUSPLUS_API
-
-/**
- * Given a StringEnumeration, wrap it in a UEnumeration.  The
- * StringEnumeration is adopted; after this call, the caller must not
- * delete it (regardless of error status).
- * @param adopted the C++ StringEnumeration to be wrapped in a UEnumeration.
- * @param ec the error code.
- * @return a UEnumeration wrapping the adopted StringEnumeration.
- * @draft ICU 4.2
- */
-U_CAPI UEnumeration* U_EXPORT2
-uenum_openFromStringEnumeration(U_NAMESPACE_QUALIFIER StringEnumeration* adopted, UErrorCode* ec);
-
-#endif
-
-#endif
diff --git a/source/common/unicode/uidna.h b/source/common/unicode/uidna.h
deleted file mode 100644
index 04b439d..0000000
--- a/source/common/unicode/uidna.h
+++ /dev/null
@@ -1,733 +0,0 @@
-/*
- *******************************************************************************
- *
- *   Copyright (C) 2003-2010, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  uidna.h
- *   encoding:   US-ASCII
- *   tab size:   8 (not used)
- *   indentation:4
- *
- *   created on: 2003feb1
- *   created by: Ram Viswanadha
- */
-
-#ifndef __UIDNA_H__
-#define __UIDNA_H__
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_IDNA
-
-#include "unicode/localpointer.h"
-#include "unicode/parseerr.h"
-
-/**
- * \file
- * \brief C API: Internationalizing Domain Names in Applications (IDNA)
- *
- * IDNA2008 is implemented according to UTS #46, see the IDNA C++ class in idna.h.
- *
- * The C API functions which do take a UIDNA * service object pointer
- * implement UTS #46 and IDNA2008.
- * The C API functions which do not take a service object pointer
- * implement IDNA2003.
- */
-
-/*
- * IDNA option bit set values.
- */
-enum {
-    /**
-     * Default options value: None of the other options are set.
-     * @stable ICU 2.6
-     */
-    UIDNA_DEFAULT=0,
-    /**
-     * Option to allow unassigned code points in domain names and labels.
-     * This option is ignored by the UTS46 implementation.
-     * (UTS #46 disallows unassigned code points.)
-     * @stable ICU 2.6
-     */
-    UIDNA_ALLOW_UNASSIGNED=1,
-    /**
-     * Option to check whether the input conforms to the STD3 ASCII rules,
-     * for example the restriction of labels to LDH characters
-     * (ASCII Letters, Digits and Hyphen-Minus).
-     * @stable ICU 2.6
-     */
-    UIDNA_USE_STD3_RULES=2,
-    /**
-     * IDNA option to check for whether the input conforms to the BiDi rules.
-     * This option is ignored by the IDNA2003 implementation.
-     * (IDNA2003 always performs a BiDi check.)
-     * @draft ICU 4.6
-     */
-    UIDNA_CHECK_BIDI=4,
-    /**
-     * IDNA option to check for whether the input conforms to the CONTEXTJ rules.
-     * This option is ignored by the IDNA2003 implementation.
-     * (The CONTEXTJ check is new in IDNA2008.)
-     * @draft ICU 4.6
-     */
-    UIDNA_CHECK_CONTEXTJ=8,
-    /**
-     * IDNA option for nontransitional processing in ToASCII().
-     * By default, ToASCII() uses transitional processing.
-     * This option is ignored by the IDNA2003 implementation.
-     * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.)
-     * @draft ICU 4.6
-     */
-    UIDNA_NONTRANSITIONAL_TO_ASCII=0x10,
-    /**
-     * IDNA option for nontransitional processing in ToUnicode().
-     * By default, ToUnicode() uses transitional processing.
-     * This option is ignored by the IDNA2003 implementation.
-     * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.)
-     * @draft ICU 4.6
-     */
-    UIDNA_NONTRANSITIONAL_TO_UNICODE=0x20
-};
-
-/**
- * Opaque C service object type for the new IDNA API.
- * @draft ICU 4.6
- */
-struct UIDNA;
-typedef struct UIDNA UIDNA;  /**< C typedef for struct UIDNA. @draft ICU 4.6 */
-
-/**
- * Returns a UIDNA instance which implements UTS #46.
- * Returns an unmodifiable instance, owned by the caller.
- * Cache it for multiple operations, and uidna_close() it when done.
- * The instance is thread-safe, that is, it can be used concurrently.
- *
- * For details about the UTS #46 implementation see the IDNA C++ class in idna.h.
- *
- * @param options Bit set to modify the processing and error checking.
- *                See option bit set values in uidna.h.
- * @param pErrorCode 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 UTS #46 UIDNA instance, if successful
- * @draft ICU 4.6
- */
-U_DRAFT UIDNA * U_EXPORT2
-uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode);
-
-/**
- * Closes a UIDNA instance.
- * @param idna UIDNA instance to be closed
- * @draft ICU 4.6
- */
-U_DRAFT void U_EXPORT2
-uidna_close(UIDNA *idna);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUIDNAPointer
- * "Smart pointer" class, closes a UIDNA via uidna_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @draft ICU 4.6
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUIDNAPointer, UIDNA, uidna_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Output container for IDNA processing errors.
- * Initialize with UIDNA_INFO_INITIALIZER:
- * \code
- * UIDNAInfo info = UIDNA_INFO_INITIALIZER;
- * int32_t length = uidna_nameToASCII(..., &info, &errorCode);
- * if(U_SUCCESS(errorCode) && info.errors!=0) { ... }
- * \endcode
- * @draft ICU 4.6
- */
-struct UIDNAInfo {
-    /** sizeof(UIDNAInfo) @draft ICU 4.6 */
-    int16_t size;
-    /**
-     * Set to TRUE if transitional and nontransitional processing produce different results.
-     * For details see C++ IDNAInfo::isTransitionalDifferent().
-     * @draft ICU 4.6
-     */
-    UBool isTransitionalDifferent;
-    UBool reservedB3;  /**< Reserved field, do not use. @internal */
-    /**
-     * Bit set indicating IDNA processing errors. 0 if no errors.
-     * See UIDNA_ERROR_... constants.
-     * @draft ICU 4.6
-     */
-    uint32_t errors;
-    int32_t reservedI2;  /**< Reserved field, do not use. @internal */
-    int32_t reservedI3;  /**< Reserved field, do not use. @internal */
-};
-typedef struct UIDNAInfo UIDNAInfo;
-
-/**
- * Static initializer for a UIDNAInfo struct.
- * @draft ICU 4.6
- */
-#define UIDNA_INFO_INITIALIZER { \
-    (int16_t)sizeof(UIDNAInfo), \
-    FALSE, FALSE, \
-    0, 0, 0 }
-
-/**
- * Converts a single domain name label into its ASCII form for DNS lookup.
- * If any processing step fails, then pInfo->errors will be non-zero and
- * the result might not be an ASCII string.
- * The label might be modified according to the types of errors.
- * Labels with severe errors will be left in (or turned into) their Unicode form.
- *
- * The UErrorCode indicates an error only in exceptional cases,
- * such as a U_MEMORY_ALLOCATION_ERROR.
- *
- * @param idna UIDNA instance
- * @param label Input domain name label
- * @param length Label length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_labelToASCII(const UIDNA *idna,
-                   const UChar *label, int32_t length,
-                   UChar *dest, int32_t capacity,
-                   UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/**
- * Converts a single domain name label into its Unicode form for human-readable display.
- * If any processing step fails, then pInfo->errors will be non-zero.
- * The label might be modified according to the types of errors.
- *
- * The UErrorCode indicates an error only in exceptional cases,
- * such as a U_MEMORY_ALLOCATION_ERROR.
- *
- * @param idna UIDNA instance
- * @param label Input domain name label
- * @param length Label length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_labelToUnicode(const UIDNA *idna,
-                     const UChar *label, int32_t length,
-                     UChar *dest, int32_t capacity,
-                     UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/**
- * Converts a whole domain name into its ASCII form for DNS lookup.
- * If any processing step fails, then pInfo->errors will be non-zero and
- * the result might not be an ASCII string.
- * The domain name might be modified according to the types of errors.
- * Labels with severe errors will be left in (or turned into) their Unicode form.
- *
- * The UErrorCode indicates an error only in exceptional cases,
- * such as a U_MEMORY_ALLOCATION_ERROR.
- *
- * @param idna UIDNA instance
- * @param name Input domain name
- * @param length Domain name length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_nameToASCII(const UIDNA *idna,
-                  const UChar *name, int32_t length,
-                  UChar *dest, int32_t capacity,
-                  UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/**
- * Converts a whole domain name into its Unicode form for human-readable display.
- * If any processing step fails, then pInfo->errors will be non-zero.
- * The domain name might be modified according to the types of errors.
- *
- * The UErrorCode indicates an error only in exceptional cases,
- * such as a U_MEMORY_ALLOCATION_ERROR.
- *
- * @param idna UIDNA instance
- * @param name Input domain name
- * @param length Domain name length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_nameToUnicode(const UIDNA *idna,
-                    const UChar *name, int32_t length,
-                    UChar *dest, int32_t capacity,
-                    UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/* UTF-8 versions of the processing methods --------------------------------- */
-
-/**
- * Converts a single domain name label into its ASCII form for DNS lookup.
- * UTF-8 version of uidna_labelToASCII(), same behavior.
- *
- * @param idna UIDNA instance
- * @param label Input domain name label
- * @param length Label length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_labelToASCII_UTF8(const UIDNA *idna,
-                        const char *label, int32_t length,
-                        char *dest, int32_t capacity,
-                        UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/**
- * Converts a single domain name label into its Unicode form for human-readable display.
- * UTF-8 version of uidna_labelToUnicode(), same behavior.
- *
- * @param idna UIDNA instance
- * @param label Input domain name label
- * @param length Label length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_labelToUnicodeUTF8(const UIDNA *idna,
-                         const char *label, int32_t length,
-                         char *dest, int32_t capacity,
-                         UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/**
- * Converts a whole domain name into its ASCII form for DNS lookup.
- * UTF-8 version of uidna_nameToASCII(), same behavior.
- *
- * @param idna UIDNA instance
- * @param name Input domain name
- * @param length Domain name length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_nameToASCII_UTF8(const UIDNA *idna,
-                       const char *name, int32_t length,
-                       char *dest, int32_t capacity,
-                       UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/**
- * Converts a whole domain name into its Unicode form for human-readable display.
- * UTF-8 version of uidna_nameToUnicode(), same behavior.
- *
- * @param idna UIDNA instance
- * @param name Input domain name
- * @param length Domain name length, or -1 if NUL-terminated
- * @param dest Destination string buffer
- * @param capacity Destination buffer capacity
- * @param pInfo Output container of IDNA processing details.
- * @param pErrorCode 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 destination string length
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uidna_nameToUnicodeUTF8(const UIDNA *idna,
-                        const char *name, int32_t length,
-                        char *dest, int32_t capacity,
-                        UIDNAInfo *pInfo, UErrorCode *pErrorCode);
-
-/*
- * IDNA error bit set values.
- * When a domain name or label fails a processing step or does not meet the
- * validity criteria, then one or more of these error bits are set.
- */
-enum {
-    /**
-     * A non-final domain name label (or the whole domain name) is empty.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_EMPTY_LABEL=1,
-    /**
-     * A domain name label is longer than 63 bytes.
-     * (See STD13/RFC1034 3.1. Name space specifications and terminology.)
-     * This is only checked in ToASCII operations, and only if the output label is all-ASCII.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_LABEL_TOO_LONG=2,
-    /**
-     * A domain name is longer than 255 bytes in its storage form.
-     * (See STD13/RFC1034 3.1. Name space specifications and terminology.)
-     * This is only checked in ToASCII operations, and only if the output domain name is all-ASCII.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_DOMAIN_NAME_TOO_LONG=4,
-    /**
-     * A label starts with a hyphen-minus ('-').
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_LEADING_HYPHEN=8,
-    /**
-     * A label ends with a hyphen-minus ('-').
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_TRAILING_HYPHEN=0x10,
-    /**
-     * A label contains hyphen-minus ('-') in the third and fourth positions.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_HYPHEN_3_4=0x20,
-    /**
-     * A label starts with a combining mark.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_LEADING_COMBINING_MARK=0x40,
-    /**
-     * A label or domain name contains disallowed characters.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_DISALLOWED=0x80,
-    /**
-     * A label starts with "xn--" but does not contain valid Punycode.
-     * That is, an xn-- label failed Punycode decoding.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_PUNYCODE=0x100,
-    /**
-     * A label contains a dot=full stop.
-     * This can occur in an input string for a single-label function.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_LABEL_HAS_DOT=0x200,
-    /**
-     * An ACE label does not contain a valid label string.
-     * The label was successfully ACE (Punycode) decoded but the resulting
-     * string had severe validation errors. For example,
-     * it might contain characters that are not allowed in ACE labels,
-     * or it might not be normalized.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_INVALID_ACE_LABEL=0x400,
-    /**
-     * A label does not meet the IDNA BiDi requirements (for right-to-left characters).
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_BIDI=0x800,
-    /**
-     * A label does not meet the IDNA CONTEXTJ requirements.
-     * @draft ICU 4.6
-     */
-    UIDNA_ERROR_CONTEXTJ=0x1000
-};
-
-/* IDNA2003 API ------------------------------------------------------------- */
-
-/**
- * IDNA2003: This function implements the ToASCII operation as defined in the IDNA RFC.
- * This operation is done on <b>single labels</b> before sending it to something that expects
- * ASCII names. A label is an individual part of a domain name. Labels are usually
- * separated by dots; e.g. "www.example.com" is composed of 3 labels "www","example", and "com".
- *
- * IDNA2003 API Overview:
- *
- * The uidna_ API implements the IDNA protocol as defined in the IDNA RFC
- * (http://www.ietf.org/rfc/rfc3490.txt).
- * The RFC defines 2 operations: ToASCII and ToUnicode. Domain name labels
- * containing non-ASCII code points are processed by the
- * ToASCII operation before passing it to resolver libraries. Domain names
- * that are obtained from resolver libraries are processed by the
- * ToUnicode operation before displaying the domain name to the user.
- * IDNA requires that implementations process input strings with Nameprep
- * (http://www.ietf.org/rfc/rfc3491.txt),
- * which is a profile of Stringprep (http://www.ietf.org/rfc/rfc3454.txt),
- * and then with Punycode (http://www.ietf.org/rfc/rfc3492.txt).
- * Implementations of IDNA MUST fully implement Nameprep and Punycode;
- * neither Nameprep nor Punycode are optional.
- * The input and output of ToASCII and ToUnicode operations are Unicode
- * and are designed to be chainable, i.e., applying ToASCII or ToUnicode operations
- * multiple times to an input string will yield the same result as applying the operation
- * once.
- * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string) 
- * ToASCII(ToASCII(ToASCII...(ToASCII(string))) == ToASCII(string).
- *
- * @param src               Input UChar array containing label in Unicode.
- * @param srcLength         Number of UChars in src, or -1 if NUL-terminated.
- * @param dest              Output UChar array with ASCII (ACE encoded) label.
- * @param destCapacity      Size of dest.
- * @param options           A bit set of options:
- *
- *  - UIDNA_DEFAULT             Use default options, i.e., do not process unassigned code points
- *                              and do not use STD3 ASCII rules
- *                              If unassigned code points are found the operation fails with 
- *                              U_UNASSIGNED_ERROR error code.
- *
- *  - UIDNA_ALLOW_UNASSIGNED    Unassigned values can be converted to ASCII for query operations
- *                              If this option is set, the unassigned code points are in the input 
- *                              are treated as normal Unicode code points.
- *
- *  - UIDNA_USE_STD3_RULES      Use STD3 ASCII rules for host name syntax restrictions
- *                              If this option is set and the input does not satisfy STD3 rules,  
- *                              the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR
- *
- * @param parseError        Pointer to UParseError struct to receive information on position 
- *                          of error if an error is encountered. Can be NULL.
- * @param status            ICU in/out error code parameter.
- *                          U_INVALID_CHAR_FOUND if src contains
- *                          unmatched single surrogates.
- *                          U_INDEX_OUTOFBOUNDS_ERROR if src contains
- *                          too many code points.
- *                          U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @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.
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-uidna_toASCII(const UChar* src, int32_t srcLength, 
-              UChar* dest, int32_t destCapacity,
-              int32_t options,
-              UParseError* parseError,
-              UErrorCode* status);
-
-
-/**
- * IDNA2003: This function implements the ToUnicode operation as defined in the IDNA RFC.
- * This operation is done on <b>single labels</b> before sending it to something that expects
- * Unicode names. A label is an individual part of a domain name. Labels are usually
- * separated by dots; for e.g. "www.example.com" is composed of 3 labels "www","example", and "com".
- *
- * @param src               Input UChar array containing ASCII (ACE encoded) label.
- * @param srcLength         Number of UChars in src, or -1 if NUL-terminated.
- * @param dest Output       Converted UChar array containing Unicode equivalent of label.
- * @param destCapacity      Size of dest.
- * @param options           A bit set of options:
- *
- *  - UIDNA_DEFAULT             Use default options, i.e., do not process unassigned code points
- *                              and do not use STD3 ASCII rules
- *                              If unassigned code points are found the operation fails with 
- *                              U_UNASSIGNED_ERROR error code.
- *
- *  - UIDNA_ALLOW_UNASSIGNED      Unassigned values can be converted to ASCII for query operations
- *                              If this option is set, the unassigned code points are in the input 
- *                              are treated as normal Unicode code points. <b> Note: </b> This option is 
- *                              required on toUnicode operation because the RFC mandates 
- *                              verification of decoded ACE input by applying toASCII and comparing
- *                              its output with source
- *
- *  - UIDNA_USE_STD3_RULES      Use STD3 ASCII rules for host name syntax restrictions
- *                              If this option is set and the input does not satisfy STD3 rules,  
- *                              the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR
- *
- * @param parseError        Pointer to UParseError struct to receive information on position 
- *                          of error if an error is encountered. Can be NULL.
- * @param status            ICU in/out error code parameter.
- *                          U_INVALID_CHAR_FOUND if src contains
- *                          unmatched single surrogates.
- *                          U_INDEX_OUTOFBOUNDS_ERROR if src contains
- *                          too many code points.
- *                          U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @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.
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-uidna_toUnicode(const UChar* src, int32_t srcLength,
-                UChar* dest, int32_t destCapacity,
-                int32_t options,
-                UParseError* parseError,
-                UErrorCode* status);
-
-
-/**
- * IDNA2003: Convenience function that implements the IDNToASCII operation as defined in the IDNA RFC.
- * This operation is done on complete domain names, e.g: "www.example.com". 
- * It is important to note that this operation can fail. If it fails, then the input 
- * domain name cannot be used as an Internationalized Domain Name and the application
- * should have methods defined to deal with the failure.
- *
- * <b>Note:</b> IDNA RFC specifies that a conformant application should divide a domain name
- * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, 
- * and then convert. This function does not offer that level of granularity. The options once  
- * set will apply to all labels in the domain name
- *
- * @param src               Input UChar array containing IDN in Unicode.
- * @param srcLength         Number of UChars in src, or -1 if NUL-terminated.
- * @param dest              Output UChar array with ASCII (ACE encoded) IDN.
- * @param destCapacity      Size of dest.
- * @param options           A bit set of options:
- *
- *  - UIDNA_DEFAULT             Use default options, i.e., do not process unassigned code points
- *                              and do not use STD3 ASCII rules
- *                              If unassigned code points are found the operation fails with 
- *                              U_UNASSIGNED_CODE_POINT_FOUND error code.
- *
- *  - UIDNA_ALLOW_UNASSIGNED    Unassigned values can be converted to ASCII for query operations
- *                              If this option is set, the unassigned code points are in the input 
- *                              are treated as normal Unicode code points.
- *
- *  - UIDNA_USE_STD3_RULES      Use STD3 ASCII rules for host name syntax restrictions
- *                              If this option is set and the input does not satisfy STD3 rules,  
- *                              the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR
- *
- * @param parseError        Pointer to UParseError struct to receive information on position 
- *                          of error if an error is encountered. Can be NULL.
- * @param status            ICU in/out error code parameter.
- *                          U_INVALID_CHAR_FOUND if src contains
- *                          unmatched single surrogates.
- *                          U_INDEX_OUTOFBOUNDS_ERROR if src contains
- *                          too many code points.
- *                          U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @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.
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-uidna_IDNToASCII(  const UChar* src, int32_t srcLength,
-                   UChar* dest, int32_t destCapacity,
-                   int32_t options,
-                   UParseError* parseError,
-                   UErrorCode* status);
-
-/**
- * IDNA2003: Convenience function that implements the IDNToUnicode operation as defined in the IDNA RFC.
- * This operation is done on complete domain names, e.g: "www.example.com". 
- *
- * <b>Note:</b> IDNA RFC specifies that a conformant application should divide a domain name
- * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, 
- * and then convert. This function does not offer that level of granularity. The options once  
- * set will apply to all labels in the domain name
- *
- * @param src               Input UChar array containing IDN in ASCII (ACE encoded) form.
- * @param srcLength         Number of UChars in src, or -1 if NUL-terminated.
- * @param dest Output       UChar array containing Unicode equivalent of source IDN.
- * @param destCapacity      Size of dest.
- * @param options           A bit set of options:
- *
- *  - UIDNA_DEFAULT             Use default options, i.e., do not process unassigned code points
- *                              and do not use STD3 ASCII rules
- *                              If unassigned code points are found the operation fails with 
- *                              U_UNASSIGNED_CODE_POINT_FOUND error code.
- *
- *  - UIDNA_ALLOW_UNASSIGNED    Unassigned values can be converted to ASCII for query operations
- *                              If this option is set, the unassigned code points are in the input 
- *                              are treated as normal Unicode code points.
- *
- *  - UIDNA_USE_STD3_RULES      Use STD3 ASCII rules for host name syntax restrictions
- *                              If this option is set and the input does not satisfy STD3 rules,  
- *                              the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR
- *
- * @param parseError        Pointer to UParseError struct to receive information on position 
- *                          of error if an error is encountered. Can be NULL.
- * @param status            ICU in/out error code parameter.
- *                          U_INVALID_CHAR_FOUND if src contains
- *                          unmatched single surrogates.
- *                          U_INDEX_OUTOFBOUNDS_ERROR if src contains
- *                          too many code points.
- *                          U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @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.
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-uidna_IDNToUnicode(  const UChar* src, int32_t srcLength,
-                     UChar* dest, int32_t destCapacity,
-                     int32_t options,
-                     UParseError* parseError,
-                     UErrorCode* status);
-
-/**
- * IDNA2003: Compare two IDN strings for equivalence.
- * This function splits the domain names into labels and compares them.
- * According to IDN RFC, whenever two labels are compared, they are 
- * considered equal if and only if their ASCII forms (obtained by 
- * applying toASCII) match using an case-insensitive ASCII comparison.
- * Two domain names are considered a match if and only if all labels 
- * match regardless of whether label separators match.
- *
- * @param s1                First source string.
- * @param length1           Length of first source string, or -1 if NUL-terminated.
- *
- * @param s2                Second source string.
- * @param length2           Length of second source string, or -1 if NUL-terminated.
- * @param options           A bit set of options:
- *
- *  - UIDNA_DEFAULT             Use default options, i.e., do not process unassigned code points
- *                              and do not use STD3 ASCII rules
- *                              If unassigned code points are found the operation fails with 
- *                              U_UNASSIGNED_CODE_POINT_FOUND error code.
- *
- *  - UIDNA_ALLOW_UNASSIGNED    Unassigned values can be converted to ASCII for query operations
- *                              If this option is set, the unassigned code points are in the input 
- *                              are treated as normal Unicode code points.
- *
- *  - UIDNA_USE_STD3_RULES      Use STD3 ASCII rules for host name syntax restrictions
- *                              If this option is set and the input does not satisfy STD3 rules,  
- *                              the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR
- *
- * @param status            ICU error code in/out parameter.
- *                          Must fulfill U_SUCCESS before the function call.
- * @return <0 or 0 or >0 as usual for string comparisons
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-uidna_compare(  const UChar *s1, int32_t length1,
-                const UChar *s2, int32_t length2,
-                int32_t options,
-                UErrorCode* status);
-
-#endif /* #if !UCONFIG_NO_IDNA */
-
-#endif
diff --git a/source/common/unicode/uintrnal.h b/source/common/unicode/uintrnal.h
deleted file mode 100644
index e5da6db..0000000
--- a/source/common/unicode/uintrnal.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  uintrnal.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: genheaders.pl, a perl script written by Ram Viswanadha
-*
-*  Contains data for commenting out APIs.
-*  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 UINTRNAL_H
-#define UINTRNAL_H
-
-#ifdef U_HIDE_INTERNAL_API
-
-#    if U_DISABLE_RENAMING
-#        define RegexPatternDump RegexPatternDump_INTERNAL_API_DO_NOT_USE
-#        define bms_close bms_close_INTERNAL_API_DO_NOT_USE
-#        define bms_empty bms_empty_INTERNAL_API_DO_NOT_USE
-#        define bms_getData bms_getData_INTERNAL_API_DO_NOT_USE
-#        define bms_open bms_open_INTERNAL_API_DO_NOT_USE
-#        define bms_search bms_search_INTERNAL_API_DO_NOT_USE
-#        define bms_setTargetString bms_setTargetString_INTERNAL_API_DO_NOT_USE
-#        define pl_addFontRun pl_addFontRun_INTERNAL_API_DO_NOT_USE
-#        define pl_addLocaleRun pl_addLocaleRun_INTERNAL_API_DO_NOT_USE
-#        define pl_addValueRun pl_addValueRun_INTERNAL_API_DO_NOT_USE
-#        define pl_close pl_close_INTERNAL_API_DO_NOT_USE
-#        define pl_closeFontRuns pl_closeFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_closeLine pl_closeLine_INTERNAL_API_DO_NOT_USE
-#        define pl_closeLocaleRuns pl_closeLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_closeValueRuns pl_closeValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_countLineRuns pl_countLineRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_getAscent pl_getAscent_INTERNAL_API_DO_NOT_USE
-#        define pl_getDescent pl_getDescent_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunCount pl_getFontRunCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunFont pl_getFontRunFont_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunLastLimit pl_getFontRunLastLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunLimit pl_getFontRunLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getLeading pl_getLeading_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineAscent pl_getLineAscent_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineDescent pl_getLineDescent_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineLeading pl_getLineLeading_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineVisualRun pl_getLineVisualRun_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineWidth pl_getLineWidth_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunCount pl_getLocaleRunCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunLastLimit pl_getLocaleRunLastLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunLimit pl_getLocaleRunLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunLocale pl_getLocaleRunLocale_INTERNAL_API_DO_NOT_USE
-#        define pl_getParagraphLevel pl_getParagraphLevel_INTERNAL_API_DO_NOT_USE
-#        define pl_getTextDirection pl_getTextDirection_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunCount pl_getValueRunCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunLastLimit pl_getValueRunLastLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunLimit pl_getValueRunLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunValue pl_getValueRunValue_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunAscent pl_getVisualRunAscent_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunDescent pl_getVisualRunDescent_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunDirection pl_getVisualRunDirection_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunFont pl_getVisualRunFont_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunGlyphCount pl_getVisualRunGlyphCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunGlyphToCharMap pl_getVisualRunGlyphToCharMap_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunGlyphs pl_getVisualRunGlyphs_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunLeading pl_getVisualRunLeading_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunPositions pl_getVisualRunPositions_INTERNAL_API_DO_NOT_USE
-#        define pl_line pl_line_INTERNAL_API_DO_NOT_USE
-#        define pl_nextLine pl_nextLine_INTERNAL_API_DO_NOT_USE
-#        define pl_openEmptyFontRuns pl_openEmptyFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openEmptyLocaleRuns pl_openEmptyLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openEmptyValueRuns pl_openEmptyValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openFontRuns pl_openFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openLocaleRuns pl_openLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openValueRuns pl_openValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_paragraph pl_paragraph_INTERNAL_API_DO_NOT_USE
-#        define pl_reflow pl_reflow_INTERNAL_API_DO_NOT_USE
-#        define pl_resetFontRuns pl_resetFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_resetLocaleRuns pl_resetLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_resetValueRuns pl_resetValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_visualRun pl_visualRun_INTERNAL_API_DO_NOT_USE
-#        define ucd_close ucd_close_INTERNAL_API_DO_NOT_USE
-#        define ucd_flushCache ucd_flushCache_INTERNAL_API_DO_NOT_USE
-#        define ucd_freeCache ucd_freeCache_INTERNAL_API_DO_NOT_USE
-#        define ucd_getCollator ucd_getCollator_INTERNAL_API_DO_NOT_USE
-#        define ucd_open ucd_open_INTERNAL_API_DO_NOT_USE
-#        define ucol_equals ucol_equals_INTERNAL_API_DO_NOT_USE
-#        define ucol_forceHanImplicit ucol_forceHanImplicit_INTERNAL_API_DO_NOT_USE
-#        define ucol_forgetUCA ucol_forgetUCA_INTERNAL_API_DO_NOT_USE
-#        define ucol_getAttributeOrDefault ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE
-#        define ucol_getReorderCodes ucol_getReorderCodes_INTERNAL_API_DO_NOT_USE
-#        define ucol_getUnsafeSet ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE
-#        define ucol_nextProcessed ucol_nextProcessed_INTERNAL_API_DO_NOT_USE
-#        define ucol_prepareShortStringOpen ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE
-#        define ucol_previousProcessed ucol_previousProcessed_INTERNAL_API_DO_NOT_USE
-#        define ucol_setReorderCodes ucol_setReorderCodes_INTERNAL_API_DO_NOT_USE
-#        define udat_applyPatternRelative udat_applyPatternRelative_INTERNAL_API_DO_NOT_USE
-#        define udat_toPatternRelativeDate udat_toPatternRelativeDate_INTERNAL_API_DO_NOT_USE
-#        define udat_toPatternRelativeTime udat_toPatternRelativeTime_INTERNAL_API_DO_NOT_USE
-#        define uplug_getConfiguration uplug_getConfiguration_INTERNAL_API_DO_NOT_USE
-#        define uplug_getContext uplug_getContext_INTERNAL_API_DO_NOT_USE
-#        define uplug_getCurrentLevel uplug_getCurrentLevel_INTERNAL_API_DO_NOT_USE
-#        define uplug_getLibrary uplug_getLibrary_INTERNAL_API_DO_NOT_USE
-#        define uplug_getLibraryName uplug_getLibraryName_INTERNAL_API_DO_NOT_USE
-#        define uplug_getPlugLevel uplug_getPlugLevel_INTERNAL_API_DO_NOT_USE
-#        define uplug_getPlugLoadStatus uplug_getPlugLoadStatus_INTERNAL_API_DO_NOT_USE
-#        define uplug_getPlugName uplug_getPlugName_INTERNAL_API_DO_NOT_USE
-#        define uplug_getSymbolName uplug_getSymbolName_INTERNAL_API_DO_NOT_USE
-#        define uplug_loadPlugFromEntrypoint uplug_loadPlugFromEntrypoint_INTERNAL_API_DO_NOT_USE
-#        define uplug_loadPlugFromLibrary uplug_loadPlugFromLibrary_INTERNAL_API_DO_NOT_USE
-#        define uplug_nextPlug uplug_nextPlug_INTERNAL_API_DO_NOT_USE
-#        define uplug_removePlug uplug_removePlug_INTERNAL_API_DO_NOT_USE
-#        define uplug_setContext uplug_setContext_INTERNAL_API_DO_NOT_USE
-#        define uplug_setPlugLevel uplug_setPlugLevel_INTERNAL_API_DO_NOT_USE
-#        define uplug_setPlugName uplug_setPlugName_INTERNAL_API_DO_NOT_USE
-#        define uplug_setPlugNoUnload uplug_setPlugNoUnload_INTERNAL_API_DO_NOT_USE
-#        define uprv_getDefaultCodepage uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE
-#        define uprv_getDefaultLocaleID uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE
-#        define ures_openFillIn ures_openFillIn_INTERNAL_API_DO_NOT_USE
-#        define usearch_search usearch_search_INTERNAL_API_DO_NOT_USE
-#        define usearch_searchBackwards usearch_searchBackwards_INTERNAL_API_DO_NOT_USE
-#        define utext_caseCompare utext_caseCompare_INTERNAL_API_DO_NOT_USE
-#        define utext_caseCompareNativeLimit utext_caseCompareNativeLimit_INTERNAL_API_DO_NOT_USE
-#        define utext_compare utext_compare_INTERNAL_API_DO_NOT_USE
-#        define utext_compareNativeLimit utext_compareNativeLimit_INTERNAL_API_DO_NOT_USE
-#        define utf8_appendCharSafeBody utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE
-#        define utf8_back1SafeBody utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE
-#        define utf8_countTrailBytes utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE
-#        define utf8_nextCharSafeBody utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE
-#        define utf8_prevCharSafeBody utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE
-#    else
-#        define RegexPatternDump_4_6 RegexPatternDump_INTERNAL_API_DO_NOT_USE
-#        define bms_close_4_6 bms_close_INTERNAL_API_DO_NOT_USE
-#        define bms_empty_4_6 bms_empty_INTERNAL_API_DO_NOT_USE
-#        define bms_getData_4_6 bms_getData_INTERNAL_API_DO_NOT_USE
-#        define bms_open_4_6 bms_open_INTERNAL_API_DO_NOT_USE
-#        define bms_search_4_6 bms_search_INTERNAL_API_DO_NOT_USE
-#        define bms_setTargetString_4_6 bms_setTargetString_INTERNAL_API_DO_NOT_USE
-#        define pl_addFontRun_4_6 pl_addFontRun_INTERNAL_API_DO_NOT_USE
-#        define pl_addLocaleRun_4_6 pl_addLocaleRun_INTERNAL_API_DO_NOT_USE
-#        define pl_addValueRun_4_6 pl_addValueRun_INTERNAL_API_DO_NOT_USE
-#        define pl_close_4_6 pl_close_INTERNAL_API_DO_NOT_USE
-#        define pl_closeFontRuns_4_6 pl_closeFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_closeLine_4_6 pl_closeLine_INTERNAL_API_DO_NOT_USE
-#        define pl_closeLocaleRuns_4_6 pl_closeLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_closeValueRuns_4_6 pl_closeValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_countLineRuns_4_6 pl_countLineRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_getAscent_4_6 pl_getAscent_INTERNAL_API_DO_NOT_USE
-#        define pl_getDescent_4_6 pl_getDescent_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunCount_4_6 pl_getFontRunCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunFont_4_6 pl_getFontRunFont_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunLastLimit_4_6 pl_getFontRunLastLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getFontRunLimit_4_6 pl_getFontRunLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getLeading_4_6 pl_getLeading_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineAscent_4_6 pl_getLineAscent_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineDescent_4_6 pl_getLineDescent_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineLeading_4_6 pl_getLineLeading_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineVisualRun_4_6 pl_getLineVisualRun_INTERNAL_API_DO_NOT_USE
-#        define pl_getLineWidth_4_6 pl_getLineWidth_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunCount_4_6 pl_getLocaleRunCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunLastLimit_4_6 pl_getLocaleRunLastLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunLimit_4_6 pl_getLocaleRunLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getLocaleRunLocale_4_6 pl_getLocaleRunLocale_INTERNAL_API_DO_NOT_USE
-#        define pl_getParagraphLevel_4_6 pl_getParagraphLevel_INTERNAL_API_DO_NOT_USE
-#        define pl_getTextDirection_4_6 pl_getTextDirection_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunCount_4_6 pl_getValueRunCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunLastLimit_4_6 pl_getValueRunLastLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunLimit_4_6 pl_getValueRunLimit_INTERNAL_API_DO_NOT_USE
-#        define pl_getValueRunValue_4_6 pl_getValueRunValue_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunAscent_4_6 pl_getVisualRunAscent_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunDescent_4_6 pl_getVisualRunDescent_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunDirection_4_6 pl_getVisualRunDirection_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunFont_4_6 pl_getVisualRunFont_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunGlyphCount_4_6 pl_getVisualRunGlyphCount_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunGlyphToCharMap_4_6 pl_getVisualRunGlyphToCharMap_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunGlyphs_4_6 pl_getVisualRunGlyphs_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunLeading_4_6 pl_getVisualRunLeading_INTERNAL_API_DO_NOT_USE
-#        define pl_getVisualRunPositions_4_6 pl_getVisualRunPositions_INTERNAL_API_DO_NOT_USE
-#        define pl_line_4_6 pl_line_INTERNAL_API_DO_NOT_USE
-#        define pl_nextLine_4_6 pl_nextLine_INTERNAL_API_DO_NOT_USE
-#        define pl_openEmptyFontRuns_4_6 pl_openEmptyFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openEmptyLocaleRuns_4_6 pl_openEmptyLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openEmptyValueRuns_4_6 pl_openEmptyValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openFontRuns_4_6 pl_openFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openLocaleRuns_4_6 pl_openLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_openValueRuns_4_6 pl_openValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_paragraph_4_6 pl_paragraph_INTERNAL_API_DO_NOT_USE
-#        define pl_reflow_4_6 pl_reflow_INTERNAL_API_DO_NOT_USE
-#        define pl_resetFontRuns_4_6 pl_resetFontRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_resetLocaleRuns_4_6 pl_resetLocaleRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_resetValueRuns_4_6 pl_resetValueRuns_INTERNAL_API_DO_NOT_USE
-#        define pl_visualRun_4_6 pl_visualRun_INTERNAL_API_DO_NOT_USE
-#        define ucd_close_4_6 ucd_close_INTERNAL_API_DO_NOT_USE
-#        define ucd_flushCache_4_6 ucd_flushCache_INTERNAL_API_DO_NOT_USE
-#        define ucd_freeCache_4_6 ucd_freeCache_INTERNAL_API_DO_NOT_USE
-#        define ucd_getCollator_4_6 ucd_getCollator_INTERNAL_API_DO_NOT_USE
-#        define ucd_open_4_6 ucd_open_INTERNAL_API_DO_NOT_USE
-#        define ucol_equals_4_6 ucol_equals_INTERNAL_API_DO_NOT_USE
-#        define ucol_forceHanImplicit_4_6 ucol_forceHanImplicit_INTERNAL_API_DO_NOT_USE
-#        define ucol_forgetUCA_4_6 ucol_forgetUCA_INTERNAL_API_DO_NOT_USE
-#        define ucol_getAttributeOrDefault_4_6 ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE
-#        define ucol_getReorderCodes_4_6 ucol_getReorderCodes_INTERNAL_API_DO_NOT_USE
-#        define ucol_getUnsafeSet_4_6 ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE
-#        define ucol_nextProcessed_4_6 ucol_nextProcessed_INTERNAL_API_DO_NOT_USE
-#        define ucol_prepareShortStringOpen_4_6 ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE
-#        define ucol_previousProcessed_4_6 ucol_previousProcessed_INTERNAL_API_DO_NOT_USE
-#        define ucol_setReorderCodes_4_6 ucol_setReorderCodes_INTERNAL_API_DO_NOT_USE
-#        define udat_applyPatternRelative_4_6 udat_applyPatternRelative_INTERNAL_API_DO_NOT_USE
-#        define udat_toPatternRelativeDate_4_6 udat_toPatternRelativeDate_INTERNAL_API_DO_NOT_USE
-#        define udat_toPatternRelativeTime_4_6 udat_toPatternRelativeTime_INTERNAL_API_DO_NOT_USE
-#        define uplug_getConfiguration_4_6 uplug_getConfiguration_INTERNAL_API_DO_NOT_USE
-#        define uplug_getContext_4_6 uplug_getContext_INTERNAL_API_DO_NOT_USE
-#        define uplug_getCurrentLevel_4_6 uplug_getCurrentLevel_INTERNAL_API_DO_NOT_USE
-#        define uplug_getLibrary_4_6 uplug_getLibrary_INTERNAL_API_DO_NOT_USE
-#        define uplug_getLibraryName_4_6 uplug_getLibraryName_INTERNAL_API_DO_NOT_USE
-#        define uplug_getPlugLevel_4_6 uplug_getPlugLevel_INTERNAL_API_DO_NOT_USE
-#        define uplug_getPlugLoadStatus_4_6 uplug_getPlugLoadStatus_INTERNAL_API_DO_NOT_USE
-#        define uplug_getPlugName_4_6 uplug_getPlugName_INTERNAL_API_DO_NOT_USE
-#        define uplug_getSymbolName_4_6 uplug_getSymbolName_INTERNAL_API_DO_NOT_USE
-#        define uplug_loadPlugFromEntrypoint_4_6 uplug_loadPlugFromEntrypoint_INTERNAL_API_DO_NOT_USE
-#        define uplug_loadPlugFromLibrary_4_6 uplug_loadPlugFromLibrary_INTERNAL_API_DO_NOT_USE
-#        define uplug_nextPlug_4_6 uplug_nextPlug_INTERNAL_API_DO_NOT_USE
-#        define uplug_removePlug_4_6 uplug_removePlug_INTERNAL_API_DO_NOT_USE
-#        define uplug_setContext_4_6 uplug_setContext_INTERNAL_API_DO_NOT_USE
-#        define uplug_setPlugLevel_4_6 uplug_setPlugLevel_INTERNAL_API_DO_NOT_USE
-#        define uplug_setPlugName_4_6 uplug_setPlugName_INTERNAL_API_DO_NOT_USE
-#        define uplug_setPlugNoUnload_4_6 uplug_setPlugNoUnload_INTERNAL_API_DO_NOT_USE
-#        define uprv_getDefaultCodepage_4_6 uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE
-#        define uprv_getDefaultLocaleID_4_6 uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE
-#        define ures_openFillIn_4_6 ures_openFillIn_INTERNAL_API_DO_NOT_USE
-#        define usearch_search_4_6 usearch_search_INTERNAL_API_DO_NOT_USE
-#        define usearch_searchBackwards_4_6 usearch_searchBackwards_INTERNAL_API_DO_NOT_USE
-#        define utext_caseCompareNativeLimit_4_6 utext_caseCompareNativeLimit_INTERNAL_API_DO_NOT_USE
-#        define utext_caseCompare_4_6 utext_caseCompare_INTERNAL_API_DO_NOT_USE
-#        define utext_compareNativeLimit_4_6 utext_compareNativeLimit_INTERNAL_API_DO_NOT_USE
-#        define utext_compare_4_6 utext_compare_INTERNAL_API_DO_NOT_USE
-#        define utf8_appendCharSafeBody_4_6 utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE
-#        define utf8_back1SafeBody_4_6 utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE
-#        define utf8_countTrailBytes_4_6 utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE
-#        define utf8_nextCharSafeBody_4_6 utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE
-#        define utf8_prevCharSafeBody_4_6 utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE
-#    endif /* U_DISABLE_RENAMING */
-
-#endif /* U_HIDE_INTERNAL_API */
-#endif /* UINTRNAL_H */
-
diff --git a/source/common/unicode/uiter.h b/source/common/unicode/uiter.h
deleted file mode 100644
index b469e24..0000000
--- a/source/common/unicode/uiter.h
+++ /dev/null
@@ -1,707 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2006,2009 International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  uiter.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002jan18
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __UITER_H__
-#define __UITER_H__
-
-/**
- * \file
- * \brief C API: Unicode Character Iteration
- *
- * @see UCharIterator
- */
-
-#include "unicode/utypes.h"
-
-#if U_SHOW_CPLUSPLUS_API
-    U_NAMESPACE_BEGIN
-
-    class CharacterIterator;
-    class Replaceable;
-
-    U_NAMESPACE_END
-#endif
-
-U_CDECL_BEGIN
-
-struct UCharIterator;
-typedef struct UCharIterator UCharIterator; /**< C typedef for struct UCharIterator. @stable ICU 2.1 */
-
-/**
- * Origin constants for UCharIterator.getIndex() and UCharIterator.move().
- * @see UCharIteratorMove
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef enum UCharIteratorOrigin {
-    UITER_START, UITER_CURRENT, UITER_LIMIT, UITER_ZERO, UITER_LENGTH
-} UCharIteratorOrigin;
-
-/** Constants for UCharIterator. @stable ICU 2.6 */
-enum {
-    /**
-     * Constant value that may be returned by UCharIteratorMove
-     * indicating that the final UTF-16 index is not known, but that the move succeeded.
-     * This can occur when moving relative to limit or length, or
-     * when moving relative to the current index after a setState()
-     * when the current UTF-16 index is not known.
-     *
-     * It would be very inefficient to have to count from the beginning of the text
-     * just to get the current/limit/length index after moving relative to it.
-     * The actual index can be determined with getIndex(UITER_CURRENT)
-     * which will count the UChars if necessary.
-     *
-     * @stable ICU 2.6
-     */
-    UITER_UNKNOWN_INDEX=-2
-};
-
-
-/**
- * Constant for UCharIterator getState() indicating an error or
- * an unknown state.
- * Returned by uiter_getState()/UCharIteratorGetState
- * when an error occurs.
- * Also, some UCharIterator implementations may not be able to return
- * a valid state for each position. This will be clearly documented
- * for each such iterator (none of the public ones here).
- *
- * @stable ICU 2.6
- */
-#define UITER_NO_STATE ((uint32_t)0xffffffff)
-
-/**
- * Function type declaration for UCharIterator.getIndex().
- *
- * Gets the current position, or the start or limit of the
- * iteration range.
- *
- * This function may perform slowly for UITER_CURRENT after setState() was called,
- * or for UITER_LENGTH, because an iterator implementation may have to count
- * UChars if the underlying storage is not UTF-16.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @param origin get the 0, start, limit, length, or current index
- * @return the requested index, or U_SENTINEL in an error condition
- *
- * @see UCharIteratorOrigin
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef int32_t U_CALLCONV
-UCharIteratorGetIndex(UCharIterator *iter, UCharIteratorOrigin origin);
-
-/**
- * Function type declaration for UCharIterator.move().
- *
- * Use iter->move(iter, index, UITER_ZERO) like CharacterIterator::setIndex(index).
- *
- * Moves the current position relative to the start or limit 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.
- * Out of bounds movement will be pinned to the start or limit.
- *
- * This function may perform slowly for moving relative to UITER_LENGTH
- * because an iterator implementation may have to count the rest of the
- * UChars if the native storage is not UTF-16.
- *
- * When moving relative to the limit or length, or
- * relative to the current position after setState() was called,
- * move() may return UITER_UNKNOWN_INDEX (-2) to avoid an inefficient
- * determination of the actual UTF-16 index.
- * The actual index can be determined with getIndex(UITER_CURRENT)
- * which will count the UChars if necessary.
- * See UITER_UNKNOWN_INDEX for details.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @param delta can be positive, zero, or negative
- * @param origin move relative to the 0, start, limit, length, or current index
- * @return the new index, or U_SENTINEL on an error condition,
- *         or UITER_UNKNOWN_INDEX when the index is not known.
- *
- * @see UCharIteratorOrigin
- * @see UCharIterator
- * @see UITER_UNKNOWN_INDEX
- * @stable ICU 2.1
- */
-typedef int32_t U_CALLCONV
-UCharIteratorMove(UCharIterator *iter, int32_t delta, UCharIteratorOrigin origin);
-
-/**
- * Function type declaration for UCharIterator.hasNext().
- *
- * Check if current() and next() can still
- * return another code unit.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return boolean value for whether current() and next() can still return another code unit
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef UBool U_CALLCONV
-UCharIteratorHasNext(UCharIterator *iter);
-
-/**
- * Function type declaration for UCharIterator.hasPrevious().
- *
- * Check if previous() can still return another code unit.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return boolean value for whether previous() can still return another code unit
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef UBool U_CALLCONV
-UCharIteratorHasPrevious(UCharIterator *iter);
- 
-/**
- * Function type declaration for UCharIterator.current().
- *
- * Return the code unit at the current position,
- * or U_SENTINEL if there is none (index is at the limit).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the current code unit
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef UChar32 U_CALLCONV
-UCharIteratorCurrent(UCharIterator *iter);
-
-/**
- * Function type declaration for UCharIterator.next().
- *
- * Return the code unit at the current index and increment
- * the index (post-increment, like s[i++]),
- * or return U_SENTINEL if there is none (index is at the limit).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the current code unit (and post-increment the current index)
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef UChar32 U_CALLCONV
-UCharIteratorNext(UCharIterator *iter);
-
-/**
- * Function type declaration for UCharIterator.previous().
- *
- * Decrement the index and return the code unit from there
- * (pre-decrement, like s[--i]),
- * or return U_SENTINEL if there is none (index is at the start).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the previous code unit (after pre-decrementing the current index)
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef UChar32 U_CALLCONV
-UCharIteratorPrevious(UCharIterator *iter);
-
-/**
- * Function type declaration for UCharIterator.reservedFn().
- * Reserved for future use.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @param something some integer argument
- * @return some integer
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-typedef int32_t U_CALLCONV
-UCharIteratorReserved(UCharIterator *iter, int32_t something);
-
-/**
- * Function type declaration for UCharIterator.getState().
- *
- * Get the "state" of the iterator in the form of a single 32-bit word.
- * It is recommended that the state value be calculated to be as small as
- * is feasible. For strings with limited lengths, fewer than 32 bits may
- * be sufficient.
- *
- * This is used together with setState()/UCharIteratorSetState
- * to save and restore the iterator position more efficiently than with
- * getIndex()/move().
- *
- * The iterator state is defined as a uint32_t value because it is designed
- * for use in ucol_nextSortKeyPart() which provides 32 bits to store the state
- * of the character iterator.
- *
- * With some UCharIterator implementations (e.g., UTF-8),
- * getting and setting the UTF-16 index with existing functions
- * (getIndex(UITER_CURRENT) followed by move(pos, UITER_ZERO)) is possible but
- * relatively slow because the iterator has to "walk" from a known index
- * to the requested one.
- * This takes more time the farther it needs to go.
- *
- * An opaque state value allows an iterator implementation to provide
- * an internal index (UTF-8: the source byte array index) for
- * fast, constant-time restoration.
- *
- * After calling setState(), a getIndex(UITER_CURRENT) may be slow because
- * the UTF-16 index may not be restored as well, but the iterator can deliver
- * the correct text contents and move relative to the current position
- * without performance degradation.
- *
- * Some UCharIterator implementations may not be able to return
- * a valid state for each position, in which case they return UITER_NO_STATE instead.
- * This will be clearly documented for each such iterator (none of the public ones here).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the state word
- *
- * @see UCharIterator
- * @see UCharIteratorSetState
- * @see UITER_NO_STATE
- * @stable ICU 2.6
- */
-typedef uint32_t U_CALLCONV
-UCharIteratorGetState(const UCharIterator *iter);
-
-/**
- * Function type declaration for UCharIterator.setState().
- *
- * Restore the "state" of the iterator using a state word from a getState() call.
- * The iterator object need not be the same one as for which getState() was called,
- * but it must be of the same type (set up using the same uiter_setXYZ function)
- * and it must iterate over the same string
- * (binary identical regardless of memory address).
- * For more about the state word see UCharIteratorGetState.
- *
- * After calling setState(), a getIndex(UITER_CURRENT) may be slow because
- * the UTF-16 index may not be restored as well, but the iterator can deliver
- * the correct text contents and move relative to the current position
- * without performance degradation.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @param state the state word from a getState() call
- *              on a same-type, same-string iterator
- * @param pErrorCode Must be a valid pointer to an error code value,
- *                   which must not indicate a failure before the function call.
- *
- * @see UCharIterator
- * @see UCharIteratorGetState
- * @stable ICU 2.6
- */
-typedef void U_CALLCONV
-UCharIteratorSetState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode);
-
-
-/**
- * C API for code unit iteration.
- * This can be used as a C wrapper around
- * CharacterIterator, Replaceable, or implemented using simple strings, etc.
- *
- * There are two roles for using UCharIterator:
- *
- * A "provider" sets the necessary function pointers and controls the "protected"
- * fields of the UCharIterator structure. A "provider" passes a UCharIterator
- * into C APIs that need a UCharIterator as an abstract, flexible string interface.
- *
- * Implementations of such C APIs are "callers" of UCharIterator functions;
- * they only use the "public" function pointers and never access the "protected"
- * fields directly.
- *
- * The current() and next() functions only check the current index against the
- * limit, and previous() only checks the current index against the start,
- * to see if the iterator already reached the end of the iteration range.
- *
- * The assumption - in all iterators - is that the index is moved via the API,
- * which means it won't go out of bounds, or the index is modified by
- * user code that knows enough about the iterator implementation to set valid
- * index values.
- *
- * UCharIterator functions return code unit values 0..0xffff,
- * or U_SENTINEL if the iteration bounds are reached.
- *
- * @stable ICU 2.1
- */
-struct UCharIterator {
-    /**
-     * (protected) Pointer to string or wrapped object or similar.
-     * Not used by caller.
-     * @stable ICU 2.1
-     */
-    const void *context;
-
-    /**
-     * (protected) Length of string or similar.
-     * Not used by caller.
-     * @stable ICU 2.1
-     */
-    int32_t length;
-
-    /**
-     * (protected) Start index or similar.
-     * Not used by caller.
-     * @stable ICU 2.1
-     */
-    int32_t start;
-
-    /**
-     * (protected) Current index or similar.
-     * Not used by caller.
-     * @stable ICU 2.1
-     */
-    int32_t index;
-
-    /**
-     * (protected) Limit index or similar.
-     * Not used by caller.
-     * @stable ICU 2.1
-     */
-    int32_t limit;
-
-    /**
-     * (protected) Used by UTF-8 iterators and possibly others.
-     * @stable ICU 2.1
-     */
-    int32_t reservedField;
-
-    /**
-     * (public) Returns the current position or the
-     * start or limit index of the iteration range.
-     *
-     * @see UCharIteratorGetIndex
-     * @stable ICU 2.1
-     */
-    UCharIteratorGetIndex *getIndex;
-
-    /**
-     * (public) Moves the current position relative to the start or limit 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.
-     *
-     * @see UCharIteratorMove
-     * @stable ICU 2.1
-     */
-    UCharIteratorMove *move;
-
-    /**
-     * (public) Check if current() and next() can still
-     * return another code unit.
-     *
-     * @see UCharIteratorHasNext
-     * @stable ICU 2.1
-     */
-    UCharIteratorHasNext *hasNext;
-
-    /**
-     * (public) Check if previous() can still return another code unit.
-     *
-     * @see UCharIteratorHasPrevious
-     * @stable ICU 2.1
-     */
-    UCharIteratorHasPrevious *hasPrevious;
-
-    /**
-     * (public) Return the code unit at the current position,
-     * or U_SENTINEL if there is none (index is at the limit).
-     *
-     * @see UCharIteratorCurrent
-     * @stable ICU 2.1
-     */
-    UCharIteratorCurrent *current;
-
-    /**
-     * (public) Return the code unit at the current index and increment
-     * the index (post-increment, like s[i++]),
-     * or return U_SENTINEL if there is none (index is at the limit).
-     *
-     * @see UCharIteratorNext
-     * @stable ICU 2.1
-     */
-    UCharIteratorNext *next;
-
-    /**
-     * (public) Decrement the index and return the code unit from there
-     * (pre-decrement, like s[--i]),
-     * or return U_SENTINEL if there is none (index is at the start).
-     *
-     * @see UCharIteratorPrevious
-     * @stable ICU 2.1
-     */
-    UCharIteratorPrevious *previous;
-
-    /**
-     * (public) Reserved for future use. Currently NULL.
-     *
-     * @see UCharIteratorReserved
-     * @stable ICU 2.1
-     */
-    UCharIteratorReserved *reservedFn;
-
-    /**
-     * (public) Return the state of the iterator, to be restored later with setState().
-     * This function pointer is NULL if the iterator does not implement it.
-     *
-     * @see UCharIteratorGet
-     * @stable ICU 2.6
-     */
-    UCharIteratorGetState *getState;
-
-    /**
-     * (public) Restore the iterator state from the state word from a call
-     * to getState().
-     * This function pointer is NULL if the iterator does not implement it.
-     *
-     * @see UCharIteratorSet
-     * @stable ICU 2.6
-     */
-    UCharIteratorSetState *setState;
-};
-
-/**
- * Helper function for UCharIterator to get the code point
- * at the current index.
- *
- * Return the code point that includes the code unit at the current position,
- * or U_SENTINEL if there is none (index is at the limit).
- * If the current code unit is a lead or trail surrogate,
- * then the following or preceding surrogate is used to form
- * the code point value.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the current code point
- *
- * @see UCharIterator
- * @see U16_GET
- * @see UnicodeString::char32At()
- * @stable ICU 2.1
- */
-U_STABLE UChar32 U_EXPORT2
-uiter_current32(UCharIterator *iter);
-
-/**
- * Helper function for UCharIterator to get the next code point.
- *
- * Return the code point at the current index and increment
- * the index (post-increment, like s[i++]),
- * or return U_SENTINEL if there is none (index is at the limit).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the current code point (and post-increment the current index)
- *
- * @see UCharIterator
- * @see U16_NEXT
- * @stable ICU 2.1
- */
-U_STABLE UChar32 U_EXPORT2
-uiter_next32(UCharIterator *iter);
-
-/**
- * Helper function for UCharIterator to get the previous code point.
- *
- * Decrement the index and return the code point from there
- * (pre-decrement, like s[--i]),
- * or return U_SENTINEL if there is none (index is at the start).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the previous code point (after pre-decrementing the current index)
- *
- * @see UCharIterator
- * @see U16_PREV
- * @stable ICU 2.1
- */
-U_STABLE UChar32 U_EXPORT2
-uiter_previous32(UCharIterator *iter);
-
-/**
- * Get the "state" of the iterator in the form of a single 32-bit word.
- * This is a convenience function that calls iter->getState(iter)
- * if iter->getState is not NULL;
- * if it is NULL or any other error occurs, then UITER_NO_STATE is returned.
- *
- * Some UCharIterator implementations may not be able to return
- * a valid state for each position, in which case they return UITER_NO_STATE instead.
- * This will be clearly documented for each such iterator (none of the public ones here).
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @return the state word
- *
- * @see UCharIterator
- * @see UCharIteratorGetState
- * @see UITER_NO_STATE
- * @stable ICU 2.6
- */
-U_STABLE uint32_t U_EXPORT2
-uiter_getState(const UCharIterator *iter);
-
-/**
- * Restore the "state" of the iterator using a state word from a getState() call.
- * This is a convenience function that calls iter->setState(iter, state, pErrorCode)
- * if iter->setState is not NULL; if it is NULL, then U_UNSUPPORTED_ERROR is set.
- *
- * @param iter the UCharIterator structure ("this pointer")
- * @param state the state word from a getState() call
- *              on a same-type, same-string iterator
- * @param pErrorCode Must be a valid pointer to an error code value,
- *                   which must not indicate a failure before the function call.
- *
- * @see UCharIterator
- * @see UCharIteratorSetState
- * @stable ICU 2.6
- */
-U_STABLE void U_EXPORT2
-uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode);
-
-/**
- * Set up a UCharIterator to iterate over a string.
- *
- * Sets the UCharIterator function pointers for iteration over the string s
- * with iteration boundaries start=index=0 and length=limit=string length.
- * The "provider" may set the start, index, and limit values at any time
- * within the range 0..length.
- * The length field will be ignored.
- *
- * The string pointer s is set into UCharIterator.context without copying
- * or reallocating the string contents.
- *
- * getState() simply returns the current index.
- * move() will always return the final index.
- *
- * @param iter UCharIterator structure to be set for iteration
- * @param s String to iterate over
- * @param length Length of s, or -1 if NUL-terminated
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-U_STABLE void U_EXPORT2
-uiter_setString(UCharIterator *iter, const UChar *s, int32_t length);
-
-/**
- * Set up a UCharIterator to iterate over a UTF-16BE string
- * (byte vector with a big-endian pair of bytes per UChar).
- *
- * Everything works just like with a normal UChar iterator (uiter_setString),
- * except that UChars are assembled from byte pairs,
- * and that the length argument here indicates an even number of bytes.
- *
- * getState() simply returns the current index.
- * move() will always return the final index.
- *
- * @param iter UCharIterator structure to be set for iteration
- * @param s UTF-16BE string to iterate over
- * @param length Length of s as an even number of bytes, or -1 if NUL-terminated
- *               (NUL means pair of 0 bytes at even index from s)
- *
- * @see UCharIterator
- * @see uiter_setString
- * @stable ICU 2.6
- */
-U_STABLE void U_EXPORT2
-uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length);
-
-/**
- * Set up a UCharIterator to iterate over a UTF-8 string.
- *
- * Sets the UCharIterator function pointers for iteration over the UTF-8 string s
- * with UTF-8 iteration boundaries 0 and length.
- * The implementation counts the UTF-16 index on the fly and
- * lazily evaluates the UTF-16 length of the text.
- *
- * The start field is used as the UTF-8 offset, the limit field as the UTF-8 length.
- * When the reservedField is not 0, then it contains a supplementary code point
- * and the UTF-16 index is between the two corresponding surrogates.
- * At that point, the UTF-8 index is behind that code point.
- *
- * The UTF-8 string pointer s is set into UCharIterator.context without copying
- * or reallocating the string contents.
- *
- * getState() returns a state value consisting of
- * - the current UTF-8 source byte index (bits 31..1)
- * - a flag (bit 0) that indicates whether the UChar position is in the middle
- *   of a surrogate pair
- *   (from a 4-byte UTF-8 sequence for the corresponding supplementary code point)
- *
- * getState() cannot also encode the UTF-16 index in the state value.
- * move(relative to limit or length), or
- * move(relative to current) after setState(), may return UITER_UNKNOWN_INDEX.
- *
- * @param iter UCharIterator structure to be set for iteration
- * @param s UTF-8 string to iterate over
- * @param length Length of s in bytes, or -1 if NUL-terminated
- *
- * @see UCharIterator
- * @stable ICU 2.6
- */
-U_STABLE void U_EXPORT2
-uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length);
-
-#if U_SHOW_CPLUSPLUS_API
-
-/**
- * Set up a UCharIterator to wrap around a C++ CharacterIterator.
- *
- * Sets the UCharIterator function pointers for iteration using the
- * CharacterIterator charIter.
- *
- * The CharacterIterator pointer charIter is set into UCharIterator.context
- * without copying or cloning the CharacterIterator object.
- * The other "protected" UCharIterator fields are set to 0 and will be ignored.
- * The iteration index and boundaries are controlled by the CharacterIterator.
- *
- * getState() simply returns the current index.
- * move() will always return the final index.
- *
- * @param iter UCharIterator structure to be set for iteration
- * @param charIter CharacterIterator to wrap
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-U_STABLE void U_EXPORT2
-uiter_setCharacterIterator(UCharIterator *iter, U_NAMESPACE_QUALIFIER CharacterIterator *charIter);
-
-/**
- * Set up a UCharIterator to iterate over a C++ Replaceable.
- *
- * Sets the UCharIterator function pointers for iteration over the
- * Replaceable rep with iteration boundaries start=index=0 and
- * length=limit=rep->length().
- * The "provider" may set the start, index, and limit values at any time
- * within the range 0..length=rep->length().
- * The length field will be ignored.
- *
- * The Replaceable pointer rep is set into UCharIterator.context without copying
- * or cloning/reallocating the Replaceable object.
- *
- * getState() simply returns the current index.
- * move() will always return the final index.
- *
- * @param iter UCharIterator structure to be set for iteration
- * @param rep Replaceable to iterate over
- *
- * @see UCharIterator
- * @stable ICU 2.1
- */
-U_STABLE void U_EXPORT2
-uiter_setReplaceable(UCharIterator *iter, const U_NAMESPACE_QUALIFIER Replaceable *rep);
-
-#endif
-
-U_CDECL_END
-
-#endif
diff --git a/source/common/unicode/uloc.h b/source/common/unicode/uloc.h
deleted file mode 100644
index 95758c3..0000000
--- a/source/common/unicode/uloc.h
+++ /dev/null
@@ -1,1126 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*
-* File ULOC.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   04/01/97    aliu        Creation.
-*   08/22/98    stephen     JDK 1.2 sync.
-*   12/08/98    rtg         New C API for Locale
-*   03/30/99    damiba      overhaul
-*   03/31/99    helena      Javadoc for uloc functions.
-*   04/15/99    Madhu       Updated Javadoc
-********************************************************************************
-*/
-
-#ifndef ULOC_H
-#define ULOC_H
-
-#include "unicode/utypes.h"
-#include "unicode/uenum.h"
-
-/**    
- * \file
- * \brief  C API: Locale 
- *
- * <h2> ULoc C API for Locale </h2>
- * A <code>Locale</code> represents a specific geographical, political,
- * or cultural region. An operation that requires a <code>Locale</code> to perform
- * its task is called <em>locale-sensitive</em> and uses the <code>Locale</code>
- * to tailor information for the user. For example, displaying a number
- * is a locale-sensitive operation--the number should be formatted
- * according to the customs/conventions of the user's native country,
- * region, or culture.  In the C APIs, a locales is simply a const char string.
- *
- * <P>
- * You create a <code>Locale</code> with one of the three options listed below.
- * Each of the component is separated by '_' in the locale string.
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * \code
- *       newLanguage
- * 
- *       newLanguage + newCountry
- * 
- *       newLanguage + newCountry + newVariant
- * \endcode
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * The first option is a valid <STRONG>ISO
- * Language Code.</STRONG> These codes are the lower-case two-letter
- * codes as defined by ISO-639.
- * You can find a full list of these codes at a number of sites, such as:
- * <BR><a href ="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">
- * http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a>
- *
- * <P>
- * The second option includes an additonal <STRONG>ISO Country
- * Code.</STRONG> These codes are the upper-case two-letter codes
- * as defined by ISO-3166.
- * You can find a full list of these codes at a number of sites, such as:
- * <BR><a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">
- * http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html</a>
- *
- * <P>
- * The third option requires another additonal information--the 
- * <STRONG>Variant.</STRONG>
- * The Variant codes are vendor and browser-specific.
- * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX.
- * Where there are two variants, separate them with an underscore, and
- * put the most important one first. For
- * example, a Traditional Spanish collation might be referenced, with
- * "ES", "ES", "Traditional_WIN".
- *
- * <P>
- * Because a <code>Locale</code> is just an identifier for a region,
- * no validity check is performed when you specify a <code>Locale</code>.
- * If you want to see whether particular resources are available for the
- * <code>Locale</code> you asked for, you must query those resources. For
- * example, ask the <code>UNumberFormat</code> for the locales it supports
- * using its <code>getAvailable</code> method.
- * <BR><STRONG>Note:</STRONG> When you ask for a resource for a particular
- * locale, you get back the best available match, not necessarily
- * precisely what you asked for. For more information, look at
- * <code>UResourceBundle</code>.
- *
- * <P>
- * The <code>Locale</code> provides a number of convenient constants
- * that you can use to specify the commonly used
- * locales. For example, the following refers to a locale
- * for the United States:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * \code
- *       ULOC_US
- * \endcode
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * <P>
- * Once you've specified a locale you can query it for information about
- * itself. Use <code>uloc_getCountry</code> to get the ISO Country Code and
- * <code>uloc_getLanguage</code> to get the ISO Language Code. You can
- * use <code>uloc_getDisplayCountry</code> to get the
- * name of the country suitable for displaying to the user. Similarly,
- * you can use <code>uloc_getDisplayLanguage</code> to get the name of
- * the language suitable for displaying to the user. Interestingly,
- * the <code>uloc_getDisplayXXX</code> methods are themselves locale-sensitive
- * and have two versions: one that uses the default locale and one
- * that takes a locale as an argument and displays the name or country in
- * a language appropriate to that locale.
- *
- * <P>
- * The ICU provides a number of services that perform locale-sensitive
- * operations. For example, the <code>unum_xxx</code> functions format
- * numbers, currency, or percentages in a locale-sensitive manner. 
- * </P>
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     UNumberFormat *nf;
- *     const char* myLocale = "fr_FR";
- * 
- *     nf = unum_open( UNUM_DEFAULT, NULL, success );          
- *     unum_close(nf);
- *     nf = unum_open( UNUM_CURRENCY, NULL, success );
- *     unum_close(nf);
- *     nf = unum_open( UNUM_PERCENT, NULL, success );   
- *     unum_close(nf);
- * \endcode
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * Each of these methods has two variants; one with an explicit locale
- * and one without; the latter using the default locale.
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * \code 
- * 
- *     nf = unum_open( UNUM_DEFAULT, myLocale, success );          
- *     unum_close(nf);
- *     nf = unum_open( UNUM_CURRENCY, myLocale, success );
- *     unum_close(nf);
- *     nf = unum_open( UNUM_PERCENT, myLocale, success );   
- *     unum_close(nf);
- * \endcode
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * A <code>Locale</code> is the mechanism for identifying the kind of services
- * (<code>UNumberFormat</code>) that you would like to get. The locale is
- * <STRONG>just</STRONG> a mechanism for identifying these services.
- *
- * <P>
- * Each international serivce that performs locale-sensitive operations 
- * allows you
- * to get all the available objects of that type. You can sift
- * through these objects by language, country, or variant,
- * and use the display names to present a menu to the user.
- * For example, you can create a menu of all the collation objects
- * suitable for a given language. Such classes implement these
- * three class methods:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * \code
- *       const char* uloc_getAvailable(int32_t index);
- *       int32_t uloc_countAvailable();
- *       int32_t
- *       uloc_getDisplayName(const char* localeID,
- *                 const char* inLocaleID, 
- *                 UChar* result,
- *                 int32_t maxResultSize,
- *                  UErrorCode* err);
- * 
- * \endcode
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * <P>
- * Concerning POSIX/RFC1766 Locale IDs, 
- *  the getLanguage/getCountry/getVariant/getName functions do understand
- * the POSIX type form of  language_COUNTRY.ENCODING\@VARIANT
- * and if there is not an ICU-stype variant, uloc_getVariant() for example
- * will return the one listed after the \@at sign. As well, the hyphen
- * "-" is recognized as a country/variant separator similarly to RFC1766.
- * So for example, "en-us" will be interpreted as en_US.  
- * As a result, uloc_getName() is far from a no-op, and will have the
- * effect of converting POSIX/RFC1766 IDs into ICU form, although it does
- * NOT map any of the actual codes (i.e. russian->ru) in any way.
- * Applications should call uloc_getName() at the point where a locale ID
- * is coming from an external source (user entry, OS, web browser)
- * and pass the resulting string to other ICU functions.  For example,
- * don't use de-de\@EURO as an argument to resourcebundle.
- *
- * @see UResourceBundle
- */
-
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_CHINESE            "zh"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_ENGLISH            "en"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_FRENCH             "fr"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_GERMAN             "de"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_ITALIAN            "it"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_JAPANESE           "ja"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_KOREAN             "ko"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_SIMPLIFIED_CHINESE "zh_CN"
-/** Useful constant for this language. @stable ICU 2.0 */
-#define ULOC_TRADITIONAL_CHINESE "zh_TW"
-
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_CANADA         "en_CA"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_CANADA_FRENCH  "fr_CA"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_CHINA          "zh_CN"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_PRC            "zh_CN"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_FRANCE         "fr_FR"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_GERMANY        "de_DE"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_ITALY          "it_IT"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_JAPAN          "ja_JP"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_KOREA          "ko_KR"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_TAIWAN         "zh_TW"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_UK             "en_GB"
-/** Useful constant for this country/region. @stable ICU 2.0 */
-#define ULOC_US             "en_US"
-
-/**
- * Useful constant for the maximum size of the language part of a locale ID.
- * (including the terminating NULL).
- * @stable ICU 2.0
- */
-#define ULOC_LANG_CAPACITY 12
-
-/**
- * Useful constant for the maximum size of the country part of a locale ID
- * (including the terminating NULL).
- * @stable ICU 2.0
- */
-#define ULOC_COUNTRY_CAPACITY 4
-/**
- * Useful constant for the maximum size of the whole locale ID
- * (including the terminating NULL and all keywords).
- * @stable ICU 2.0
- */
-#define ULOC_FULLNAME_CAPACITY 157
-
-/**
- * Useful constant for the maximum size of the script part of a locale ID
- * (including the terminating NULL).
- * @stable ICU 2.8
- */
-#define ULOC_SCRIPT_CAPACITY 6
-
-/**
- * Useful constant for the maximum size of keywords in a locale
- * @stable ICU 2.8
- */
-#define ULOC_KEYWORDS_CAPACITY 50
-
-/**
- * Useful constant for the maximum total size of keywords and their values in a locale
- * @stable ICU 2.8
- */
-#define ULOC_KEYWORD_AND_VALUES_CAPACITY 100
-
-/**
- * Invariant character separating keywords from the locale string
- * @stable ICU 2.8
- */
-#define ULOC_KEYWORD_SEPARATOR '@'
-
-/**
-  * Unicode code point for '@' separating keywords from the locale string.
-  * @see ULOC_KEYWORD_SEPARATOR
-  * @draft ICU 4.6
-  */
-#define ULOC_KEYWORD_SEPARATOR_UNICODE 0x40
-
-/**
- * Invariant character for assigning value to a keyword
- * @stable ICU 2.8
- */
-#define ULOC_KEYWORD_ASSIGN '='
-
-/**
-  * Unicode code point for '=' for assigning value to a keyword.
-  * @see ULOC_KEYWORD_ASSIGN
-  * @draft ICU 4.6 
-  */
-#define ULOC_KEYWORD_ASSIGN_UNICODE 0x3D
-
-/**
- * Invariant character separating keywords
- * @stable ICU 2.8
- */
-#define ULOC_KEYWORD_ITEM_SEPARATOR ';'
-
-/**
-  * Unicode code point for ';' separating keywords
-  * @see ULOC_KEYWORD_ITEM_SEPARATOR
-  * @draft ICU 4.6
-  */
-#define ULOC_KEYWORD_ITEM_SEPARATOR_UNICODE 0x3B
-
-/**
- * Constants for *_getLocale()
- * Allow user to select whether she wants information on 
- * requested, valid or actual locale.
- * For example, a collator for "en_US_CALIFORNIA" was
- * requested. In the current state of ICU (2.0), 
- * the requested locale is "en_US_CALIFORNIA",
- * the valid locale is "en_US" (most specific locale supported by ICU)
- * and the actual locale is "root" (the collation data comes unmodified 
- * from the UCA)
- * The locale is considered supported by ICU if there is a core ICU bundle 
- * for that locale (although it may be empty).
- * @stable ICU 2.1
- */
-typedef enum {
-  /** This is locale the data actually comes from 
-   * @stable ICU 2.1
-   */
-  ULOC_ACTUAL_LOCALE    = 0,
-  /** This is the most specific locale supported by ICU 
-   * @stable ICU 2.1
-   */
-  ULOC_VALID_LOCALE    = 1,
-
-#ifndef U_HIDE_DEPRECATED_API
-  /** This is the requested locale
-   *  @deprecated ICU 2.8 
-   */
-  ULOC_REQUESTED_LOCALE = 2,
-#endif /* U_HIDE_DEPRECATED_API */
-
-  ULOC_DATA_LOCALE_TYPE_LIMIT = 3
-} ULocDataLocaleType ;
-
-
-/**
- * Gets ICU's default locale.  
- * The returned string is a snapshot in time, and will remain valid
- *   and unchanged even when uloc_setDefault() is called.
- *   The returned storage is owned by ICU, and must not be altered or deleted
- *   by the caller.
- *  
- * @return the ICU default locale
- * @system
- * @stable ICU 2.0
- */
-U_STABLE const char* U_EXPORT2
-uloc_getDefault(void);
-
-/**
- * Sets ICU's default locale.  
- *    By default (without calling this function), ICU's default locale will be based
- *    on information obtained from the underlying system environment.
- *    <p>
- *    Changes to ICU's default locale do not propagate back to the
- *    system environment.
- *    <p>
- *    Changes to ICU's default locale to not affect any ICU services that
- *    may already be open based on the previous default locale value.
- *
- * @param localeID the new ICU default locale. A value of NULL will try to get
- *                 the system's default locale.
- * @param status the error information if the setting of default locale fails
- * @system
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-uloc_setDefault(const char* localeID,
-        UErrorCode*       status);
-
-/**
- * Gets the language code for the specified locale.
- *
- * @param localeID the locale to get the ISO language code with
- * @param language the language code for localeID
- * @param languageCapacity the size of the language buffer to store the  
- * language code with
- * @param err error information if retrieving the language code failed
- * @return the actual buffer size needed for the language code.  If it's greater 
- * than languageCapacity, the returned language code will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getLanguage(const char*    localeID,
-         char* language,
-         int32_t languageCapacity,
-         UErrorCode* err);
-
-/**
- * Gets the script code for the specified locale.
- *
- * @param localeID the locale to get the ISO language code with
- * @param script the language code for localeID
- * @param scriptCapacity the size of the language buffer to store the  
- * language code with
- * @param err error information if retrieving the language code failed
- * @return the actual buffer size needed for the language code.  If it's greater 
- * than scriptCapacity, the returned language code will be truncated.  
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getScript(const char*    localeID,
-         char* script,
-         int32_t scriptCapacity,
-         UErrorCode* err);
-
-/**
- * Gets the  country code for the specified locale.
- *
- * @param localeID the locale to get the country code with
- * @param country the country code for localeID
- * @param countryCapacity the size of the country buffer to store the  
- * country code with
- * @param err error information if retrieving the country code failed
- * @return the actual buffer size needed for the country code.  If it's greater 
- * than countryCapacity, the returned country code will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getCountry(const char*    localeID,
-        char* country,
-        int32_t countryCapacity,
-        UErrorCode* err);
-
-/**
- * Gets the variant code for the specified locale.
- *
- * @param localeID the locale to get the variant code with
- * @param variant the variant code for localeID
- * @param variantCapacity the size of the variant buffer to store the 
- * variant code with
- * @param err error information if retrieving the variant code failed
- * @return the actual buffer size needed for the variant code.  If it's greater 
- * than variantCapacity, the returned variant code will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getVariant(const char*    localeID,
-        char* variant,
-        int32_t variantCapacity,
-        UErrorCode* err);
-
-
-/**
- * Gets the full name for the specified locale.
- * Note: This has the effect of 'canonicalizing' the ICU locale ID to
- * a certain extent. Upper and lower case are set as needed.
- * It does NOT map aliased names in any way.
- * See the top of this header file.
- * This API supports preflighting.
- *
- * @param localeID the locale to get the full name with
- * @param name fill in buffer for the name without keywords.
- * @param nameCapacity capacity of the fill in buffer.
- * @param err error information if retrieving the full name failed
- * @return the actual buffer size needed for the full name.  If it's greater 
- * than nameCapacity, the returned full name will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getName(const char*    localeID,
-         char* name,
-         int32_t nameCapacity,
-         UErrorCode* err);
-
-/**
- * Gets the full name for the specified locale.
- * Note: This has the effect of 'canonicalizing' the string to
- * a certain extent. Upper and lower case are set as needed,
- * and if the components were in 'POSIX' format they are changed to
- * ICU format.  It does NOT map aliased names in any way.
- * See the top of this header file.
- *
- * @param localeID the locale to get the full name with
- * @param name the full name for localeID
- * @param nameCapacity the size of the name buffer to store the 
- * full name with
- * @param err error information if retrieving the full name failed
- * @return the actual buffer size needed for the full name.  If it's greater 
- * than nameCapacity, the returned full name will be truncated.  
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_canonicalize(const char*    localeID,
-         char* name,
-         int32_t nameCapacity,
-         UErrorCode* err);
-
-/**
- * Gets the ISO language code for the specified locale.
- *
- * @param localeID the locale to get the ISO language code with
- * @return language the ISO language code for localeID
- * @stable ICU 2.0
- */
-U_STABLE const char* U_EXPORT2
-uloc_getISO3Language(const char* localeID);
-
-
-/**
- * Gets the ISO country code for the specified locale.
- *
- * @param localeID the locale to get the ISO country code with
- * @return country the ISO country code for localeID
- * @stable ICU 2.0
- */
-U_STABLE const char* U_EXPORT2
-uloc_getISO3Country(const char* localeID);
-
-/**
- * Gets the Win32 LCID value for the specified locale.
- * If the ICU locale is not recognized by Windows, 0 will be returned.
- *
- * @param localeID the locale to get the Win32 LCID value with
- * @return country the Win32 LCID for localeID
- * @stable ICU 2.0
- */
-U_STABLE uint32_t U_EXPORT2
-uloc_getLCID(const char* localeID);
-
-/**
- * Gets the language name suitable for display for the specified locale.
- *
- * @param locale the locale to get the ISO language code with
- * @param displayLocale Specifies the locale to be used to display the name.  In other words,
- *                 if the locale's language code is "en", passing Locale::getFrench() for
- *                 inLocale would result in "Anglais", while passing Locale::getGerman()
- *                 for inLocale would result in "Englisch".
- * @param language the displayable language code for localeID
- * @param languageCapacity the size of the language buffer to store the  
- * displayable language code with
- * @param status error information if retrieving the displayable language code failed
- * @return the actual buffer size needed for the displayable language code.  If it's greater 
- * than languageCapacity, the returned language code will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayLanguage(const char* locale,
-            const char* displayLocale,
-            UChar* language,
-            int32_t languageCapacity,
-            UErrorCode* status);
-
-/**
- * Gets the script name suitable for display for the specified locale.
- *
- * @param locale the locale to get the displayable script code with. NULL may be used to specify the default.
- * @param displayLocale Specifies the locale to be used to display the name.  In other words,
- *                 if the locale's language code is "en", passing Locale::getFrench() for
- *                 inLocale would result in "", while passing Locale::getGerman()
- *                 for inLocale would result in "". NULL may be used to specify the default.
- * @param script the displayable country code for localeID
- * @param scriptCapacity the size of the script buffer to store the  
- * displayable script code with
- * @param status error information if retrieving the displayable script code failed
- * @return the actual buffer size needed for the displayable script code.  If it's greater 
- * than scriptCapacity, the returned displayable script code will be truncated.  
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayScript(const char* locale,
-            const char* displayLocale,
-            UChar* script,
-            int32_t scriptCapacity,
-            UErrorCode* status);
-
-/**
- * Gets the country name suitable for display for the specified locale.
- *
- * @param locale the locale to get the displayable country code with. NULL may be used to specify the default.
- * @param displayLocale Specifies the locale to be used to display the name.  In other words,
- *                 if the locale's language code is "en", passing Locale::getFrench() for
- *                 inLocale would result in "Anglais", while passing Locale::getGerman()
- *                 for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param country the displayable country code for localeID
- * @param countryCapacity the size of the country buffer to store the  
- * displayable country code with
- * @param status error information if retrieving the displayable country code failed
- * @return the actual buffer size needed for the displayable country code.  If it's greater 
- * than countryCapacity, the returned displayable country code will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayCountry(const char* locale,
-                       const char* displayLocale,
-                       UChar* country,
-                       int32_t countryCapacity,
-                       UErrorCode* status);
-
-
-/**
- * Gets the variant name suitable for display for the specified locale.
- *
- * @param locale the locale to get the displayable variant code with. NULL may be used to specify the default.
- * @param displayLocale Specifies the locale to be used to display the name.  In other words,
- *                 if the locale's language code is "en", passing Locale::getFrench() for
- *                 inLocale would result in "Anglais", while passing Locale::getGerman()
- *                 for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param variant the displayable variant code for localeID
- * @param variantCapacity the size of the variant buffer to store the 
- * displayable variant code with
- * @param status error information if retrieving the displayable variant code failed
- * @return the actual buffer size needed for the displayable variant code.  If it's greater 
- * than variantCapacity, the returned displayable variant code will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayVariant(const char* locale,
-                       const char* displayLocale,
-                       UChar* variant,
-                       int32_t variantCapacity,
-                       UErrorCode* status);
-
-/**
- * Gets the keyword name suitable for display for the specified locale.
- * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display 
- * string for the keyword collation. 
- * Usage:
- * <code>
- *    UErrorCode status = U_ZERO_ERROR;
- *    const char* keyword =NULL;
- *    int32_t keywordLen = 0;
- *    int32_t keywordCount = 0;
- *    UChar displayKeyword[256];
- *    int32_t displayKeywordLen = 0;
- *    UEnumeration* keywordEnum = uloc_openKeywords("de_DE@collation=PHONEBOOK;calendar=TRADITIONAL", &status);
- *    for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){
- *          if(U_FAILURE(status)){
- *              ...something went wrong so handle the error...
- *              break;
- *          }
- *          // the uenum_next returns NUL terminated string
- *          keyword = uenum_next(keywordEnum, &keywordLen, &status);
- *          displayKeywordLen = uloc_getDisplayKeyword(keyword, "en_US", displayKeyword, 256);
- *          ... do something interesting .....
- *    }
- *    uenum_close(keywordEnum);
- * </code>
- * @param keyword           The keyword whose display string needs to be returned.
- * @param displayLocale     Specifies the locale to be used to display the name.  In other words,
- *                          if the locale's language code is "en", passing Locale::getFrench() for
- *                          inLocale would result in "Anglais", while passing Locale::getGerman()
- *                          for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param dest              the buffer to which the displayable keyword should be written.
- * @param destCapacity      The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param status            error information if retrieving the displayable string failed. 
- *                          Should not be NULL and should not indicate failure on entry.
- * @return the actual buffer size needed for the displayable variant code.  
- * @see #uloc_openKeywords
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayKeyword(const char* keyword,
-                       const char* displayLocale,
-                       UChar* dest,
-                       int32_t destCapacity,
-                       UErrorCode* status);
-/**
- * Gets the value of the keyword suitable for display for the specified locale.
- * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display 
- * string for PHONEBOOK, in the display locale, when "collation" is specified as the keyword.
- *
- * @param locale            The locale to get the displayable variant code with. NULL may be used to specify the default.
- * @param keyword           The keyword for whose value should be used.
- * @param displayLocale     Specifies the locale to be used to display the name.  In other words,
- *                          if the locale's language code is "en", passing Locale::getFrench() for
- *                          inLocale would result in "Anglais", while passing Locale::getGerman()
- *                          for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param dest              the buffer to which the displayable keyword should be written.
- * @param destCapacity      The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param status            error information if retrieving the displayable string failed. 
- *                          Should not be NULL and must not indicate failure on entry.
- * @return the actual buffer size needed for the displayable variant code.  
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayKeywordValue(   const char* locale,
-                               const char* keyword,
-                               const char* displayLocale,
-                               UChar* dest,
-                               int32_t destCapacity,
-                               UErrorCode* status);
-/**
- * Gets the full name suitable for display for the specified locale.
- *
- * @param localeID the locale to get the displayable name with. NULL may be used to specify the default.
- * @param inLocaleID Specifies the locale to be used to display the name.  In other words,
- *                   if the locale's language code is "en", passing Locale::getFrench() for
- *                   inLocale would result in "Anglais", while passing Locale::getGerman()
- *                   for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param result the displayable name for localeID
- * @param maxResultSize the size of the name buffer to store the 
- * displayable full name with
- * @param err error information if retrieving the displayable name failed
- * @return the actual buffer size needed for the displayable name.  If it's greater 
- * than maxResultSize, the returned displayable name will be truncated.  
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getDisplayName(const char* localeID,
-            const char* inLocaleID,
-            UChar* result,
-            int32_t maxResultSize,
-            UErrorCode* err);
-
-
-/**
- * Gets the specified locale from a list of all available locales.  
- * The return value is a pointer to an item of 
- * a locale name array.  Both this array and the pointers
- * it contains are owned by ICU and should not be deleted or written through
- * by the caller.  The locale name is terminated by a null pointer.
- * @param n the specific locale name index of the available locale list
- * @return a specified locale name of all available locales
- * @stable ICU 2.0
- */
-U_STABLE const char* U_EXPORT2
-uloc_getAvailable(int32_t n);
-
-/**
- * Gets the size of the all available locale list.
- *
- * @return the size of the locale list
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 uloc_countAvailable(void);
-
-/**
- *
- * Gets a list of all available language codes defined in ISO 639.  This is a pointer
- * to an array of pointers to arrays of char.  All of these pointers are owned
- * by ICU-- do not delete them, and do not write through them.  The array is
- * terminated with a null pointer.
- * @return a list of all available language codes
- * @stable ICU 2.0
- */
-U_STABLE const char* const* U_EXPORT2
-uloc_getISOLanguages(void);
-
-/**
- *
- * Gets a list of all available 2-letter country codes defined in ISO 639.  This is a
- * pointer to an array of pointers to arrays of char.  All of these pointers are
- * owned by ICU-- do not delete them, and do not write through them.  The array is
- * terminated with a null pointer.
- * @return a list of all available country codes
- * @stable ICU 2.0
- */
-U_STABLE const char* const* U_EXPORT2
-uloc_getISOCountries(void);
-
-/**
- * Truncate the locale ID string to get the parent locale ID.
- * Copies the part of the string before the last underscore.
- * The parent locale ID will be an empty string if there is no
- * underscore, or if there is only one underscore at localeID[0].
- *
- * @param localeID Input locale ID string.
- * @param parent   Output string buffer for the parent locale ID.
- * @param parentCapacity Size of the output buffer.
- * @param err A UErrorCode value.
- * @return The length of the parent locale ID.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getParent(const char*    localeID,
-                 char* parent,
-                 int32_t parentCapacity,
-                 UErrorCode* err);
-
-
-
-
-/**
- * Gets the full name for the specified locale.
- * Note: This has the effect of 'canonicalizing' the string to
- * a certain extent. Upper and lower case are set as needed,
- * and if the components were in 'POSIX' format they are changed to
- * ICU format.  It does NOT map aliased names in any way.
- * See the top of this header file.
- * This API strips off the keyword part, so "de_DE\@collation=phonebook" 
- * will become "de_DE". 
- * This API supports preflighting.
- *
- * @param localeID the locale to get the full name with
- * @param name fill in buffer for the name without keywords.
- * @param nameCapacity capacity of the fill in buffer.
- * @param err error information if retrieving the full name failed
- * @return the actual buffer size needed for the full name.  If it's greater 
- * than nameCapacity, the returned full name will be truncated.  
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getBaseName(const char*    localeID,
-         char* name,
-         int32_t nameCapacity,
-         UErrorCode* err);
-
-/**
- * Gets an enumeration of keywords for the specified locale. Enumeration
- * must get disposed of by the client using uenum_close function.
- *
- * @param localeID the locale to get the variant code with
- * @param status error information if retrieving the keywords failed
- * @return enumeration of keywords or NULL if there are no keywords.
- * @stable ICU 2.8
- */
-U_STABLE UEnumeration* U_EXPORT2
-uloc_openKeywords(const char* localeID,
-                        UErrorCode* status);
-
-/**
- * Get the value for a keyword. Locale name does not need to be normalized.
- * 
- * @param localeID locale name containing the keyword ("de_DE@currency=EURO;collation=PHONEBOOK")
- * @param keywordName name of the keyword for which we want the value. Case insensitive.
- * @param buffer receiving buffer
- * @param bufferCapacity capacity of receiving buffer
- * @param status containing error code - buffer not big enough.
- * @return the length of keyword value
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getKeywordValue(const char* localeID,
-                     const char* keywordName,
-                     char* buffer, int32_t bufferCapacity,
-                     UErrorCode* status);
-
-
-/**
- * Set the value of the specified keyword.
- * NOTE: Unlike almost every other ICU function which takes a
- * buffer, this function will NOT truncate the output text. If a
- * BUFFER_OVERFLOW_ERROR is received, it means that the original
- * buffer is untouched. This is done to prevent incorrect or possibly
- * even malformed locales from being generated and used.
- * 
- * @param keywordName name of the keyword to be set. Case insensitive.
- * @param keywordValue value of the keyword to be set. If 0-length or
- *  NULL, will result in the keyword being removed. No error is given if 
- *  that keyword does not exist.
- * @param buffer input buffer containing locale to be modified.
- * @param bufferCapacity capacity of receiving buffer
- * @param status containing error code - buffer not big enough.
- * @return the length needed for the buffer
- * @see uloc_getKeywordValue
- * @stable ICU 3.2
- */
-U_STABLE int32_t U_EXPORT2
-uloc_setKeywordValue(const char* keywordName,
-                     const char* keywordValue,
-                     char* buffer, int32_t bufferCapacity,
-                     UErrorCode* status);
-
-/**
- * enums for the  return value for the character and line orientation
- * functions.
- * @stable ICU 4.0
- */
-typedef enum {
-  ULOC_LAYOUT_LTR   = 0,  /* left-to-right. */
-  ULOC_LAYOUT_RTL    = 1,  /* right-to-left. */
-  ULOC_LAYOUT_TTB    = 2,  /* top-to-bottom. */
-  ULOC_LAYOUT_BTT    = 3,   /* bottom-to-top. */
-  ULOC_LAYOUT_UNKNOWN
-} ULayoutType;
-
-/**
- * Get the layout character orientation for the specified locale.
- * 
- * @param localeId locale name
- * @param status Error status
- * @return an enum indicating the layout orientation for characters.
- * @stable ICU 4.0
- */
-U_STABLE ULayoutType U_EXPORT2
-uloc_getCharacterOrientation(const char* localeId,
-                             UErrorCode *status);
-
-/**
- * Get the layout line orientation for the specified locale.
- * 
- * @param localeId locale name
- * @param status Error status
- * @return an enum indicating the layout orientation for lines.
- * @stable ICU 4.0
- */
-U_STABLE ULayoutType U_EXPORT2
-uloc_getLineOrientation(const char* localeId,
-                        UErrorCode *status);
-
-/**
- * enums for the 'outResult' parameter return value
- * @see uloc_acceptLanguageFromHTTP
- * @see uloc_acceptLanguage
- * @stable ICU 3.2
- */
-typedef enum {
-  ULOC_ACCEPT_FAILED   = 0,  /* No exact match was found. */
-  ULOC_ACCEPT_VALID    = 1,  /* An exact match was found. */
-  ULOC_ACCEPT_FALLBACK = 2   /* A fallback was found, for example, 
-                                Accept list contained 'ja_JP'
-                                which matched available locale 'ja'. */
-} UAcceptResult;
-
-
-/**
- * Based on a HTTP header from a web browser and a list of available locales,
- * determine an acceptable locale for the user.
- * @param result - buffer to accept the result locale
- * @param resultAvailable the size of the result buffer.
- * @param outResult - An out parameter that contains the fallback status
- * @param httpAcceptLanguage - "Accept-Language:" header as per HTTP.
- * @param availableLocales - list of available locales to match
- * @param status Error status, may be BUFFER_OVERFLOW_ERROR
- * @return length needed for the locale.
- * @stable ICU 3.2
- */
-U_STABLE int32_t U_EXPORT2
-uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable,
-                            UAcceptResult *outResult,
-                            const char *httpAcceptLanguage,
-                            UEnumeration* availableLocales,
-                            UErrorCode *status);
-
-/**
- * Based on a list of available locales,
- * determine an acceptable locale for the user.
- * @param result - buffer to accept the result locale
- * @param resultAvailable the size of the result buffer.
- * @param outResult - An out parameter that contains the fallback status
- * @param acceptList - list of acceptable languages
- * @param acceptListCount - count of acceptList items
- * @param availableLocales - list of available locales to match
- * @param status Error status, may be BUFFER_OVERFLOW_ERROR
- * @return length needed for the locale.
- * @stable ICU 3.2
- */
-U_STABLE int32_t U_EXPORT2
-uloc_acceptLanguage(char *result, int32_t resultAvailable, 
-                    UAcceptResult *outResult, const char **acceptList,
-                    int32_t acceptListCount,
-                    UEnumeration* availableLocales,
-                    UErrorCode *status);
-
-
-/**
- * Gets the ICU locale ID for the specified Win32 LCID value.
- *
- * @param hostID the Win32 LCID to translate
- * @param locale the output buffer for the ICU locale ID, which will be NUL-terminated
- *  if there is room.
- * @param localeCapacity the size of the output buffer
- * @param status an error is returned if the LCID is unrecognized or the output buffer
- *  is too small
- * @return actual the actual size of the locale ID, not including NUL-termination 
- * @stable ICU 3.8
- */
-U_STABLE int32_t U_EXPORT2
-uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity,
-                    UErrorCode *status);
-
-
-/**
- * Add the likely subtags for a provided locale ID, per the algorithm described
- * in the following CLDR technical report:
- *
- *   http://www.unicode.org/reports/tr35/#Likely_Subtags
- *
- * If localeID is already in the maximal form, or there is no data available
- * for maximization, it will be copied to the output buffer.  For example,
- * "und-Zzzz" cannot be maximized, since there is no reasonable maximization.
- *
- * Examples:
- *
- * "en" maximizes to "en_Latn_US"
- *
- * "de" maximizes to "de_Latn_US"
- *
- * "sr" maximizes to "sr_Cyrl_RS"
- *
- * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.)
- *
- * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.)
- *
- * @param localeID The locale to maximize
- * @param maximizedLocaleID The maximized locale
- * @param maximizedLocaleIDCapacity The capacity of the maximizedLocaleID buffer
- * @param err Error information if maximizing the locale failed.  If the length
- * of the localeID and the null-terminator is greater than the maximum allowed size,
- * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
- * @return The actual buffer size needed for the maximized locale.  If it's
- * greater than maximizedLocaleIDCapacity, the returned ID will be truncated.
- * On error, the return value is -1.
- * @stable ICU 4.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_addLikelySubtags(const char*    localeID,
-         char* maximizedLocaleID,
-         int32_t maximizedLocaleIDCapacity,
-         UErrorCode* err);
-
-
-/**
- * Minimize the subtags for a provided locale ID, per the algorithm described
- * in the following CLDR technical report:
- *
- *   http://www.unicode.org/reports/tr35/#Likely_Subtags
- *
- * If localeID is already in the minimal form, or there is no data available
- * for minimization, it will be copied to the output buffer.  Since the
- * minimization algorithm relies on proper maximization, see the comments
- * for uloc_addLikelySubtags for reasons why there might not be any data.
- *
- * Examples:
- *
- * "en_Latn_US" minimizes to "en"
- *
- * "de_Latn_US" minimizes to "de"
- *
- * "sr_Cyrl_RS" minimizes to "sr"
- *
- * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the
- * script, and minimizing to "zh" would imply "zh_Hans_CN".)
- *
- * @param localeID The locale to minimize
- * @param minimizedLocaleID The minimized locale
- * @param minimizedLocaleIDCapacity The capacity of the minimizedLocaleID buffer
- * @param err Error information if minimizing the locale failed.  If the length
- * of the localeID and the null-terminator is greater than the maximum allowed size,
- * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
- * @return The actual buffer size needed for the minimized locale.  If it's
- * greater than minimizedLocaleIDCapacity, the returned ID will be truncated.
- * On error, the return value is -1.
- * @stable ICU 4.0
- */
-U_STABLE int32_t U_EXPORT2
-uloc_minimizeSubtags(const char*    localeID,
-         char* minimizedLocaleID,
-         int32_t minimizedLocaleIDCapacity,
-         UErrorCode* err);
-
-/** 
- * Returns a locale ID for the specified BCP47 language tag string.
- * If the specified language tag contains any ill-formed subtags,
- * the first such subtag and all following subtags are ignored.
- * <p> 
- * This implements the 'Language-Tag' production of BCP47, and so
- * supports grandfathered (regular and irregular) as well as private
- * use language tags.  Private use tags are represented as 'x-whatever',
- * and grandfathered tags are converted to their canonical replacements
- * where they exist.  Note that a few grandfathered tags have no modern
- * replacement, these will be converted using the fallback described in
- * the first paragraph, so some information might be lost.
- * @param langtag   the input BCP47 language tag.
- * @param localeID  the output buffer receiving a locale ID for the
- *                  specified BCP47 language tag.
- * @param localeIDCapacity  the size of the locale ID output buffer.
- * @param parsedLength  if not NULL, succsessfully parsed length
- *                      for the input language tag is set.
- * @param err       error information if receiving the locald ID
- *                  failed.
- * @return          the length of the locale ID.
- * @draft ICU 4.2
- */
-U_DRAFT int32_t U_EXPORT2
-uloc_forLanguageTag(const char* langtag,
-                    char* localeID,
-                    int32_t localeIDCapacity,
-                    int32_t* parsedLength,
-                    UErrorCode* err);
-
-/** 
- * Returns a well-formed language tag for this locale ID. 
- * <p> 
- * <b>Note</b>: When <code>strict</code> is FALSE, any locale
- * fields which do not satisfy the BCP47 syntax requirement will
- * be omitted from the result.  When <code>strict</code> is
- * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the
- * <code>err</code> if any locale fields do not satisfy the
- * BCP47 syntax requirement.
- * @param localeID  the input lcoale ID
- * @param langtag   the output buffer receiving BCP47 language
- *                  tag for the locale ID.
- * @param langtagCapacity   the size of the BCP47 language tag
- *                          output buffer.
- * @param strict    boolean value indicating if the function returns
- *                  an error for an ill-formed input locale ID.
- * @param err       error information if receiving the language
- *                  tag failed.
- * @return          The length of the BCP47 language tag.
- * @draft ICU 4.2
- */
-U_DRAFT int32_t U_EXPORT2
-uloc_toLanguageTag(const char* localeID,
-                   char* langtag,
-                   int32_t langtagCapacity,
-                   UBool strict,
-                   UErrorCode* err);
-
-#endif /*_ULOC*/
diff --git a/source/common/unicode/umachine.h b/source/common/unicode/umachine.h
deleted file mode 100644
index abbdcb7..0000000
--- a/source/common/unicode/umachine.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  umachine.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999sep13
-*   created by: Markus W. Scherer
-*
-*   This file defines basic types and constants for utf.h to be
-*   platform-independent. umachine.h and utf.h are included into
-*   utypes.h to provide all the general definitions for ICU.
-*   All of these definitions used to be in utypes.h before
-*   the UTF-handling macros made this unmaintainable.
-*/
-
-#ifndef __UMACHINE_H__
-#define __UMACHINE_H__
-
-
-/**
- * \file
- * \brief Basic types and constants for UTF
- *
- * <h2> Basic types and constants for UTF </h2>
- *   This file defines basic types and constants for utf.h to be
- *   platform-independent. umachine.h and utf.h are included into
- *   utypes.h to provide all the general definitions for ICU.
- *   All of these definitions used to be in utypes.h before
- *   the UTF-handling macros made this unmaintainable.
- *
- */
-/*==========================================================================*/
-/* Include platform-dependent definitions                                   */
-/* which are contained in the platform-specific file platform.h             */
-/*==========================================================================*/
-
-#if defined(U_PALMOS)
-#   include "unicode/ppalmos.h"
-#elif !defined(__MINGW32__) && (defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64))
-#ifdef CYGWINMSVC
-#   include "unicode/platform.h"
-#endif
-#   include "unicode/pwin32.h"
-#else
-#   include "unicode/ptypes.h" /* platform.h is included in ptypes.h */
-#endif
-
-/*
- * ANSI C headers:
- * stddef.h defines wchar_t
- */
-#include <stddef.h>
-
-/*==========================================================================*/
-/* XP_CPLUSPLUS is a cross-platform symbol which should be defined when     */
-/* using C++.  It should not be defined when compiling under C.             */
-/*==========================================================================*/
-
-#ifdef __cplusplus
-#   ifndef XP_CPLUSPLUS
-#       define XP_CPLUSPLUS
-#   endif
-#else
-#   undef XP_CPLUSPLUS
-#endif
-
-/*==========================================================================*/
-/* For C wrappers, we use the symbol U_STABLE.                                */
-/* This works properly if the includer is C or C++.                         */
-/* Functions are declared   U_STABLE return-type U_EXPORT2 function-name()... */
-/*==========================================================================*/
-
-/**
- * \def U_CFUNC
- * This is used in a declaration of a library private ICU C function.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_CDECL_BEGIN
- * This is used to begin a declaration of a library private ICU C API.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_CDECL_END
- * This is used to end a declaration of a library private ICU C API
- * @stable ICU 2.4
- */
-
-#ifdef XP_CPLUSPLUS
-#   define U_CFUNC extern "C"
-#   define U_CDECL_BEGIN extern "C" {
-#   define U_CDECL_END   }
-#else
-#   define U_CFUNC extern
-#   define U_CDECL_BEGIN
-#   define U_CDECL_END
-#endif
-
-/**
- * \def U_ATTRIBUTE_DEPRECATED
- *  This is used for GCC specific attributes
- * @internal
- */
-#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2))
-#    define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
-/**
- * \def U_ATTRIBUTE_DEPRECATED
- * This is used for Visual C++ specific attributes 
- * @internal
- */
-#elif defined(U_WINDOWS) && defined(_MSC_VER) && (_MSC_VER >= 1400)
-#    define U_ATTRIBUTE_DEPRECATED __declspec(deprecated)
-#else
-#    define U_ATTRIBUTE_DEPRECATED
-#endif
-/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/
-#define U_CAPI U_CFUNC U_EXPORT
-/** This is used to declare a function as a stable public ICU C API*/
-#define U_STABLE U_CAPI
-/** This is used to declare a function as a draft public ICU C API  */
-#define U_DRAFT  U_CAPI
-/** This is used to declare a function as a deprecated public ICU C API  */
-#define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED
-/** This is used to declare a function as an obsolete public ICU C API  */
-#define U_OBSOLETE U_CAPI
-/** This is used to declare a function as an internal ICU C API  */
-#define U_INTERNAL U_CAPI
-
-/*==========================================================================*/
-/* limits for int32_t etc., like in POSIX inttypes.h                        */
-/*==========================================================================*/
-
-#ifndef INT8_MIN
-/** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */
-#   define INT8_MIN        ((int8_t)(-128))
-#endif
-#ifndef INT16_MIN
-/** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */
-#   define INT16_MIN       ((int16_t)(-32767-1))
-#endif
-#ifndef INT32_MIN
-/** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */
-#   define INT32_MIN       ((int32_t)(-2147483647-1))
-#endif
-
-#ifndef INT8_MAX
-/** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */
-#   define INT8_MAX        ((int8_t)(127))
-#endif
-#ifndef INT16_MAX
-/** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */
-#   define INT16_MAX       ((int16_t)(32767))
-#endif
-#ifndef INT32_MAX
-/** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */
-#   define INT32_MAX       ((int32_t)(2147483647))
-#endif
-
-#ifndef UINT8_MAX
-/** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */
-#   define UINT8_MAX       ((uint8_t)(255U))
-#endif
-#ifndef UINT16_MAX
-/** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */
-#   define UINT16_MAX      ((uint16_t)(65535U))
-#endif
-#ifndef UINT32_MAX
-/** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */
-#   define UINT32_MAX      ((uint32_t)(4294967295U))
-#endif
-
-#if defined(U_INT64_T_UNAVAILABLE)
-# error int64_t is required for decimal format and rule-based number format.
-#else
-# ifndef INT64_C
-/**
- * Provides a platform independent way to specify a signed 64-bit integer constant.
- * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C
- * @stable ICU 2.8
- */
-#   define INT64_C(c) c ## LL
-# endif
-# ifndef UINT64_C
-/**
- * Provides a platform independent way to specify an unsigned 64-bit integer constant.
- * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C
- * @stable ICU 2.8
- */
-#   define UINT64_C(c) c ## ULL
-# endif
-# ifndef U_INT64_MIN
-/** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */
-#     define U_INT64_MIN       ((int64_t)(INT64_C(-9223372036854775807)-1))
-# endif
-# ifndef U_INT64_MAX
-/** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */
-#     define U_INT64_MAX       ((int64_t)(INT64_C(9223372036854775807)))
-# endif
-# ifndef U_UINT64_MAX
-/** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */
-#     define U_UINT64_MAX      ((uint64_t)(UINT64_C(18446744073709551615)))
-# endif
-#endif
-
-/*==========================================================================*/
-/* Boolean data type                                                        */
-/*==========================================================================*/
-
-/** The ICU boolean type @stable ICU 2.0 */
-typedef int8_t UBool;
-
-#ifndef TRUE
-/** The TRUE value of a UBool @stable ICU 2.0 */
-#   define TRUE  1
-#endif
-#ifndef FALSE
-/** The FALSE value of a UBool @stable ICU 2.0 */
-#   define FALSE 0
-#endif
-
-
-/*==========================================================================*/
-/* Unicode data types                                                       */
-/*==========================================================================*/
-
-/* wchar_t-related definitions -------------------------------------------- */
-
-/**
- * \def U_HAVE_WCHAR_H
- * Indicates whether <wchar.h> is available (1) or not (0). Set to 1 by default.
- *
- * @stable ICU 2.0
- */
-#ifndef U_HAVE_WCHAR_H
-#   define U_HAVE_WCHAR_H 1
-#endif
-
-/**
- * \def U_SIZEOF_WCHAR_T
- * U_SIZEOF_WCHAR_T==sizeof(wchar_t) (0 means it is not defined or autoconf could not set it)
- *
- * @stable ICU 2.0
- */
-#if U_SIZEOF_WCHAR_T==0
-#   undef U_SIZEOF_WCHAR_T
-#   define U_SIZEOF_WCHAR_T 4
-#endif
-
-/*
- * \def U_WCHAR_IS_UTF16
- * Defined if wchar_t uses UTF-16.
- *
- * @stable ICU 2.0
- */
-/*
- * \def U_WCHAR_IS_UTF32
- * Defined if wchar_t uses UTF-32.
- *
- * @stable ICU 2.0
- */
-#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32)
-#   ifdef __STDC_ISO_10646__
-#       if (U_SIZEOF_WCHAR_T==2)
-#           define U_WCHAR_IS_UTF16
-#       elif (U_SIZEOF_WCHAR_T==4)
-#           define  U_WCHAR_IS_UTF32
-#       endif
-#   elif defined __UCS2__
-#       if (__OS390__ || __OS400__) && (U_SIZEOF_WCHAR_T==2)
-#           define U_WCHAR_IS_UTF16
-#       endif
-#   elif defined __UCS4__
-#       if (U_SIZEOF_WCHAR_T==4)
-#           define U_WCHAR_IS_UTF32
-#       endif
-#   elif defined(U_WINDOWS)
-#       define U_WCHAR_IS_UTF16
-#   endif
-#endif
-
-/* UChar and UChar32 definitions -------------------------------------------- */
-
-/** Number of bytes in a UChar. @stable ICU 2.0 */
-#define U_SIZEOF_UCHAR 2
-
-/**
- * \var UChar
- * Define UChar to be wchar_t if that is 16 bits wide; always assumed to be unsigned.
- * If wchar_t is not 16 bits wide, then define UChar to be uint16_t or char16_t because GCC >=4.4
- * can handle UTF16 string literals.
- * This makes the definition of UChar platform-dependent
- * but allows direct string type compatibility with platforms with
- * 16-bit wchar_t types.
- *
- * @draft ICU 4.4
- */
-
-/* Define UChar to be compatible with wchar_t if possible. */
-#if U_SIZEOF_WCHAR_T==2
-    typedef wchar_t UChar;
-#elif U_GNUC_UTF16_STRING
-#if defined _GCC_
-    typedef __CHAR16_TYPE__ char16_t;
-#endif
-    typedef char16_t UChar;
-#else
-    typedef uint16_t UChar;
-#endif
-
-/**
- * Define UChar32 as a type for single Unicode code points.
- * UChar32 is a signed 32-bit integer (same as int32_t).
- *
- * The Unicode code point range is 0..0x10ffff.
- * All other values (negative or >=0x110000) are illegal as Unicode code points.
- * They may be used as sentinel values to indicate "done", "error"
- * or similar non-code point conditions.
- *
- * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined
- * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned)
- * or else to be uint32_t.
- * That is, the definition of UChar32 was platform-dependent.
- *
- * @see U_SENTINEL
- * @stable ICU 2.4
- */
-typedef int32_t UChar32;
-
-/*==========================================================================*/
-/* U_INLINE and U_ALIGN_CODE   Set default values if these are not already  */
-/*                             defined.  Definitions normally are in        */
-/*                             platform.h or the corresponding file for     */
-/*                             the OS in use.                               */
-/*==========================================================================*/
-
-#ifndef U_HIDE_INTERNAL_API
-
-/**
- * \def U_ALIGN_CODE
- * This is used to align code fragments to a specific byte boundary.
- * This is useful for getting consistent performance test results.
- * @internal
- */
-#ifndef U_ALIGN_CODE
-#   define U_ALIGN_CODE(n)
-#endif
-
-#endif /* U_HIDE_INTERNAL_API */
-
-/**
- * \def U_INLINE
- * This is used to request inlining of a function, on platforms and languages which support it.
- */
- 
-#ifndef U_INLINE
-#   ifdef XP_CPLUSPLUS
-#       define U_INLINE inline
-#   else
-#       define U_INLINE
-#   endif
-#endif
-
-#include "unicode/urename.h"
-
-#endif
diff --git a/source/common/unicode/umisc.h b/source/common/unicode/umisc.h
deleted file mode 100644
index d85451f..0000000
--- a/source/common/unicode/umisc.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1999-2006, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   file name:  umisc.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999oct15
-*   created by: Markus W. Scherer
-*/
-
-#ifndef UMISC_H
-#define UMISC_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief  C API:misc definitions 
- *
- *  This file contains miscellaneous definitions for the C APIs. 
- */
-
-U_CDECL_BEGIN
-
-/** A struct representing a range of text containing a specific field 
- *  @stable ICU 2.0
- */
-typedef struct UFieldPosition {
-  /**
-   * The field 
-   * @stable ICU 2.0
-   */
-  int32_t field;
-  /**
-   * The start of the text range containing field 
-   * @stable ICU 2.0
-   */
-  int32_t beginIndex;
-  /** 
-   * The limit of the text range containing field 
-   * @stable ICU 2.0
-   */
-  int32_t endIndex;
-} UFieldPosition;
-
-#if !UCONFIG_NO_SERVICE
-/**
- * Opaque type returned by registerInstance, registerFactory and unregister for service registration.
- * @stable ICU 2.6
- */
-typedef const void* URegistryKey;
-#endif
-
-U_CDECL_END
-
-#endif
diff --git a/source/common/unicode/unifilt.h b/source/common/unicode/unifilt.h
deleted file mode 100644
index ce952af..0000000
--- a/source/common/unicode/unifilt.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-**********************************************************************
-* Copyright (C) 1999-2010, International Business Machines Corporation and others.
-* All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   11/17/99    aliu        Creation.
-**********************************************************************
-*/
-#ifndef UNIFILT_H
-#define UNIFILT_H
-
-#include "unicode/unifunct.h"
-#include "unicode/unimatch.h"
-
-/**
- * \file 
- * \brief C++ API: Unicode Filter
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * U_ETHER is used to represent character values for positions outside
- * a range.  For example, transliterator uses this to represent
- * characters outside the range contextStart..contextLimit-1.  This
- * allows explicit matching by rules and UnicodeSets of text outside a
- * defined range.
- * @stable ICU 3.0
- */
-#define U_ETHER ((UChar)0xFFFF)
-
-/**
- *
- * <code>UnicodeFilter</code> defines a protocol for selecting a
- * subset of the full range (U+0000 to U+10FFFF) of Unicode characters.
- * Currently, filters are used in conjunction with classes like {@link
- * Transliterator} to only process selected characters through a
- * transformation.
- *
- * <p>Note: UnicodeFilter currently stubs out two pure virtual methods
- * of its base class, UnicodeMatcher.  These methods are toPattern()
- * and matchesIndexValue().  This is done so that filter classes that
- * are not actually used as matchers -- specifically, those in the
- * UnicodeFilterLogic component, and those in tests -- can continue to
- * work without defining these methods.  As long as a filter is not
- * used in an RBT during real transliteration, these methods will not
- * be called.  However, this breaks the UnicodeMatcher base class
- * protocol, and it is not a correct solution.
- *
- * <p>In the future we may revisit the UnicodeMatcher / UnicodeFilter
- * hierarchy and either redesign it, or simply remove the stubs in
- * UnicodeFilter and force subclasses to implement the full
- * UnicodeMatcher protocol.
- *
- * @see UnicodeFilterLogic
- * @stable ICU 2.0
- */
-class U_COMMON_API UnicodeFilter : public UnicodeFunctor, public UnicodeMatcher {
-
-public:
-    /**
-     * Destructor
-     * @stable ICU 2.0
-     */
-    virtual ~UnicodeFilter();
-
-    /**
-     * Returns <tt>true</tt> for characters that are in the selected
-     * subset.  In other words, if a character is <b>to be
-     * filtered</b>, then <tt>contains()</tt> returns
-     * <b><tt>false</tt></b>.
-     * @stable ICU 2.0
-     */
-    virtual UBool contains(UChar32 c) const = 0;
-
-    /**
-     * UnicodeFunctor API.  Cast 'this' to a UnicodeMatcher* pointer
-     * and return the pointer.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeMatcher* toMatcher() const;
-
-    /**
-     * Implement UnicodeMatcher API.
-     * @stable ICU 2.4
-     */
-    virtual UMatchDegree matches(const Replaceable& text,
-                                 int32_t& offset,
-                                 int32_t limit,
-                                 UBool incremental);
-
-    /**
-     * UnicodeFunctor API.  Nothing to do.
-     * @stable ICU 2.4
-     */
-    virtual void setData(const TransliterationRuleData*);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-protected:
-
-    /*
-     * Since this class has pure virtual functions,
-     * a constructor can't be used.
-     * @stable ICU 2.0
-     */
-/*    UnicodeFilter();*/
-};
-
-/*inline UnicodeFilter::UnicodeFilter() {}*/
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/unifunct.h b/source/common/unicode/unifunct.h
deleted file mode 100644
index 3aa7b03..0000000
--- a/source/common/unicode/unifunct.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (c) 2002-2005, International Business Machines Corporation
-*   and others.  All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   01/14/2002  aliu        Creation.
-**********************************************************************
-*/
-#ifndef UNIFUNCT_H
-#define UNIFUNCT_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
-/**
- * \file 
- * \brief C++ API: Unicode Functor
- */
- 
-U_NAMESPACE_BEGIN
-
-class UnicodeMatcher;
-class UnicodeReplacer;
-class TransliterationRuleData;
-
-/**
- * <code>UnicodeFunctor</code> is an abstract base class for objects
- * that perform match and/or replace operations on Unicode strings.
- * @author Alan Liu
- * @stable ICU 2.4
- */
-class U_COMMON_API UnicodeFunctor : public UObject {
-
-public:
-
-    /**
-     * Destructor
-     * @stable ICU 2.4
-     */
-    virtual ~UnicodeFunctor();
-
-    /**
-     * Return a copy of this object.  All UnicodeFunctor objects
-     * have to support cloning in order to allow classes using
-     * UnicodeFunctor to implement cloning.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeFunctor* clone() const = 0;
-
-    /**
-     * Cast 'this' to a UnicodeMatcher* pointer and return the
-     * pointer, or null if this is not a UnicodeMatcher*.  Subclasses
-     * that mix in UnicodeMatcher as a base class must override this.
-     * This protocol is required because a pointer to a UnicodeFunctor
-     * cannot be cast to a pointer to a UnicodeMatcher, since
-     * UnicodeMatcher is a mixin that does not derive from
-     * UnicodeFunctor.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeMatcher* toMatcher() const;
-
-    /**
-     * Cast 'this' to a UnicodeReplacer* pointer and return the
-     * pointer, or null if this is not a UnicodeReplacer*.  Subclasses
-     * that mix in UnicodeReplacer as a base class must override this.
-     * This protocol is required because a pointer to a UnicodeFunctor
-     * cannot be cast to a pointer to a UnicodeReplacer, since
-     * UnicodeReplacer is a mixin that does not derive from
-     * UnicodeFunctor.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeReplacer* toReplacer() const;
-
-    /**
-     * Return the class ID for this class.  This is useful only for
-     * comparing to a return value from getDynamicClassID().
-     * @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 <b>polymorphically</b>.  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.
-     *
-     * <p>Concrete subclasses of UnicodeFunctor should use the macro
-     *    UOBJECT_DEFINE_RTTI_IMPLEMENTATION from uobject.h to
-     *    provide definitios getStaticClassID and getDynamicClassID.
-     *
-     * @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.4
-     */
-    virtual UClassID getDynamicClassID(void) const = 0;
-
-    /**
-     * Set the data object associated with this functor.  The data
-     * object provides context for functor-to-standin mapping.  This
-     * method is required when assigning a functor to a different data
-     * object.  This function MAY GO AWAY later if the architecture is
-     * changed to pass data object pointers through the API.
-     * @internal ICU 2.1
-     */
-    virtual void setData(const TransliterationRuleData*) = 0;
-
-protected:
-
-    /**
-     * Since this class has pure virtual functions,
-     * a constructor can't be used.
-     * @stable ICU 2.0
-     */
-    /*UnicodeFunctor();*/
-
-};
-
-/*inline UnicodeFunctor::UnicodeFunctor() {}*/
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/unimatch.h b/source/common/unicode/unimatch.h
deleted file mode 100644
index 0dbb14e..0000000
--- a/source/common/unicode/unimatch.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-* Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   07/18/01    aliu        Creation.
-**********************************************************************
-*/
-#ifndef UNIMATCH_H
-#define UNIMATCH_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Unicode Matcher
- */
-
-
-U_NAMESPACE_BEGIN
-
-class Replaceable;
-class UnicodeString;
-class UnicodeSet;
-
-/**
- * Constants returned by <code>UnicodeMatcher::matches()</code>
- * indicating the degree of match.
- * @stable ICU 2.4
- */
-enum UMatchDegree {
-    /**
-     * Constant returned by <code>matches()</code> indicating a
-     * mismatch between the text and this matcher.  The text contains
-     * a character which does not match, or the text does not contain
-     * all desired characters for a non-incremental match.
-     * @stable ICU 2.4
-     */
-    U_MISMATCH,
-    
-    /**
-     * Constant returned by <code>matches()</code> indicating a
-     * partial match between the text and this matcher.  This value is
-     * only returned for incremental match operations.  All characters
-     * of the text match, but more characters are required for a
-     * complete match.  Alternatively, for variable-length matchers,
-     * all characters of the text match, and if more characters were
-     * supplied at limit, they might also match.
-     * @stable ICU 2.4
-     */
-    U_PARTIAL_MATCH,
-    
-    /**
-     * Constant returned by <code>matches()</code> indicating a
-     * complete match between the text and this matcher.  For an
-     * incremental variable-length match, this value is returned if
-     * the given text matches, and it is known that additional
-     * characters would not alter the extent of the match.
-     * @stable ICU 2.4
-     */
-    U_MATCH
-};
-
-/**
- * <code>UnicodeMatcher</code> defines a protocol for objects that can
- * match a range of characters in a Replaceable string.
- * @stable ICU 2.4
- */
-class U_COMMON_API UnicodeMatcher /* not : public UObject because this is an interface/mixin class */ {
-
-public:
-    /**
-     * Destructor.
-     * @stable ICU 2.4
-     */
-    virtual ~UnicodeMatcher();
-
-    /**
-     * Return a UMatchDegree value indicating the degree of match for
-     * the given text at the given offset.  Zero, one, or more
-     * characters may be matched.
-     *
-     * Matching in the forward direction is indicated by limit >
-     * offset.  Characters from offset forwards to limit-1 will be
-     * considered for matching.
-     * 
-     * Matching in the reverse direction is indicated by limit <
-     * offset.  Characters from offset backwards to limit+1 will be
-     * considered for matching.
-     *
-     * If limit == offset then the only match possible is a zero
-     * character match (which subclasses may implement if desired).
-     *
-     * As a side effect, advance the offset parameter to the limit of
-     * the matched substring.  In the forward direction, this will be
-     * the index of the last matched character plus one.  In the
-     * reverse direction, this will be the index of the last matched
-     * character minus one.
-     *
-     * <p>Note:  This method is not const because some classes may
-     * modify their state as the result of a match.
-     *
-     * @param text the text to be matched
-     * @param offset on input, the index into text at which to begin
-     * matching.  On output, the limit of the matched text.  The
-     * number of matched characters is the output value of offset
-     * minus the input value.  Offset should always point to the
-     * HIGH SURROGATE (leading code unit) of a pair of surrogates,
-     * both on entry and upon return.
-     * @param limit the limit index of text to be matched.  Greater
-     * than offset for a forward direction match, less than offset for
-     * a backward direction match.  The last character to be
-     * considered for matching will be text.charAt(limit-1) in the
-     * forward direction or text.charAt(limit+1) in the backward
-     * direction.
-     * @param incremental if TRUE, then assume further characters may
-     * be inserted at limit and check for partial matching.  Otherwise
-     * assume the text as given is complete.
-     * @return a match degree value indicating a full match, a partial
-     * match, or a mismatch.  If incremental is FALSE then
-     * U_PARTIAL_MATCH should never be returned.
-     * @stable ICU 2.4
-     */
-    virtual UMatchDegree matches(const Replaceable& text,
-                                 int32_t& offset,
-                                 int32_t limit,
-                                 UBool incremental) = 0;
-
-    /**
-     * Returns a string representation of this matcher.  If the result of
-     * calling this function is passed to the appropriate parser, it
-     * will produce another matcher that is equal to this one.
-     * @param result the string to receive the pattern.  Previous
-     * contents will be deleted.
-     * @param escapeUnprintable if TRUE then convert unprintable
-     * character to their hex escape representations, \\uxxxx or
-     * \\Uxxxxxxxx.  Unprintable characters are those other than
-     * U+000A, U+0020..U+007E.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeString& toPattern(UnicodeString& result,
-                                     UBool escapeUnprintable = FALSE) const = 0;
-
-    /**
-     * Returns TRUE if this matcher will match a character c, where c
-     * & 0xFF == v, at offset, in the forward direction (with limit >
-     * offset).  This is used by <tt>RuleBasedTransliterator</tt> for
-     * indexing.
-     * @stable ICU 2.4
-     */
-    virtual UBool matchesIndexValue(uint8_t v) const = 0;
-
-    /**
-     * Union the set of all characters that may be matched by this object
-     * into the given set.
-     * @param toUnionTo the set into which to union the source characters
-     * @stable ICU 2.4
-     */
-    virtual void addMatchSetTo(UnicodeSet& toUnionTo) const = 0;
-};
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/uniset.h b/source/common/unicode/uniset.h
deleted file mode 100644
index c5fe0ef..0000000
--- a/source/common/unicode/uniset.h
+++ /dev/null
@@ -1,1673 +0,0 @@
-/*
-***************************************************************************
-* Copyright (C) 1999-2010, International Business Machines Corporation
-* and others. All Rights Reserved.
-***************************************************************************
-*   Date        Name        Description
-*   10/20/99    alan        Creation.
-***************************************************************************
-*/
-
-#ifndef UNICODESET_H
-#define UNICODESET_H
-
-#include "unicode/unifilt.h"
-#include "unicode/unistr.h"
-#include "unicode/uset.h"
-
-/**
- * \file
- * \brief C++ API: Unicode Set
- */
-
-U_NAMESPACE_BEGIN
-
-class BMPSet;
-class ParsePosition;
-class SymbolTable;
-class UnicodeSetStringSpan;
-class UVector;
-class RuleCharacterIterator;
-
-/**
- * A mutable set of Unicode characters and multicharacter strings.  Objects of this class
- * represent <em>character classes</em> used in regular expressions.
- * A character specifies a subset of Unicode code points.  Legal
- * code points are U+0000 to U+10FFFF, inclusive.
- *
- * <p>The UnicodeSet class is not designed to be subclassed.
- *
- * <p><code>UnicodeSet</code> supports two APIs. The first is the
- * <em>operand</em> API that allows the caller to modify the value of
- * a <code>UnicodeSet</code> object. It conforms to Java 2's
- * <code>java.util.Set</code> interface, although
- * <code>UnicodeSet</code> does not actually implement that
- * interface. All methods of <code>Set</code> are supported, with the
- * modification that they take a character range or single character
- * instead of an <code>Object</code>, and they take a
- * <code>UnicodeSet</code> instead of a <code>Collection</code>.  The
- * operand API may be thought of in terms of boolean logic: a boolean
- * OR is implemented by <code>add</code>, a boolean AND is implemented
- * by <code>retain</code>, a boolean XOR is implemented by
- * <code>complement</code> taking an argument, and a boolean NOT is
- * implemented by <code>complement</code> with no argument.  In terms
- * of traditional set theory function names, <code>add</code> is a
- * union, <code>retain</code> is an intersection, <code>remove</code>
- * is an asymmetric difference, and <code>complement</code> with no
- * argument is a set complement with respect to the superset range
- * <code>MIN_VALUE-MAX_VALUE</code>
- *
- * <p>The second API is the
- * <code>applyPattern()</code>/<code>toPattern()</code> API from the
- * <code>java.text.Format</code>-derived classes.  Unlike the
- * methods that add characters, add categories, and control the logic
- * of the set, the method <code>applyPattern()</code> sets all
- * attributes of a <code>UnicodeSet</code> at once, based on a
- * string pattern.
- *
- * <p><b>Pattern syntax</b></p>
- *
- * Patterns are accepted by the constructors and the
- * <code>applyPattern()</code> methods and returned by the
- * <code>toPattern()</code> method.  These patterns follow a syntax
- * similar to that employed by version 8 regular expression character
- * classes.  Here are some simple examples:
- *
- * \htmlonly<blockquote>\endhtmlonly
- *   <table>
- *     <tr align="top">
- *       <td nowrap valign="top" align="left"><code>[]</code></td>
- *       <td valign="top">No characters</td>
- *     </tr><tr align="top">
- *       <td nowrap valign="top" align="left"><code>[a]</code></td>
- *       <td valign="top">The character 'a'</td>
- *     </tr><tr align="top">
- *       <td nowrap valign="top" align="left"><code>[ae]</code></td>
- *       <td valign="top">The characters 'a' and 'e'</td>
- *     </tr>
- *     <tr>
- *       <td nowrap valign="top" align="left"><code>[a-e]</code></td>
- *       <td valign="top">The characters 'a' through 'e' inclusive, in Unicode code
- *       point order</td>
- *     </tr>
- *     <tr>
- *       <td nowrap valign="top" align="left"><code>[\\u4E01]</code></td>
- *       <td valign="top">The character U+4E01</td>
- *     </tr>
- *     <tr>
- *       <td nowrap valign="top" align="left"><code>[a{ab}{ac}]</code></td>
- *       <td valign="top">The character 'a' and the multicharacter strings &quot;ab&quot; and
- *       &quot;ac&quot;</td>
- *     </tr>
- *     <tr>
- *       <td nowrap valign="top" align="left"><code>[\\p{Lu}]</code></td>
- *       <td valign="top">All characters in the general category Uppercase Letter</td>
- *     </tr>
- *   </table>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * Any character may be preceded by a backslash in order to remove any special
- * meaning.  White space characters, as defined by UCharacter.isWhitespace(), are
- * ignored, unless they are escaped.
- *
- * <p>Property patterns specify a set of characters having a certain
- * property as defined by the Unicode standard.  Both the POSIX-like
- * "[:Lu:]" and the Perl-like syntax "\\p{Lu}" are recognized.  For a
- * complete list of supported property patterns, see the User's Guide
- * for UnicodeSet at
- * <a href="http://icu-project.org/userguide/unicodeSet.html">
- * http://icu-project.org/userguide/unicodeSet.html</a>.
- * Actual determination of property data is defined by the underlying
- * Unicode database as implemented by UCharacter.
- *
- * <p>Patterns specify individual characters, ranges of characters, and
- * Unicode property sets.  When elements are concatenated, they
- * specify their union.  To complement a set, place a '^' immediately
- * after the opening '['.  Property patterns are inverted by modifying
- * their delimiters; "[:^foo]" and "\\P{foo}".  In any other location,
- * '^' has no special meaning.
- *
- * <p>Ranges are indicated by placing two a '-' between two
- * characters, as in "a-z".  This specifies the range of all
- * characters from the left to the right, in Unicode order.  If the
- * left character is greater than or equal to the
- * right character it is a syntax error.  If a '-' occurs as the first
- * character after the opening '[' or '[^', or if it occurs as the
- * last character before the closing ']', then it is taken as a
- * literal.  Thus "[a\-b]", "[-ab]", and "[ab-]" all indicate the same
- * set of three characters, 'a', 'b', and '-'.
- *
- * <p>Sets may be intersected using the '&' operator or the asymmetric
- * set difference may be taken using the '-' operator, for example,
- * "[[:L:]&[\\u0000-\\u0FFF]]" indicates the set of all Unicode letters
- * with values less than 4096.  Operators ('&' and '|') have equal
- * precedence and bind left-to-right.  Thus
- * "[[:L:]-[a-z]-[\\u0100-\\u01FF]]" is equivalent to
- * "[[[:L:]-[a-z]]-[\\u0100-\\u01FF]]".  This only really matters for
- * difference; intersection is commutative.
- *
- * <table>
- * <tr valign=top><td nowrap><code>[a]</code><td>The set containing 'a'
- * <tr valign=top><td nowrap><code>[a-z]</code><td>The set containing 'a'
- * through 'z' and all letters in between, in Unicode order
- * <tr valign=top><td nowrap><code>[^a-z]</code><td>The set containing
- * all characters but 'a' through 'z',
- * that is, U+0000 through 'a'-1 and 'z'+1 through U+10FFFF
- * <tr valign=top><td nowrap><code>[[<em>pat1</em>][<em>pat2</em>]]</code>
- * <td>The union of sets specified by <em>pat1</em> and <em>pat2</em>
- * <tr valign=top><td nowrap><code>[[<em>pat1</em>]&[<em>pat2</em>]]</code>
- * <td>The intersection of sets specified by <em>pat1</em> and <em>pat2</em>
- * <tr valign=top><td nowrap><code>[[<em>pat1</em>]-[<em>pat2</em>]]</code>
- * <td>The asymmetric difference of sets specified by <em>pat1</em> and
- * <em>pat2</em>
- * <tr valign=top><td nowrap><code>[:Lu:] or \\p{Lu}</code>
- * <td>The set of characters having the specified
- * Unicode property; in
- * this case, Unicode uppercase letters
- * <tr valign=top><td nowrap><code>[:^Lu:] or \\P{Lu}</code>
- * <td>The set of characters <em>not</em> having the given
- * Unicode property
- * </table>
- *
- * <p><b>Warning</b>: you cannot add an empty string ("") to a UnicodeSet.</p>
- *
- * <p><b>Formal syntax</b></p>
- *
- * \htmlonly<blockquote>\endhtmlonly
- *   <table>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>pattern :=&nbsp; </code></td>
- *       <td valign="top"><code>('[' '^'? item* ']') |
- *       property</code></td>
- *     </tr>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>item :=&nbsp; </code></td>
- *       <td valign="top"><code>char | (char '-' char) | pattern-expr<br>
- *       </code></td>
- *     </tr>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>pattern-expr :=&nbsp; </code></td>
- *       <td valign="top"><code>pattern | pattern-expr pattern |
- *       pattern-expr op pattern<br>
- *       </code></td>
- *     </tr>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>op :=&nbsp; </code></td>
- *       <td valign="top"><code>'&amp;' | '-'<br>
- *       </code></td>
- *     </tr>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>special :=&nbsp; </code></td>
- *       <td valign="top"><code>'[' | ']' | '-'<br>
- *       </code></td>
- *     </tr>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>char :=&nbsp; </code></td>
- *       <td valign="top"><em>any character that is not</em><code> special<br>
- *       | ('\' </code><em>any character</em><code>)<br>
- *       | ('\\u' hex hex hex hex)<br>
- *       </code></td>
- *     </tr>
- *     <tr align="top">
- *       <td nowrap valign="top" align="right"><code>hex :=&nbsp; </code></td>
- *       <td valign="top"><em>any character for which
- *       </em><code>Character.digit(c, 16)</code><em>
- *       returns a non-negative result</em></td>
- *     </tr>
- *     <tr>
- *       <td nowrap valign="top" align="right"><code>property :=&nbsp; </code></td>
- *       <td valign="top"><em>a Unicode property set pattern</em></td>
- *     </tr>
- *   </table>
- *   <br>
- *   <table border="1">
- *     <tr>
- *       <td>Legend: <table>
- *         <tr>
- *           <td nowrap valign="top"><code>a := b</code></td>
- *           <td width="20" valign="top">&nbsp; </td>
- *           <td valign="top"><code>a</code> may be replaced by <code>b</code> </td>
- *         </tr>
- *         <tr>
- *           <td nowrap valign="top"><code>a?</code></td>
- *           <td valign="top"></td>
- *           <td valign="top">zero or one instance of <code>a</code><br>
- *           </td>
- *         </tr>
- *         <tr>
- *           <td nowrap valign="top"><code>a*</code></td>
- *           <td valign="top"></td>
- *           <td valign="top">one or more instances of <code>a</code><br>
- *           </td>
- *         </tr>
- *         <tr>
- *           <td nowrap valign="top"><code>a | b</code></td>
- *           <td valign="top"></td>
- *           <td valign="top">either <code>a</code> or <code>b</code><br>
- *           </td>
- *         </tr>
- *         <tr>
- *           <td nowrap valign="top"><code>'a'</code></td>
- *           <td valign="top"></td>
- *           <td valign="top">the literal string between the quotes </td>
- *         </tr>
- *       </table>
- *       </td>
- *     </tr>
- *   </table>
- * \htmlonly</blockquote>\endhtmlonly
- * 
- * <p>Note:
- *  - Most UnicodeSet 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 UnicodeSet into a "bogus" state
- *   (see isBogus()) if an error occurs.
- *
- * @author Alan Liu
- * @stable ICU 2.0
- */
-class U_COMMON_API UnicodeSet : public UnicodeFilter {
-
-    int32_t len; // length of list used; 0 <= len <= capacity
-    int32_t capacity; // capacity of list
-    UChar32* list; // MUST be terminated with HIGH
-    BMPSet *bmpSet; // The set is frozen iff either bmpSet or stringSpan is not NULL.
-    UChar32* buffer; // internal buffer, may be NULL
-    int32_t bufferCapacity; // capacity of buffer
-    int32_t patLen;
-
-    /**
-     * The pattern representation of this set.  This may not be the
-     * most economical pattern.  It is the pattern supplied to
-     * applyPattern(), with variables substituted and whitespace
-     * removed.  For sets constructed without applyPattern(), or
-     * modified using the non-pattern API, this string will be empty,
-     * indicating that toPattern() must generate a pattern
-     * representation from the inversion list.
-     */
-    UChar *pat;
-    UVector* strings; // maintained in sorted order
-    UnicodeSetStringSpan *stringSpan;
-
-private:
-    enum { // constants
-        kIsBogus = 1       // This set is bogus (i.e. not valid)
-    };
-    uint8_t fFlags;         // Bit flag (see constants above)
-public:
-    /**
-     * Determine if this object contains a valid set.
-     * A bogus set has no value. It is different from an empty set.
-     * It can be used to indicate that no set value is available.
-     *
-     * @return TRUE if the set is valid, FALSE otherwise
-     * @see setToBogus()
-     * @stable ICU 4.0
-     */
-    inline UBool isBogus(void) const;
-    
-    /**
-     * Make this UnicodeSet object invalid.
-     * The string will test TRUE with isBogus().
-     *
-     * A bogus set has no value. It is different from an empty set.
-     * It can be used to indicate that no set value is available.
-     *
-     * This utility function is used throughout the UnicodeSet
-     * implementation to indicate that a UnicodeSet operation failed,
-     * and may be used in other functions,
-     * especially but not exclusively when such functions do not
-     * take a UErrorCode for simplicity.
-     *
-     * @see isBogus()
-     * @stable ICU 4.0
-     */
-    void setToBogus();
-
-public:
-
-    enum {
-        /**
-         * Minimum value that can be stored in a UnicodeSet.
-         * @stable ICU 2.4
-         */
-        MIN_VALUE = 0,
-
-        /**
-         * Maximum value that can be stored in a UnicodeSet.
-         * @stable ICU 2.4
-         */
-        MAX_VALUE = 0x10ffff
-    };
-
-    //----------------------------------------------------------------
-    // Constructors &c
-    //----------------------------------------------------------------
-
-public:
-
-    /**
-     * Constructs an empty set.
-     * @stable ICU 2.0
-     */
-    UnicodeSet();
-
-    /**
-     * Constructs a set containing the given range. If <code>end >
-     * start</code> then an empty set is created.
-     *
-     * @param start first character, inclusive, of range
-     * @param end last character, inclusive, of range
-     * @stable ICU 2.4
-     */
-    UnicodeSet(UChar32 start, UChar32 end);
-
-    /**
-     * Constructs a set from the given pattern.  See the class
-     * description for the syntax of the pattern language.
-     * @param pattern a string specifying what characters are in the set
-     * @param status returns <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the pattern
-     * contains a syntax error.
-     * @stable ICU 2.0
-     */
-    UnicodeSet(const UnicodeString& pattern,
-               UErrorCode& status);
-
-    /**
-     * Constructs a set from the given pattern.  See the class
-     * description for the syntax of the pattern language.
-     * @param pattern a string specifying what characters are in the set
-     * @param options bitmask for options to apply to the pattern.
-     * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
-     * @param symbols a symbol table mapping variable names to values
-     * and stand-in characters to UnicodeSets; may be NULL
-     * @param status returns <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the pattern
-     * contains a syntax error.
-     * @internal
-     */
-    UnicodeSet(const UnicodeString& pattern,
-               uint32_t options,
-               const SymbolTable* symbols,
-               UErrorCode& status);
-
-    /**
-     * Constructs a set from the given pattern.  See the class description
-     * for the syntax of the pattern language.
-     * @param pattern a string specifying what characters are in the set
-     * @param pos on input, the position in pattern at which to start parsing.
-     * On output, the position after the last character parsed.
-     * @param options bitmask for options to apply to the pattern.
-     * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
-     * @param symbols a symbol table mapping variable names to values
-     * and stand-in characters to UnicodeSets; may be NULL
-     * @param status input-output error code
-     * @stable ICU 2.8
-     */
-    UnicodeSet(const UnicodeString& pattern, ParsePosition& pos,
-               uint32_t options,
-               const SymbolTable* symbols,
-               UErrorCode& status);
-
-    /**
-     * Constructs a set that is identical to the given UnicodeSet.
-     * @stable ICU 2.0
-     */
-    UnicodeSet(const UnicodeSet& o);
-
-    /**
-     * Destructs the set.
-     * @stable ICU 2.0
-     */
-    virtual ~UnicodeSet();
-
-    /**
-     * Assigns this object to be a copy of another.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    UnicodeSet& operator=(const UnicodeSet& o);
-
-    /**
-     * Compares the specified object with this set for equality.  Returns
-     * <tt>true</tt> if the two sets
-     * have the same size, and every member of the specified set is
-     * contained in this set (or equivalently, every member of this set is
-     * contained in the specified set).
-     *
-     * @param o set to be compared for equality with this set.
-     * @return <tt>true</tt> if the specified set is equal to this set.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const UnicodeSet& o) const;
-
-    /**
-     * Compares the specified object with this set for equality.  Returns
-     * <tt>true</tt> if the specified set is not equal to this set.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const UnicodeSet& o) const;
-
-    /**
-     * Returns a copy of this object.  All UnicodeFunctor objects have
-     * to support cloning in order to allow classes using
-     * UnicodeFunctors, such as Transliterator, to implement cloning.
-     * If this set is frozen, then the clone will be frozen as well.
-     * Use cloneAsThawed() for a mutable clone of a frozen set.
-     * @see cloneAsThawed
-     * @stable ICU 2.0
-     */
-    virtual UnicodeFunctor* clone() const;
-
-    /**
-     * Returns the hash code value for this set.
-     *
-     * @return the hash code value for this set.
-     * @see Object#hashCode()
-     * @stable ICU 2.0
-     */
-    virtual int32_t hashCode(void) const;
-
-    /**
-     * Get a UnicodeSet pointer from a USet
-     *
-     * @param uset a USet (the ICU plain C type for UnicodeSet)
-     * @return the corresponding UnicodeSet pointer.
-     *
-     * @stable ICU 4.2
-     */
-    inline static UnicodeSet *fromUSet(USet *uset);
-
-    /**
-     * Get a UnicodeSet pointer from a const USet
-     *
-     * @param uset a const USet (the ICU plain C type for UnicodeSet)
-     * @return the corresponding UnicodeSet pointer.
-     *
-     * @stable ICU 4.2
-     */
-    inline static const UnicodeSet *fromUSet(const USet *uset);
-    
-    /**
-     * Produce a USet * pointer for this UnicodeSet.
-     * USet is the plain C type for UnicodeSet
-     *
-     * @return a USet pointer for this UnicodeSet
-     * @stable ICU 4.2
-     */
-    inline USet *toUSet();
-
-
-    /**
-     * Produce a const USet * pointer for this UnicodeSet.
-     * USet is the plain C type for UnicodeSet
-     *
-     * @return a const USet pointer for this UnicodeSet
-     * @stable ICU 4.2
-     */
-    inline const USet * toUSet() const;
-
-
-    //----------------------------------------------------------------
-    // Freezable API
-    //----------------------------------------------------------------
-
-    /**
-     * Determines whether the set has been frozen (made immutable) or not.
-     * See the ICU4J Freezable interface for details.
-     * @return TRUE/FALSE for whether the set has been frozen
-     * @see freeze
-     * @see cloneAsThawed
-     * @stable ICU 3.8
-     */
-    inline UBool isFrozen() const;
-
-    /**
-     * Freeze the set (make it immutable).
-     * Once frozen, it cannot be unfrozen and is therefore thread-safe
-     * until it is deleted.
-     * See the ICU4J Freezable interface for details.
-     * Freezing the set may also make some operations faster, for example
-     * contains() and span().
-     * A frozen set will not be modified. (It remains frozen.)
-     * @return this set.
-     * @see isFrozen
-     * @see cloneAsThawed
-     * @stable ICU 3.8
-     */
-    UnicodeFunctor *freeze();
-
-    /**
-     * Clone the set and make the clone mutable.
-     * See the ICU4J Freezable interface for details.
-     * @return the mutable clone
-     * @see freeze
-     * @see isFrozen
-     * @stable ICU 3.8
-     */
-    UnicodeFunctor *cloneAsThawed() const;
-
-    //----------------------------------------------------------------
-    // Public API
-    //----------------------------------------------------------------
-
-    /**
-     * Make this object represent the range <code>start - end</code>.
-     * If <code>end > start</code> then this object is set to an
-     * an empty range.
-     * A frozen set will not be modified.
-     *
-     * @param start first character in the set, inclusive
-     * @param end last character in the set, inclusive
-     * @stable ICU 2.4
-     */
-    UnicodeSet& set(UChar32 start, UChar32 end);
-
-    /**
-     * Return true if the given position, in the given pattern, appears
-     * to be the start of a UnicodeSet pattern.
-     * @stable ICU 2.4
-     */
-    static UBool resemblesPattern(const UnicodeString& pattern,
-                                  int32_t pos);
-
-    /**
-     * Modifies this set to represent the set specified by the given
-     * pattern, optionally ignoring white space.  See the class
-     * description for the syntax of the pattern language.
-     * A frozen set will not be modified.
-     * @param pattern a string specifying what characters are in the set
-     * @param status returns <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the pattern
-     * contains a syntax error.
-     * <em> Empties the set passed before applying the pattern.</em>
-     * @return a reference to this
-     * @stable ICU 2.0
-     */
-    UnicodeSet& applyPattern(const UnicodeString& pattern,
-                             UErrorCode& status);
-
-    /**
-     * Modifies this set to represent the set specified by the given
-     * pattern, optionally ignoring white space.  See the class
-     * description for the syntax of the pattern language.
-     * A frozen set will not be modified.
-     * @param pattern a string specifying what characters are in the set
-     * @param options bitmask for options to apply to the pattern.
-     * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
-     * @param symbols a symbol table mapping variable names to
-     * values and stand-ins to UnicodeSets; may be NULL
-     * @param status returns <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the pattern
-     * contains a syntax error.
-     *<em> Empties the set passed before applying the pattern.</em>
-     * @return a reference to this
-     * @internal
-     */
-    UnicodeSet& applyPattern(const UnicodeString& pattern,
-                             uint32_t options,
-                             const SymbolTable* symbols,
-                             UErrorCode& status);
-
-    /**
-     * Parses the given pattern, starting at the given position.  The
-     * character at pattern.charAt(pos.getIndex()) must be '[', or the
-     * parse fails.  Parsing continues until the corresponding closing
-     * ']'.  If a syntax error is encountered between the opening and
-     * closing brace, the parse fails.  Upon return from a successful
-     * parse, the ParsePosition is updated to point to the character
-     * following the closing ']', and a StringBuffer containing a
-     * pairs list for the parsed pattern is returned.  This method calls
-     * itself recursively to parse embedded subpatterns.
-     *<em> Empties the set passed before applying the pattern.</em>
-     * A frozen set will not be modified.
-     *
-     * @param pattern the string containing the pattern to be parsed.
-     * The portion of the string from pos.getIndex(), which must be a
-     * '[', to the corresponding closing ']', is parsed.
-     * @param pos upon entry, the position at which to being parsing.
-     * The character at pattern.charAt(pos.getIndex()) must be a '['.
-     * Upon return from a successful parse, pos.getIndex() is either
-     * the character after the closing ']' of the parsed pattern, or
-     * pattern.length() if the closing ']' is the last character of
-     * the pattern string.
-     * @param options bitmask for options to apply to the pattern.
-     * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
-     * @param symbols a symbol table mapping variable names to
-     * values and stand-ins to UnicodeSets; may be NULL
-     * @param status returns <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the pattern
-     * contains a syntax error.
-     * @return a reference to this
-     * @stable ICU 2.8
-     */
-    UnicodeSet& applyPattern(const UnicodeString& pattern,
-                             ParsePosition& pos,
-                             uint32_t options,
-                             const SymbolTable* symbols,
-                             UErrorCode& status);
-
-    /**
-     * Returns a string representation of this set.  If the result of
-     * calling this function is passed to a UnicodeSet constructor, it
-     * will produce another set that is equal to this one.
-     * A frozen set will not be modified.
-     * @param result the string to receive the rules.  Previous
-     * contents will be deleted.
-     * @param escapeUnprintable if TRUE then convert unprintable
-     * character to their hex escape representations, \\uxxxx or
-     * \\Uxxxxxxxx.  Unprintable characters are those other than
-     * U+000A, U+0020..U+007E.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& toPattern(UnicodeString& result,
-                             UBool escapeUnprintable = FALSE) const;
-
-    /**
-     * Modifies this set to contain those code points which have the given value
-     * for the given binary or enumerated property, as returned by
-     * u_getIntPropertyValue.  Prior contents of this set are lost.
-     * A frozen set will not be modified.
-     *
-     * @param prop a property in the range UCHAR_BIN_START..UCHAR_BIN_LIMIT-1
-     * or UCHAR_INT_START..UCHAR_INT_LIMIT-1
-     * or UCHAR_MASK_START..UCHAR_MASK_LIMIT-1.
-     *
-     * @param value a value in the range u_getIntPropertyMinValue(prop)..
-     * u_getIntPropertyMaxValue(prop), with one exception.  If prop is
-     * UCHAR_GENERAL_CATEGORY_MASK, then value should not be a UCharCategory, but
-     * rather a mask value produced by U_GET_GC_MASK().  This allows grouped
-     * categories such as [:L:] to be represented.
-     *
-     * @param ec error code input/output parameter
-     *
-     * @return a reference to this set
-     *
-     * @stable ICU 2.4
-     */
-    UnicodeSet& applyIntPropertyValue(UProperty prop,
-                                      int32_t value,
-                                      UErrorCode& ec);
-
-    /**
-     * Modifies this set to contain those code points which have the
-     * given value for the given property.  Prior contents of this
-     * set are lost.
-     * A frozen set will not be modified.
-     *
-     * @param prop a property alias, either short or long.  The name is matched
-     * loosely.  See PropertyAliases.txt for names and a description of loose
-     * matching.  If the value string is empty, then this string is interpreted
-     * as either a General_Category value alias, a Script value alias, a binary
-     * property alias, or a special ID.  Special IDs are matched loosely and
-     * correspond to the following sets:
-     *
-     * "ANY" = [\\u0000-\\U0010FFFF],
-     * "ASCII" = [\\u0000-\\u007F],
-     * "Assigned" = [:^Cn:].
-     *
-     * @param value a value alias, either short or long.  The name is matched
-     * loosely.  See PropertyValueAliases.txt for names and a description of
-     * loose matching.  In addition to aliases listed, numeric values and
-     * canonical combining classes may be expressed numerically, e.g., ("nv",
-     * "0.5") or ("ccc", "220").  The value string may also be empty.
-     *
-     * @param ec error code input/output parameter
-     *
-     * @return a reference to this set
-     *
-     * @stable ICU 2.4
-     */
-    UnicodeSet& applyPropertyAlias(const UnicodeString& prop,
-                                   const UnicodeString& value,
-                                   UErrorCode& ec);
-
-    /**
-     * Returns the number of elements in this set (its cardinality).
-     * Note than the elements of a set may include both individual
-     * codepoints and strings.
-     *
-     * @return the number of elements in this set (its cardinality).
-     * @stable ICU 2.0
-     */
-    virtual int32_t size(void) const;
-
-    /**
-     * Returns <tt>true</tt> if this set contains no elements.
-     *
-     * @return <tt>true</tt> if this set contains no elements.
-     * @stable ICU 2.0
-     */
-    virtual UBool isEmpty(void) const;
-
-    /**
-     * Returns true if this set contains the given character.
-     * This function works faster with a frozen set.
-     * @param c character to be checked for containment
-     * @return true if the test condition is met
-     * @stable ICU 2.0
-     */
-    virtual UBool contains(UChar32 c) const;
-
-    /**
-     * Returns true if this set contains every character
-     * of the given range.
-     * @param start first character, inclusive, of the range
-     * @param end last character, inclusive, of the range
-     * @return true if the test condition is met
-     * @stable ICU 2.0
-     */
-    virtual UBool contains(UChar32 start, UChar32 end) const;
-
-    /**
-     * Returns <tt>true</tt> if this set contains the given
-     * multicharacter string.
-     * @param s string to be checked for containment
-     * @return <tt>true</tt> if this set contains the specified string
-     * @stable ICU 2.4
-     */
-    UBool contains(const UnicodeString& s) const;
-
-    /**
-     * Returns true if this set contains all the characters and strings
-     * of the given set.
-     * @param c set to be checked for containment
-     * @return true if the test condition is met
-     * @stable ICU 2.4
-     */
-    virtual UBool containsAll(const UnicodeSet& c) const;
-
-    /**
-     * Returns true if this set contains all the characters
-     * of the given string.
-     * @param s string containing characters to be checked for containment
-     * @return true if the test condition is met
-     * @stable ICU 2.4
-     */
-    UBool containsAll(const UnicodeString& s) const;
-
-    /**
-     * Returns true if this set contains none of the characters
-     * of the given range.
-     * @param start first character, inclusive, of the range
-     * @param end last character, inclusive, of the range
-     * @return true if the test condition is met
-     * @stable ICU 2.4
-     */
-    UBool containsNone(UChar32 start, UChar32 end) const;
-
-    /**
-     * Returns true if this set contains none of the characters and strings
-     * of the given set.
-     * @param c set to be checked for containment
-     * @return true if the test condition is met
-     * @stable ICU 2.4
-     */
-    UBool containsNone(const UnicodeSet& c) const;
-
-    /**
-     * Returns true if this set contains none of the characters
-     * of the given string.
-     * @param s string containing characters to be checked for containment
-     * @return true if the test condition is met
-     * @stable ICU 2.4
-     */
-    UBool containsNone(const UnicodeString& s) const;
-
-    /**
-     * Returns true if this set contains one or more of the characters
-     * in the given range.
-     * @param start first character, inclusive, of the range
-     * @param end last character, inclusive, of the range
-     * @return true if the condition is met
-     * @stable ICU 2.4
-     */
-    inline UBool containsSome(UChar32 start, UChar32 end) const;
-
-    /**
-     * Returns true if this set contains one or more of the characters
-     * and strings of the given set.
-     * @param s The set to be checked for containment
-     * @return true if the condition is met
-     * @stable ICU 2.4
-     */
-    inline UBool containsSome(const UnicodeSet& s) const;
-
-    /**
-     * Returns true if this set contains one or more of the characters
-     * of the given string.
-     * @param s string containing characters to be checked for containment
-     * @return true if the condition is met
-     * @stable ICU 2.4
-     */
-    inline UBool containsSome(const UnicodeString& s) const;
-
-    /**
-     * Returns the length of the initial substring of the input string which
-     * consists only of characters and strings that are contained in this set
-     * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
-     * or only of characters and strings that are not contained
-     * in this set (USET_SPAN_NOT_CONTAINED).
-     * See USetSpanCondition for details.
-     * Similar to the strspn() C library function.
-     * Unpaired surrogates are treated according to contains() of their surrogate code points.
-     * This function works faster with a frozen set and with a non-negative string length argument.
-     * @param s start of the string
-     * @param length of the string; can be -1 for NUL-terminated
-     * @param spanCondition specifies the containment condition
-     * @return the length of the initial substring according to the spanCondition;
-     *         0 if the start of the string does not fit the spanCondition
-     * @stable ICU 3.8
-     * @see USetSpanCondition
-     */
-    int32_t span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const;
-
-    /**
-     * Returns the end of the substring of the input string according to the USetSpanCondition.
-     * Same as <code>start+span(s.getBuffer()+start, s.length()-start, spanCondition)</code>
-     * after pinning start to 0<=start<=s.length().
-     * @param s the string
-     * @param start the start index in the string for the span operation
-     * @param spanCondition specifies the containment condition
-     * @return the exclusive end of the substring according to the spanCondition;
-     *         the substring s.tempSubStringBetween(start, end) fulfills the spanCondition
-     * @stable ICU 4.4
-     * @see USetSpanCondition
-     */
-    inline int32_t span(const UnicodeString &s, int32_t start, USetSpanCondition spanCondition) const;
-
-    /**
-     * Returns the start of the trailing substring of the input string which
-     * consists only of characters and strings that are contained in this set
-     * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
-     * or only of characters and strings that are not contained
-     * in this set (USET_SPAN_NOT_CONTAINED).
-     * See USetSpanCondition for details.
-     * Unpaired surrogates are treated according to contains() of their surrogate code points.
-     * This function works faster with a frozen set and with a non-negative string length argument.
-     * @param s start of the string
-     * @param length of the string; can be -1 for NUL-terminated
-     * @param spanCondition specifies the containment condition
-     * @return the start of the trailing substring according to the spanCondition;
-     *         the string length if the end of the string does not fit the spanCondition
-     * @stable ICU 3.8
-     * @see USetSpanCondition
-     */
-    int32_t spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const;
-
-    /**
-     * Returns the start of the substring of the input string according to the USetSpanCondition.
-     * Same as <code>spanBack(s.getBuffer(), limit, spanCondition)</code>
-     * after pinning limit to 0<=end<=s.length().
-     * @param s the string
-     * @param limit the exclusive-end index in the string for the span operation
-     *              (use s.length() or INT32_MAX for spanning back from the end of the string)
-     * @param spanCondition specifies the containment condition
-     * @return the start of the substring according to the spanCondition;
-     *         the substring s.tempSubStringBetween(start, limit) fulfills the spanCondition
-     * @stable ICU 4.4
-     * @see USetSpanCondition
-     */
-    inline int32_t spanBack(const UnicodeString &s, int32_t limit, USetSpanCondition spanCondition) const;
-
-    /**
-     * Returns the length of the initial substring of the input string which
-     * consists only of characters and strings that are contained in this set
-     * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
-     * or only of characters and strings that are not contained
-     * in this set (USET_SPAN_NOT_CONTAINED).
-     * See USetSpanCondition for details.
-     * Similar to the strspn() C library function.
-     * Malformed byte sequences are treated according to contains(0xfffd).
-     * This function works faster with a frozen set and with a non-negative string length argument.
-     * @param s start of the string (UTF-8)
-     * @param length of the string; can be -1 for NUL-terminated
-     * @param spanCondition specifies the containment condition
-     * @return the length of the initial substring according to the spanCondition;
-     *         0 if the start of the string does not fit the spanCondition
-     * @stable ICU 3.8
-     * @see USetSpanCondition
-     */
-    int32_t spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const;
-
-    /**
-     * Returns the start of the trailing substring of the input string which
-     * consists only of characters and strings that are contained in this set
-     * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
-     * or only of characters and strings that are not contained
-     * in this set (USET_SPAN_NOT_CONTAINED).
-     * See USetSpanCondition for details.
-     * Malformed byte sequences are treated according to contains(0xfffd).
-     * This function works faster with a frozen set and with a non-negative string length argument.
-     * @param s start of the string (UTF-8)
-     * @param length of the string; can be -1 for NUL-terminated
-     * @param spanCondition specifies the containment condition
-     * @return the start of the trailing substring according to the spanCondition;
-     *         the string length if the end of the string does not fit the spanCondition
-     * @stable ICU 3.8
-     * @see USetSpanCondition
-     */
-    int32_t spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const;
-
-    /**
-     * Implement UnicodeMatcher::matches()
-     * @stable ICU 2.4
-     */
-    virtual UMatchDegree matches(const Replaceable& text,
-                         int32_t& offset,
-                         int32_t limit,
-                         UBool incremental);
-
-private:
-    /**
-     * Returns the longest match for s in text at the given position.
-     * If limit > start then match forward from start+1 to limit
-     * matching all characters except s.charAt(0).  If limit < start,
-     * go backward starting from start-1 matching all characters
-     * except s.charAt(s.length()-1).  This method assumes that the
-     * first character, text.charAt(start), matches s, so it does not
-     * check it.
-     * @param text the text to match
-     * @param start the first character to match.  In the forward
-     * direction, text.charAt(start) is matched against s.charAt(0).
-     * In the reverse direction, it is matched against
-     * s.charAt(s.length()-1).
-     * @param limit the limit offset for matching, either last+1 in
-     * the forward direction, or last-1 in the reverse direction,
-     * where last is the index of the last character to match.
-     * @return If part of s matches up to the limit, return |limit -
-     * start|.  If all of s matches before reaching the limit, return
-     * s.length().  If there is a mismatch between s and text, return
-     * 0
-     */
-    static int32_t matchRest(const Replaceable& text,
-                             int32_t start, int32_t limit,
-                             const UnicodeString& s);
-
-    /**
-     * Returns the smallest value i such that c < list[i].  Caller
-     * must ensure that c is a legal value or this method will enter
-     * an infinite loop.  This method performs a binary search.
-     * @param c a character in the range MIN_VALUE..MAX_VALUE
-     * inclusive
-     * @return the smallest integer i in the range 0..len-1,
-     * inclusive, such that c < list[i]
-     */
-    int32_t findCodePoint(UChar32 c) const;
-
-public:
-
-    /**
-     * Implementation of UnicodeMatcher API.  Union the set of all
-     * characters that may be matched by this object into the given
-     * set.
-     * @param toUnionTo the set into which to union the source characters
-     * @stable ICU 2.4
-     */
-    virtual void addMatchSetTo(UnicodeSet& toUnionTo) const;
-
-    /**
-     * Returns the index of the given character within this set, where
-     * the set is ordered by ascending code point.  If the character
-     * is not in this set, return -1.  The inverse of this method is
-     * <code>charAt()</code>.
-     * @return an index from 0..size()-1, or -1
-     * @stable ICU 2.4
-     */
-    int32_t indexOf(UChar32 c) const;
-
-    /**
-     * Returns the character at the given index within this set, where
-     * the set is ordered by ascending code point.  If the index is
-     * out of range, return (UChar32)-1.  The inverse of this method is
-     * <code>indexOf()</code>.
-     * @param index an index from 0..size()-1
-     * @return the character at the given index, or (UChar32)-1.
-     * @stable ICU 2.4
-     */
-    UChar32 charAt(int32_t index) const;
-
-    /**
-     * Adds the specified range to this set if it is not already
-     * present.  If this set already contains the specified range,
-     * the call leaves this set unchanged.  If <code>end > start</code>
-     * then an empty range is added, leaving the set unchanged.
-     * This is equivalent to a boolean logic OR, or a set UNION.
-     * A frozen set will not be modified.
-     *
-     * @param start first character, inclusive, of range to be added
-     * to this set.
-     * @param end last character, inclusive, of range to be added
-     * to this set.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& add(UChar32 start, UChar32 end);
-
-    /**
-     * Adds the specified character to this set if it is not already
-     * present.  If this set already contains the specified character,
-     * the call leaves this set unchanged.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    UnicodeSet& add(UChar32 c);
-
-    /**
-     * Adds the specified multicharacter to this set if it is not already
-     * present.  If this set already contains the multicharacter,
-     * the call leaves this set unchanged.
-     * Thus "ch" => {"ch"}
-     * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
-     * A frozen set will not be modified.
-     * @param s the source string
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& add(const UnicodeString& s);
-
- private:
-    /**
-     * @return a code point IF the string consists of a single one.
-     * otherwise returns -1.
-     * @param s string to test
-     */
-    static int32_t getSingleCP(const UnicodeString& s);
-
-    void _add(const UnicodeString& s);
-
- public:
-    /**
-     * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"}
-     * If this set already any particular character, it has no effect on that character.
-     * A frozen set will not be modified.
-     * @param s the source string
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& addAll(const UnicodeString& s);
-
-    /**
-     * Retains EACH of the characters in this string. Note: "ch" == {"c", "h"}
-     * If this set already any particular character, it has no effect on that character.
-     * A frozen set will not be modified.
-     * @param s the source string
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& retainAll(const UnicodeString& s);
-
-    /**
-     * Complement EACH of the characters in this string. Note: "ch" == {"c", "h"}
-     * If this set already any particular character, it has no effect on that character.
-     * A frozen set will not be modified.
-     * @param s the source string
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& complementAll(const UnicodeString& s);
-
-    /**
-     * Remove EACH of the characters in this string. Note: "ch" == {"c", "h"}
-     * If this set already any particular character, it has no effect on that character.
-     * A frozen set will not be modified.
-     * @param s the source string
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& removeAll(const UnicodeString& s);
-
-    /**
-     * Makes a set from a multicharacter string. Thus "ch" => {"ch"}
-     * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
-     * @param s the source string
-     * @return a newly created set containing the given string.
-     * The caller owns the return object and is responsible for deleting it.
-     * @stable ICU 2.4
-     */
-    static UnicodeSet* U_EXPORT2 createFrom(const UnicodeString& s);
-
-
-    /**
-     * Makes a set from each of the characters in the string. Thus "ch" => {"c", "h"}
-     * @param s the source string
-     * @return a newly created set containing the given characters
-     * The caller owns the return object and is responsible for deleting it.
-     * @stable ICU 2.4
-     */
-    static UnicodeSet* U_EXPORT2 createFromAll(const UnicodeString& s);
-
-    /**
-     * Retain only the elements in this set that are contained in the
-     * specified range.  If <code>end > start</code> then an empty range is
-     * retained, leaving the set empty.  This is equivalent to
-     * a boolean logic AND, or a set INTERSECTION.
-     * A frozen set will not be modified.
-     *
-     * @param start first character, inclusive, of range to be retained
-     * to this set.
-     * @param end last character, inclusive, of range to be retained
-     * to this set.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& retain(UChar32 start, UChar32 end);
-
-
-    /**
-     * Retain the specified character from this set if it is present.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    UnicodeSet& retain(UChar32 c);
-
-    /**
-     * Removes the specified range from this set if it is present.
-     * The set will not contain the specified range once the call
-     * returns.  If <code>end > start</code> then an empty range is
-     * removed, leaving the set unchanged.
-     * A frozen set will not be modified.
-     *
-     * @param start first character, inclusive, of range to be removed
-     * from this set.
-     * @param end last character, inclusive, of range to be removed
-     * from this set.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& remove(UChar32 start, UChar32 end);
-
-    /**
-     * Removes the specified character from this set if it is present.
-     * The set will not contain the specified range once the call
-     * returns.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    UnicodeSet& remove(UChar32 c);
-
-    /**
-     * Removes the specified string from this set if it is present.
-     * The set will not contain the specified character once the call
-     * returns.
-     * A frozen set will not be modified.
-     * @param s the source string
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& remove(const UnicodeString& s);
-
-    /**
-     * Inverts this set.  This operation modifies this set so that
-     * its value is its complement.  This is equivalent to
-     * <code>complement(MIN_VALUE, MAX_VALUE)</code>.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& complement(void);
-
-    /**
-     * Complements the specified range in this set.  Any character in
-     * the range will be removed if it is in this set, or will be
-     * added if it is not in this set.  If <code>end > start</code>
-     * then an empty range is complemented, leaving the set unchanged.
-     * This is equivalent to a boolean logic XOR.
-     * A frozen set will not be modified.
-     *
-     * @param start first character, inclusive, of range to be removed
-     * from this set.
-     * @param end last character, inclusive, of range to be removed
-     * from this set.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& complement(UChar32 start, UChar32 end);
-
-    /**
-     * Complements the specified character in this set.  The character
-     * will be removed if it is in this set, or will be added if it is
-     * not in this set.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    UnicodeSet& complement(UChar32 c);
-
-    /**
-     * Complement the specified string in this set.
-     * The set will not contain the specified string once the call
-     * returns.
-     * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
-     * A frozen set will not be modified.
-     * @param s the string to complement
-     * @return this object, for chaining
-     * @stable ICU 2.4
-     */
-    UnicodeSet& complement(const UnicodeString& s);
-
-    /**
-     * Adds all of the elements in the specified set to this set if
-     * they're not already present.  This operation effectively
-     * modifies this set so that its value is the <i>union</i> of the two
-     * sets.  The behavior of this operation is unspecified if the specified
-     * collection is modified while the operation is in progress.
-     * A frozen set will not be modified.
-     *
-     * @param c set whose elements are to be added to this set.
-     * @see #add(UChar32, UChar32)
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& addAll(const UnicodeSet& c);
-
-    /**
-     * Retains only the elements in this set that are contained in the
-     * specified set.  In other words, removes from this set all of
-     * its elements that are not contained in the specified set.  This
-     * operation effectively modifies this set so that its value is
-     * the <i>intersection</i> of the two sets.
-     * A frozen set will not be modified.
-     *
-     * @param c set that defines which elements this set will retain.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& retainAll(const UnicodeSet& c);
-
-    /**
-     * Removes from this set all of its elements that are contained in the
-     * specified set.  This operation effectively modifies this
-     * set so that its value is the <i>asymmetric set difference</i> of
-     * the two sets.
-     * A frozen set will not be modified.
-     *
-     * @param c set that defines which elements will be removed from
-     *          this set.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& removeAll(const UnicodeSet& c);
-
-    /**
-     * Complements in this set all elements contained in the specified
-     * set.  Any character in the other set will be removed if it is
-     * in this set, or will be added if it is not in this set.
-     * A frozen set will not be modified.
-     *
-     * @param c set that defines which elements will be xor'ed from
-     *          this set.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeSet& complementAll(const UnicodeSet& c);
-
-    /**
-     * Removes all of the elements from this set.  This set will be
-     * empty after this call returns.
-     * A frozen set will not be modified.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeSet& clear(void);
-
-    /**
-     * Close this set over the given attribute.  For the attribute
-     * USET_CASE, the result is to modify this set so that:
-     *
-     * 1. For each character or string 'a' in this set, all strings or
-     * characters 'b' such that foldCase(a) == foldCase(b) are added
-     * to this set.
-     *
-     * 2. For each string 'e' in the resulting set, if e !=
-     * foldCase(e), 'e' will be removed.
-     *
-     * Example: [aq\\u00DF{Bc}{bC}{Fi}] => [aAqQ\\u00DF\\uFB01{ss}{bc}{fi}]
-     *
-     * (Here foldCase(x) refers to the operation u_strFoldCase, and a
-     * == b denotes that the contents are the same, not pointer
-     * comparison.)
-     *
-     * A frozen set will not be modified.
-     *
-     * @param attribute bitmask for attributes to close over.
-     * Currently only the USET_CASE bit is supported.  Any undefined bits
-     * are ignored.
-     * @return a reference to this set.
-     * @stable ICU 4.2
-     */
-    UnicodeSet& closeOver(int32_t attribute);
-
-    /**
-     * Remove all strings from this set.
-     *
-     * @return a reference to this set.
-     * @stable ICU 4.2
-     */
-    virtual UnicodeSet &removeAllStrings();
-
-    /**
-     * Iteration method that returns the number of ranges contained in
-     * this set.
-     * @see #getRangeStart
-     * @see #getRangeEnd
-     * @stable ICU 2.4
-     */
-    virtual int32_t getRangeCount(void) const;
-
-    /**
-     * Iteration method that returns the first character in the
-     * specified range of this set.
-     * @see #getRangeCount
-     * @see #getRangeEnd
-     * @stable ICU 2.4
-     */
-    virtual UChar32 getRangeStart(int32_t index) const;
-
-    /**
-     * Iteration method that returns the last character in the
-     * specified range of this set.
-     * @see #getRangeStart
-     * @see #getRangeEnd
-     * @stable ICU 2.4
-     */
-    virtual UChar32 getRangeEnd(int32_t index) const;
-
-    /**
-     * Serializes this set into an array of 16-bit integers.  Serialization
-     * (currently) only records the characters in the set; multicharacter
-     * strings are ignored.
-     *
-     * The array has following format (each line is one 16-bit
-     * integer):
-     *
-     *  length     = (n+2*m) | (m!=0?0x8000:0)
-     *  bmpLength  = n; present if m!=0
-     *  bmp[0]
-     *  bmp[1]
-     *  ...
-     *  bmp[n-1]
-     *  supp-high[0]
-     *  supp-low[0]
-     *  supp-high[1]
-     *  supp-low[1]
-     *  ...
-     *  supp-high[m-1]
-     *  supp-low[m-1]
-     *
-     * The array starts with a header.  After the header are n bmp
-     * code points, then m supplementary code points.  Either n or m
-     * or both may be zero.  n+2*m is always <= 0x7FFF.
-     *
-     * If there are no supplementary characters (if m==0) then the
-     * header is one 16-bit integer, 'length', with value n.
-     *
-     * If there are supplementary characters (if m!=0) then the header
-     * is two 16-bit integers.  The first, 'length', has value
-     * (n+2*m)|0x8000.  The second, 'bmpLength', has value n.
-     *
-     * After the header the code points are stored in ascending order.
-     * Supplementary code points are stored as most significant 16
-     * bits followed by least significant 16 bits.
-     *
-     * @param dest pointer to buffer of destCapacity 16-bit integers.
-     * May be NULL only if destCapacity is zero.
-     * @param destCapacity size of dest, or zero.  Must not be negative.
-     * @param ec error code.  Will be set to U_INDEX_OUTOFBOUNDS_ERROR
-     * if n+2*m > 0x7FFF.  Will be set to U_BUFFER_OVERFLOW_ERROR if
-     * n+2*m+(m!=0?2:1) > destCapacity.
-     * @return the total length of the serialized format, including
-     * the header, that is, n+2*m+(m!=0?2:1), or 0 on error other
-     * than U_BUFFER_OVERFLOW_ERROR.
-     * @stable ICU 2.4
-     */
-    int32_t serialize(uint16_t *dest, int32_t destCapacity, UErrorCode& ec) const;
-
-    /**
-     * Reallocate this objects internal structures to take up the least
-     * possible space, without changing this object's value.
-     * A frozen set will not be modified.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeSet& compact();
-
-    /**
-     * 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);
-
-    /**
-     * Implement UnicodeFunctor API.
-     *
-     * @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.4
-     */
-    virtual UClassID getDynamicClassID(void) const;
-
-private:
-
-    // Private API for the USet API
-
-    friend class USetAccess;
-
-    int32_t getStringCount() const;
-
-    const UnicodeString* getString(int32_t index) const;
-
-    //----------------------------------------------------------------
-    // RuleBasedTransliterator support
-    //----------------------------------------------------------------
-
-private:
-
-    /**
-     * Returns <tt>true</tt> if this set contains any character whose low byte
-     * is the given value.  This is used by <tt>RuleBasedTransliterator</tt> for
-     * indexing.
-     */
-    virtual UBool matchesIndexValue(uint8_t v) const;
-
-private:
-
-    //----------------------------------------------------------------
-    // Implementation: Clone as thawed (see ICU4J Freezable)
-    //----------------------------------------------------------------
-
-    UnicodeSet(const UnicodeSet& o, UBool /* asThawed */);
-
-    //----------------------------------------------------------------
-    // Implementation: Pattern parsing
-    //----------------------------------------------------------------
-
-    void applyPattern(RuleCharacterIterator& chars,
-                      const SymbolTable* symbols,
-                      UnicodeString& rebuiltPat,
-                      uint32_t options,
-                      UErrorCode& ec);
-
-    //----------------------------------------------------------------
-    // Implementation: Utility methods
-    //----------------------------------------------------------------
-
-    void ensureCapacity(int32_t newLen, UErrorCode& ec);
-
-    void ensureBufferCapacity(int32_t newLen, UErrorCode& ec);
-
-    void swapBuffers(void);
-
-    UBool allocateStrings(UErrorCode &status);
-
-    UnicodeString& _toPattern(UnicodeString& result,
-                              UBool escapeUnprintable) const;
-
-    UnicodeString& _generatePattern(UnicodeString& result,
-                                    UBool escapeUnprintable) const;
-
-    static void _appendToPat(UnicodeString& buf, const UnicodeString& s, UBool escapeUnprintable);
-
-    static void _appendToPat(UnicodeString& buf, UChar32 c, UBool escapeUnprintable);
-
-    //----------------------------------------------------------------
-    // Implementation: Fundamental operators
-    //----------------------------------------------------------------
-
-    void exclusiveOr(const UChar32* other, int32_t otherLen, int8_t polarity);
-
-    void add(const UChar32* other, int32_t otherLen, int8_t polarity);
-
-    void retain(const UChar32* other, int32_t otherLen, int8_t polarity);
-
-    /**
-     * Return true if the given position, in the given pattern, appears
-     * to be the start of a property set pattern [:foo:], \\p{foo}, or
-     * \\P{foo}, or \\N{name}.
-     */
-    static UBool resemblesPropertyPattern(const UnicodeString& pattern,
-                                          int32_t pos);
-
-    static UBool resemblesPropertyPattern(RuleCharacterIterator& chars,
-                                          int32_t iterOpts);
-
-    /**
-     * Parse the given property pattern at the given parse position
-     * and set this UnicodeSet to the result.
-     *
-     * The original design document is out of date, but still useful.
-     * Ignore the property and value names:
-     * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/unicodeset_properties.html
-     *
-     * Recognized syntax:
-     *
-     * [:foo:] [:^foo:] - white space not allowed within "[:" or ":]"
-     * \\p{foo} \\P{foo}  - white space not allowed within "\\p" or "\\P"
-     * \\N{name}         - white space not allowed within "\\N"
-     *
-     * Other than the above restrictions, white space is ignored.  Case
-     * is ignored except in "\\p" and "\\P" and "\\N".  In 'name' leading
-     * and trailing space is deleted, and internal runs of whitespace
-     * are collapsed to a single space.
-     *
-     * We support binary properties, enumerated properties, and the
-     * following non-enumerated properties:
-     *
-     *  Numeric_Value
-     *  Name
-     *  Unicode_1_Name
-     *
-     * @param pattern the pattern string
-     * @param ppos on entry, the position at which to begin parsing.
-     * This should be one of the locations marked '^':
-     *
-     *   [:blah:]     \\p{blah}     \\P{blah}     \\N{name}
-     *   ^       %    ^       %    ^       %    ^       %
-     *
-     * On return, the position after the last character parsed, that is,
-     * the locations marked '%'.  If the parse fails, ppos is returned
-     * unchanged.
-     * @return a reference to this.
-     */
-    UnicodeSet& applyPropertyPattern(const UnicodeString& pattern,
-                                     ParsePosition& ppos,
-                                     UErrorCode &ec);
-
-    void applyPropertyPattern(RuleCharacterIterator& chars,
-                              UnicodeString& rebuiltPat,
-                              UErrorCode& ec);
-
-    static const UnicodeSet* getInclusions(int32_t src, UErrorCode &status);
-
-    /**
-     * A filter that returns TRUE if the given code point should be
-     * included in the UnicodeSet being constructed.
-     */
-    typedef UBool (*Filter)(UChar32 codePoint, void* context);
-
-    /**
-     * Given a filter, set this UnicodeSet to the code points
-     * contained by that filter.  The filter MUST be
-     * property-conformant.  That is, if it returns value v for one
-     * code point, then it must return v for all affiliated code
-     * points, as defined by the inclusions list.  See
-     * getInclusions().
-     * src is a UPropertySource value.
-     */
-    void applyFilter(Filter filter,
-                     void* context,
-                     int32_t src,
-                     UErrorCode &status);
-
-    /**
-     * Set the new pattern to cache.
-     */
-    void setPattern(const UnicodeString& newPat);
-    /**
-     * Release existing cached pattern.
-     */
-    void releasePattern();
-
-    friend class UnicodeSetIterator;
-};
-
-
-
-inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const {
-    return !operator==(o);
-}
-
-inline UBool UnicodeSet::isFrozen() const {
-    return (UBool)(bmpSet!=NULL || stringSpan!=NULL);
-}
-
-inline UBool UnicodeSet::containsSome(UChar32 start, UChar32 end) const {
-    return !containsNone(start, end);
-}
-
-inline UBool UnicodeSet::containsSome(const UnicodeSet& s) const {
-    return !containsNone(s);
-}
-
-inline UBool UnicodeSet::containsSome(const UnicodeString& s) const {
-    return !containsNone(s);
-}
-
-inline UBool UnicodeSet::isBogus() const {
-    return (UBool)(fFlags & kIsBogus);
-}
-
-inline UnicodeSet *UnicodeSet::fromUSet(USet *uset) {
-    return reinterpret_cast<UnicodeSet *>(uset);
-}
-
-inline const UnicodeSet *UnicodeSet::fromUSet(const USet *uset) {
-    return reinterpret_cast<const UnicodeSet *>(uset);
-}
-
-inline USet *UnicodeSet::toUSet() {
-    return reinterpret_cast<USet *>(this);
-}
-
-inline const USet *UnicodeSet::toUSet() const {
-    return reinterpret_cast<const USet *>(this);
-}
-
-inline int32_t UnicodeSet::span(const UnicodeString &s, int32_t start, USetSpanCondition spanCondition) const {
-    int32_t sLength=s.length();
-    if(start<0) {
-        start=0;
-    } else if(start>sLength) {
-        start=sLength;
-    }
-    return start+span(s.getBuffer()+start, sLength-start, spanCondition);
-}
-
-inline int32_t UnicodeSet::spanBack(const UnicodeString &s, int32_t limit, USetSpanCondition spanCondition) const {
-    int32_t sLength=s.length();
-    if(limit<0) {
-        limit=0;
-    } else if(limit>sLength) {
-        limit=sLength;
-    }
-    return spanBack(s.getBuffer(), limit, spanCondition);
-}
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/unistr.h b/source/common/unicode/unistr.h
deleted file mode 100644
index 9aba6f0..0000000
--- a/source/common/unicode/unistr.h
+++ /dev/null
@@ -1,4448 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1998-2010, 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/utypes.h"
-#include "unicode/rep.h"
-#include "unicode/std_string.h"
-#include "unicode/stringpiece.h"
-#include "unicode/bytestream.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 U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION
-
-  /**
-   * Copy the characters in the range
-   * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters
-   * in the platform's default 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.
-   *
-   * @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
-   * 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;
-
-#endif
-
-#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) 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
-
-  /**
-   * Create a temporary substring for the specified range.
-   * Unlike the substring constructor and setTo() functions,
-   * the object returned here will be a read-only alias (using getBuffer())
-   * rather than copying the text.
-   * As a result, this substring operation is much faster but requires
-   * that the original string not be modified or deleted during the lifetime
-   * of the returned substring object.
-   * @param start offset of the first character visible in the substring
-   * @param length length of the substring
-   * @return a read-only alias UnicodeString object for the substring
-   * @stable ICU 4.4
-   */
-  UnicodeString tempSubString(int32_t start=0, int32_t length=INT32_MAX) const;
-
-  /**
-   * Create a temporary substring for the specified range.
-   * Same as tempSubString(start, length) except that the substring range
-   * is specified as a (start, limit) pair (with an exclusive limit index)
-   * rather than a (start, length) pair.
-   * @param start offset of the first character visible in the substring
-   * @param limit offset immediately following the last character visible in the substring
-   * @return a read-only alias UnicodeString object for the substring
-   * @stable ICU 4.4
-   */
-  inline UnicodeString tempSubStringBetween(int32_t start, int32_t limit=INT32_MAX) const;
-
-  /**
-   * Convert the UnicodeString to UTF-8 and write the result
-   * to a ByteSink. This is called by toUTF8String().
-   * Unpaired surrogates are replaced with U+FFFD.
-   * Calls u_strToUTF8WithSub().
-   *
-   * @param sink A ByteSink to which the UTF-8 version of the string is written.
-   *             sink.Flush() is called at the end.
-   * @stable ICU 4.2
-   * @see toUTF8String
-   */
-  void toUTF8(ByteSink &sink) const;
-
-#if U_HAVE_STD_STRING
-
-  /**
-   * Convert the UnicodeString to UTF-8 and append the result
-   * to a standard string.
-   * Unpaired surrogates are replaced with U+FFFD.
-   * Calls toUTF8().
-   *
-   * @param result A standard string (or a compatible object)
-   *        to which the UTF-8 version of the string is appended.
-   * @return The string object.
-   * @stable ICU 4.2
-   * @see toUTF8
-   */
-  template<typename StringClass>
-  StringClass &toUTF8String(StringClass &result) const {
-    StringByteSink<StringClass> sbs(&result);
-    toUTF8(sbs);
-    return result;
-  }
-
-#endif
-
-  /**
-   * Convert the UnicodeString to UTF-32.
-   * Unpaired surrogates are replaced with U+FFFD.
-   * Calls u_strToUTF32WithSub().
-   *
-   * @param utf32 destination string buffer, can be NULL if capacity==0
-   * @param capacity the number of UChar32s available at utf32
-   * @param errorCode 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 length of the UTF-32 string.
-   * @see fromUTF32
-   * @stable ICU 4.2
-   */
-  int32_t toUTF32(UChar32 *utf32, int32_t capacity, UErrorCode &errorCode) const;
-
-  /* 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,
-   * although in both cases isEmpty() returns TRUE and length() returns 0.
-   * setToBogus() and isBogus() can be used to indicate that no string value is available.
-   * For a bogus string, getBuffer() and getTerminatedBuffer() return NULL, and
-   * length() returns 0.
-   *
-   * @return TRUE if the string is 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
-   * <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 point
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& replace(int32_t start,
-             int32_t length,
-             UChar32 srcChar);
-
-  /**
-   * Replace the characters in the range [<TT>start</TT>, <TT>limit</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 limit the offset immediately following the replace range
-   * @param srcText the source for the new characters
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& replaceBetween(int32_t start,
-                int32_t limit,
-                const UnicodeString& srcText);
-
-  /**
-   * Replace the characters 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>). <TT>srcText</TT> is not modified.
-   * @param start the offset at which the replace operation begins
-   * @param limit the offset immediately following the replace range
-   * @param srcText the source for the new characters
-   * @param srcStart the offset into <TT>srcChars</TT> where new characters
-   * will be obtained
-   * @param srcLimit the offset immediately following the range to copy
-   * in <TT>srcText</TT>
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& replaceBetween(int32_t start,
-                int32_t limit,
-                const UnicodeString& srcText,
-                int32_t srcStart,
-                int32_t srcLimit);
-
-  /**
-   * Replace a substring of this object with the given text.
-   * @param start the beginning index, inclusive; <code>0 <= start
-   * <= limit</code>.
-   * @param limit the ending index, exclusive; <code>start <= limit
-   * <= length()</code>.
-   * @param text the text to replace characters <code>start</code>
-   * to <code>limit - 1</code>
-   * @stable ICU 2.0
-   */
-  virtual void handleReplaceBetween(int32_t start,
-                                    int32_t limit,
-                                    const UnicodeString& text);
-
-  /**
-   * Replaceable API
-   * @return TRUE if it has MetaData
-   * @stable ICU 2.4
-   */
-  virtual UBool hasMetaData() const;
-
-  /**
-   * Copy a substring of this object, retaining attribute (out-of-band)
-   * information.  This method is used to duplicate or reorder substrings.
-   * The destination index must not overlap the source range.
-   *
-   * @param start the beginning index, inclusive; <code>0 <= start <=
-   * limit</code>.
-   * @param limit the ending index, exclusive; <code>start <= limit <=
-   * length()</code>.
-   * @param dest the destination index.  The characters from
-   * <code>start..limit-1</code> will be copied to <code>dest</code>.
-   * Implementations of this method may assume that <code>dest <= start ||
-   * dest >= limit</code>.
-   * @stable ICU 2.0
-   */
-  virtual void copy(int32_t start, int32_t limit, int32_t dest);
-
-  /* Search and replace operations */
-
-  /**
-   * Replace all occurrences of characters in oldText with the characters
-   * in newText
-   * @param oldText the text containing the search text
-   * @param newText the text containing the replacement text
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& findAndReplace(const UnicodeString& oldText,
-                const UnicodeString& newText);
-
-  /**
-   * Replace all occurrences of characters in oldText with characters
-   * in newText
-   * in the range [<TT>start</TT>, <TT>start + length</TT>).
-   * @param start the start of the range in which replace will performed
-   * @param length the length of the range in which replace will be performed
-   * @param oldText the text containing the search text
-   * @param newText the text containing the replacement text
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& findAndReplace(int32_t start,
-                int32_t length,
-                const UnicodeString& oldText,
-                const UnicodeString& newText);
-
-  /**
-   * Replace all occurrences of characters in oldText in the range
-   * [<TT>oldStart</TT>, <TT>oldStart + oldLength</TT>) with the characters
-   * in newText in the range
-   * [<TT>newStart</TT>, <TT>newStart + newLength</TT>)
-   * in the range [<TT>start</TT>, <TT>start + length</TT>).
-   * @param start the start of the range in which replace will performed
-   * @param length the length of the range in which replace will be performed
-   * @param oldText the text containing the search text
-   * @param oldStart the start of the search range in <TT>oldText</TT>
-   * @param oldLength the length of the search range in <TT>oldText</TT>
-   * @param newText the text containing the replacement text
-   * @param newStart the start of the replacement range in <TT>newText</TT>
-   * @param newLength the length of the replacement range in <TT>newText</TT>
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  UnicodeString& findAndReplace(int32_t start,
-                int32_t length,
-                const UnicodeString& oldText,
-                int32_t oldStart,
-                int32_t oldLength,
-                const UnicodeString& newText,
-                int32_t newStart,
-                int32_t newLength);
-
-
-  /* Remove operations */
-
-  /**
-   * Remove all characters from the UnicodeString object.
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& remove(void);
-
-  /**
-   * Remove the characters in the range
-   * [<TT>start</TT>, <TT>start + length</TT>) from the UnicodeString object.
-   * @param start the offset of the first character to remove
-   * @param length the number of characters to remove
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& remove(int32_t start,
-                               int32_t length = (int32_t)INT32_MAX);
-
-  /**
-   * Remove the characters in the range
-   * [<TT>start</TT>, <TT>limit</TT>) from the UnicodeString object.
-   * @param start the offset of the first character to remove
-   * @param limit the offset immediately following the range to remove
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& removeBetween(int32_t start,
-                                      int32_t limit = (int32_t)INT32_MAX);
-
-  /**
-   * Retain only the characters in the range
-   * [<code>start</code>, <code>limit</code>) from the UnicodeString object.
-   * Removes characters before <code>start</code> and at and after <code>limit</code>.
-   * @param start the offset of the first character to retain
-   * @param limit the offset immediately following the range to retain
-   * @return a reference to this
-   * @stable ICU 4.4
-   */
-  inline UnicodeString &retainBetween(int32_t start, int32_t limit = INT32_MAX);
-
-  /* Length operations */
-
-  /**
-   * Pad the start of this UnicodeString with the character <TT>padChar</TT>.
-   * If the length of this UnicodeString is less than targetLength,
-   * length() - targetLength copies of padChar will be added to the
-   * beginning of this UnicodeString.
-   * @param targetLength the desired length of the string
-   * @param padChar the character to use for padding. Defaults to
-   * space (U+0020)
-   * @return TRUE if the text was padded, FALSE otherwise.
-   * @stable ICU 2.0
-   */
-  UBool padLeading(int32_t targetLength,
-                    UChar padChar = 0x0020);
-
-  /**
-   * Pad the end of this UnicodeString with the character <TT>padChar</TT>.
-   * If the length of this UnicodeString is less than targetLength,
-   * length() - targetLength copies of padChar will be added to the
-   * end of this UnicodeString.
-   * @param targetLength the desired length of the string
-   * @param padChar the character to use for padding. Defaults to
-   * space (U+0020)
-   * @return TRUE if the text was padded, FALSE otherwise.
-   * @stable ICU 2.0
-   */
-  UBool padTrailing(int32_t targetLength,
-                     UChar padChar = 0x0020);
-
-  /**
-   * Truncate this UnicodeString to the <TT>targetLength</TT>.
-   * @param targetLength the desired length of this UnicodeString.
-   * @return TRUE if the text was truncated, FALSE otherwise
-   * @stable ICU 2.0
-   */
-  inline UBool truncate(int32_t targetLength);
-
-  /**
-   * Trims leading and trailing whitespace from this UnicodeString.
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  UnicodeString& trim(void);
-
-
-  /* Miscellaneous operations */
-
-  /**
-   * Reverse this UnicodeString in place.
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& reverse(void);
-
-  /**
-   * Reverse the range [<TT>start</TT>, <TT>start + length</TT>) in
-   * this UnicodeString.
-   * @param start the start of the range to reverse
-   * @param length the number of characters to to reverse
-   * @return a reference to this
-   * @stable ICU 2.0
-   */
-  inline UnicodeString& reverse(int32_t start,
-             int32_t length);
-
-  /**
-   * Convert the characters in this to UPPER CASE following the conventions of
-   * the default locale.
-   * @return A reference to this.
-   * @stable ICU 2.0
-   */
-  UnicodeString& toUpper(void);
-
-  /**
-   * Convert the characters in this to UPPER CASE following the conventions of
-   * a specific locale.
-   * @param locale The locale containing the conventions to use.
-   * @return A reference to this.
-   * @stable ICU 2.0
-   */
-  UnicodeString& toUpper(const Locale& locale);
-
-  /**
-   * Convert the characters in this to lower case following the conventions of
-   * the default locale.
-   * @return A reference to this.
-   * @stable ICU 2.0
-   */
-  UnicodeString& toLower(void);
-
-  /**
-   * Convert the characters in this to lower case following the conventions of
-   * a specific locale.
-   * @param locale The locale containing the conventions to use.
-   * @return A reference to this.
-   * @stable ICU 2.0
-   */
-  UnicodeString& toLower(const Locale& locale);
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-  /**
-   * Titlecase this string, convenience function using the default locale.
-   *
-   * 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.
-   *
-   * 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.
-   *
-   * @param titleIter A break iterator to find the first characters of words
-   *                  that are to be titlecased.
-   *                  If none is provided (0), then a standard titlecase
-   *                  break iterator is opened.
-   *                  Otherwise the provided iterator is set to the string's text.
-   * @return A reference to this.
-   * @stable ICU 2.1
-   */
-  UnicodeString &toTitle(BreakIterator *titleIter);
-
-  /**
-   * Titlecase this 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.
-   *
-   * 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.
-   *
-   * @param titleIter A break iterator to find the first characters of words
-   *                  that are to be titlecased.
-   *                  If none is provided (0), then a standard titlecase
-   *                  break iterator is opened.
-   *                  Otherwise the provided iterator is set to the string's text.
-   * @param locale    The locale to consider.
-   * @return A reference to this.
-   * @stable ICU 2.1
-   */
-  UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale);
-
-  /**
-   * Titlecase this string, with options.
-   *
-   * 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 options.)
-   *
-   * 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.
-   *
-   * @param titleIter A break iterator to find the first characters of words
-   *                  that are to be titlecased.
-   *                  If none is provided (0), then a standard titlecase
-   *                  break iterator is opened.
-   *                  Otherwise the provided iterator is set to the string's text.
-   * @param locale    The locale to consider.
-   * @param options Options bit set, see ucasemap_open().
-   * @return A reference to this.
-   * @see U_TITLECASE_NO_LOWERCASE
-   * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
-   * @see ucasemap_open
-   * @stable ICU 3.8
-   */
-  UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options);
-
-#endif
-
-  /**
-   * Case-fold the characters in this 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.
-   *
-   * @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I
-   * @return A reference to this.
-   * @stable ICU 2.0
-   */
-  UnicodeString &foldCase(uint32_t options=0 /*U_FOLD_CASE_DEFAULT*/);
-
-  //========================================
-  // Access to the internal buffer
-  //========================================
-
-  /**
-   * Get a read/write pointer to the internal buffer.
-   * The buffer is guaranteed to be large enough for at least minCapacity UChars,
-   * writable, and is still owned by the UnicodeString object.
-   * Calls to getBuffer(minCapacity) must not be nested, and
-   * must be matched with calls to releaseBuffer(newLength).
-   * If the string buffer was read-only or shared,
-   * then it will be reallocated and copied.
-   *
-   * An attempted nested call will return 0, and will not further modify the
-   * state of the UnicodeString object.
-   * It also returns 0 if the string is bogus.
-   *
-   * The actual capacity of the string buffer may be larger than minCapacity.
-   * getCapacity() returns the actual capacity.
-   * For many operations, the full capacity should be used to avoid reallocations.
-   *
-   * While the buffer is "open" between getBuffer(minCapacity)
-   * and releaseBuffer(newLength), the following applies:
-   * - The string length is set to 0.
-   * - Any read API call on the UnicodeString object will behave like on a 0-length string.
-   * - Any write API call on the UnicodeString object is disallowed and will have no effect.
-   * - You can read from and write to the returned buffer.
-   * - The previous string contents will still be in the buffer;
-   *   if you want to use it, then you need to call length() before getBuffer(minCapacity).
-   *   If the length() was greater than minCapacity, then any contents after minCapacity
-   *   may be lost.
-   *   The buffer contents is not NUL-terminated by getBuffer().
-   *   If length()<getCapacity() then you can terminate it by writing a NUL
-   *   at index length().
-   * - You must call releaseBuffer(newLength) before and in order to
-   *   return to normal UnicodeString operation.
-   *
-   * @param minCapacity the minimum number of UChars that are to be available
-   *        in the buffer, starting at the returned pointer;
-   *        default to the current string capacity if minCapacity==-1
-   * @return a writable pointer to the internal string buffer,
-   *         or 0 if an error occurs (nested calls, out of memory)
-   *
-   * @see releaseBuffer
-   * @see getTerminatedBuffer()
-   * @stable ICU 2.0
-   */
-  UChar *getBuffer(int32_t minCapacity);
-
-  /**
-   * Release a read/write buffer on a UnicodeString object with an
-   * "open" getBuffer(minCapacity).
-   * This function must be called in a matched pair with getBuffer(minCapacity).
-   * releaseBuffer(newLength) must be called if and only if a getBuffer(minCapacity) is "open".
-   *
-   * It will set the string length to newLength, at most to the current capacity.
-   * If newLength==-1 then it will set the length according to the
-   * first NUL in the buffer, or to the capacity if there is no NUL.
-   *
-   * After calling releaseBuffer(newLength) the UnicodeString is back to normal operation.
-   *
-   * @param newLength the new length of the UnicodeString object;
-   *        defaults to the current capacity if newLength is greater than that;
-   *        if newLength==-1, it defaults to u_strlen(buffer) but not more than
-   *        the current capacity of the string
-   *
-   * @see getBuffer(int32_t minCapacity)
-   * @stable ICU 2.0
-   */
-  void releaseBuffer(int32_t newLength=-1);
-
-  /**
-   * Get a read-only pointer to the internal buffer.
-   * This can be called at any time on a valid UnicodeString.
-   *
-   * It returns 0 if the string is bogus, or
-   * during an "open" getBuffer(minCapacity).
-   *
-   * It can be called as many times as desired.
-   * The pointer that it returns will remain valid until the UnicodeString object is modified,
-   * at which time the pointer is semantically invalidated and must not be used any more.
-   *
-   * The capacity of the buffer can be determined with getCapacity().
-   * The part after length() may or may not be initialized and valid,
-   * depending on the history of the UnicodeString object.
-   *
-   * The buffer contents is (probably) not NUL-terminated.
-   * You can check if it is with
-   * <code>(s.length()<s.getCapacity() && buffer[s.length()]==0)</code>.
-   * (See getTerminatedBuffer().)
-   *
-   * The buffer may reside in read-only memory. Its contents must not
-   * be modified.
-   *
-   * @return a read-only pointer to the internal string buffer,
-   *         or 0 if the string is empty or bogus
-   *
-   * @see getBuffer(int32_t minCapacity)
-   * @see getTerminatedBuffer()
-   * @stable ICU 2.0
-   */
-  inline const UChar *getBuffer() const;
-
-  /**
-   * Get a read-only pointer to the internal buffer,
-   * making sure that it is NUL-terminated.
-   * This can be called at any time on a valid UnicodeString.
-   *
-   * It returns 0 if the string is bogus, or
-   * during an "open" getBuffer(minCapacity), or if the buffer cannot
-   * be NUL-terminated (because memory allocation failed).
-   *
-   * It can be called as many times as desired.
-   * The pointer that it returns will remain valid until the UnicodeString object is modified,
-   * at which time the pointer is semantically invalidated and must not be used any more.
-   *
-   * The capacity of the buffer can be determined with getCapacity().
-   * The part after length()+1 may or may not be initialized and valid,
-   * depending on the history of the UnicodeString object.
-   *
-   * The buffer contents is guaranteed to be NUL-terminated.
-   * getTerminatedBuffer() may reallocate the buffer if a terminating NUL
-   * is written.
-   * For this reason, this function is not const, unlike getBuffer().
-   * Note that a UnicodeString may also contain NUL characters as part of its contents.
-   *
-   * The buffer may reside in read-only memory. Its contents must not
-   * be modified.
-   *
-   * @return a read-only pointer to the internal string buffer,
-   *         or 0 if the string is empty or bogus
-   *
-   * @see getBuffer(int32_t minCapacity)
-   * @see getBuffer()
-   * @stable ICU 2.2
-   */
-  inline const UChar *getTerminatedBuffer();
-
-  //========================================
-  // Constructors
-  //========================================
-
-  /** Construct an empty UnicodeString.
-   * @stable ICU 2.0
-   */
-  UnicodeString();
-
-  /**
-   * Construct a UnicodeString with capacity to hold <TT>capacity</TT> UChars
-   * @param capacity the number of UChars this UnicodeString should hold
-   * before a resize is necessary; if count is greater than 0 and count
-   * code points c take up more space than capacity, then capacity is adjusted
-   * accordingly.
-   * @param c is used to initially fill the string
-   * @param count specifies how many code points c are to be written in the
-   *              string
-   * @stable ICU 2.0
-   */
-  UnicodeString(int32_t capacity, UChar32 c, int32_t count);
-
-  /**
-   * Single UChar (code unit) constructor.
-   * @param ch the character to place in the UnicodeString
-   * @stable ICU 2.0
-   */
-  UnicodeString(UChar ch);
-
-  /**
-   * Single UChar32 (code point) constructor.
-   * @param ch the character to place in the UnicodeString
-   * @stable ICU 2.0
-   */
-  UnicodeString(UChar32 ch);
-
-  /**
-   * UChar* constructor.
-   * @param text The characters to place in the UnicodeString.  <TT>text</TT>
-   * must be NULL (U+0000) terminated.
-   * @stable ICU 2.0
-   */
-  UnicodeString(const UChar *text);
-
-  /**
-   * UChar* constructor.
-   * @param text The characters to place in the UnicodeString.
-   * @param textLength The number of Unicode characters in <TT>text</TT>
-   * to copy.
-   * @stable ICU 2.0
-   */
-  UnicodeString(const UChar *text,
-        int32_t textLength);
-
-  /**
-   * 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>.
-   * @stable ICU 2.0
-   */
-  UnicodeString(UBool isTerminated,
-                const UChar *text,
-                int32_t textLength);
-
-  /**
-   * 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.
-   * @stable ICU 2.0
-   */
-  UnicodeString(UChar *buffer, int32_t buffLength, int32_t buffCapacity);
-
-#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION
-
-  /**
-   * char* constructor.
-   * @param codepageData an array of bytes, null-terminated,
-   *                     in the platform's default codepage.
-   * @stable ICU 2.0
-   */
-  UnicodeString(const char *codepageData);
-
-  /**
-   * char* constructor.
-   * @param codepageData an array of bytes in the platform's default codepage.
-   * @param dataLength The number of bytes in <TT>codepageData</TT>.
-   * @stable ICU 2.0
-   */
-  UnicodeString(const char *codepageData, int32_t dataLength);
-
-#endif
-
-#if !UCONFIG_NO_CONVERSION
-
-  /**
-   * char* constructor.
-   * @param codepageData an array of bytes, null-terminated
-   * @param codepage the encoding of <TT>codepageData</TT>.  The special
-   * value 0 for <TT>codepage</TT> indicates that the text is in the
-   * platform's 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.
-   * Recommendation: For invariant-character strings use the constructor
-   * UnicodeString(const char *src, int32_t length, enum EInvariant inv)
-   * because it avoids object code dependencies of UnicodeString on
-   * the conversion code.
-   *
-   * @stable ICU 2.0
-   */
-  UnicodeString(const char *codepageData, const char *codepage);
-
-  /**
-   * char* constructor.
-   * @param codepageData an array of bytes.
-   * @param dataLength The number of bytes in <TT>codepageData</TT>.
-   * @param codepage the encoding of <TT>codepageData</TT>.  The special
-   * value 0 for <TT>codepage</TT> indicates that the text is in the
-   * platform's 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.
-   * Recommendation: For invariant-character strings use the constructor
-   * UnicodeString(const char *src, int32_t length, enum EInvariant inv)
-   * because it avoids object code dependencies of UnicodeString on
-   * the conversion code.
-   *
-   * @stable ICU 2.0
-   */
-  UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage);
-
-  /**
-   * char * / UConverter constructor.
-   * This constructor uses an existing UConverter object to
-   * convert the codepage string to Unicode and construct a UnicodeString
-   * from that.
-   *
-   * The converter is reset at first.
-   * If the error code indicates a failure before this constructor is called,
-   * or if an error occurs during conversion or construction,
-   * then the string will be bogus.
-   *
-   * This function avoids the overhead of opening and closing a converter if
-   * multiple strings are constructed.
-   *
-   * @param src input codepage string
-   * @param srcLength length of the input string, can be -1 for NUL-terminated strings
-   * @param cnv converter object (ucnv_resetToUnicode() will be called),
-   *        can be NULL for the default converter
-   * @param errorCode normal ICU error code
-   * @stable ICU 2.0
-   */
-  UnicodeString(
-        const char *src, int32_t srcLength,
-        UConverter *cnv,
-        UErrorCode &errorCode);
-
-#endif
-
-  /**
-   * 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).
-   *
-   * Use the macro US_INV as the third, signature-distinguishing parameter.
-   *
-   * For example:
-   * \code
-   * void fn(const char *s) {
-   *   UnicodeString ustr(s, -1, US_INV);
-   *   // use ustr ...
-   * }
-   * \endcode
-   *
-   * @param src String using only invariant characters.
-   * @param length Length of src, or -1 if NUL-terminated.
-   * @param inv Signature-distinguishing paramater, use US_INV.
-   *
-   * @see US_INV
-   * @stable ICU 3.2
-   */
-  UnicodeString(const char *src, int32_t length, enum EInvariant inv);
-
-
-  /**
-   * Copy constructor.
-   * @param that The UnicodeString object to copy.
-   * @stable ICU 2.0
-   */
-  UnicodeString(const UnicodeString& that);
-
-  /**
-   * 'Substring' constructor from tail of source string.
-   * @param src The UnicodeString object to copy.
-   * @param srcStart The offset into <tt>src</tt> at which to start copying.
-   * @stable ICU 2.2
-   */
-  UnicodeString(const UnicodeString& src, int32_t srcStart);
-
-  /**
-   * 'Substring' constructor from subrange of source string.
-   * @param src The UnicodeString object to copy.
-   * @param srcStart The offset into <tt>src</tt> at which to start copying.
-   * @param srcLength The number of characters from <tt>src</tt> to copy.
-   * @stable ICU 2.2
-   */
-  UnicodeString(const UnicodeString& src, int32_t srcStart, int32_t srcLength);
-
-  /**
-   * Clone this object, an instance of a subclass of Replaceable.
-   * Clones can be used concurrently in multiple threads.
-   * If a subclass does not implement clone(), or if an error occurs,
-   * then NULL is returned.
-   * The clone functions in all subclasses return a pointer to a Replaceable
-   * because some compilers do not support covariant (same-as-this)
-   * return types; cast to the appropriate subclass if necessary.
-   * The caller must delete the clone.
-   *
-   * @return a clone of this object
-   *
-   * @see Replaceable::clone
-   * @see getDynamicClassID
-   * @stable ICU 2.6
-   */
-  virtual Replaceable *clone() const;
-
-  /** Destructor.
-   * @stable ICU 2.0
-   */
-  virtual ~UnicodeString();
-
-  /**
-   * Create a UnicodeString from a UTF-8 string.
-   * Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string.
-   * Calls u_strFromUTF8WithSub().
-   *
-   * @param utf8 UTF-8 input string.
-   *             Note that a StringPiece can be implicitly constructed
-   *             from a std::string or a NUL-terminated const char * string.
-   * @return A UnicodeString with equivalent UTF-16 contents.
-   * @see toUTF8
-   * @see toUTF8String
-   * @stable ICU 4.2
-   */
-  static UnicodeString fromUTF8(const StringPiece &utf8);
-
-  /**
-   * Create a UnicodeString from a UTF-32 string.
-   * Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string.
-   * Calls u_strFromUTF32WithSub().
-   *
-   * @param utf32 UTF-32 input string. Must not be NULL.
-   * @param length Length of the input string, or -1 if NUL-terminated.
-   * @return A UnicodeString with equivalent UTF-16 contents.
-   * @see toUTF32
-   * @stable ICU 4.2
-   */
-  static UnicodeString fromUTF32(const UChar32 *utf32, int32_t length);
-
-  /* Miscellaneous operations */
-
-  /**
-   * Unescape a string of characters and return a string containing
-   * the result.  The following escape sequences are recognized:
-   *
-   * \\uhhhh       4 hex digits; h in [0-9A-Fa-f]
-   * \\Uhhhhhhhh   8 hex digits
-   * \\xhh         1-2 hex digits
-   * \\ooo         1-3 octal digits; o in [0-7]
-   * \\cX          control-X; X is masked with 0x1F
-   *
-   * as well as the standard ANSI C escapes:
-   *
-   * \\a => U+0007, \\b => U+0008, \\t => U+0009, \\n => U+000A,
-   * \\v => U+000B, \\f => U+000C, \\r => U+000D, \\e => U+001B,
-   * \\&quot; => U+0022, \\' => U+0027, \\? => U+003F, \\\\ => U+005C
-   *
-   * Anything else following a backslash is generically escaped.  For
-   * example, "[a\\-z]" returns "[a-z]".
-   *
-   * If an escape sequence is ill-formed, this method returns an empty
-   * string.  An example of an ill-formed sequence is "\\u" followed by
-   * fewer than 4 hex digits.
-   *
-   * This function is similar to u_unescape() but not identical to it.
-   * The latter takes a source char*, so it does escape recognition
-   * and also invariant conversion.
-   *
-   * @return a string with backslash escapes interpreted, or an
-   * empty string on error.
-   * @see UnicodeString#unescapeAt()
-   * @see u_unescape()
-   * @see u_unescapeAt()
-   * @stable ICU 2.0
-   */
-  UnicodeString unescape() const;
-
-  /**
-   * Unescape a single escape sequence and return the represented
-   * character.  See unescape() for a listing of the recognized escape
-   * sequences.  The character at offset-1 is assumed (without
-   * checking) to be a backslash.  If the escape sequence is
-   * ill-formed, or the offset is out of range, (UChar32)0xFFFFFFFF is
-   * returned.
-   *
-   * @param offset an input output parameter.  On input, it is the
-   * offset into this string where the escape sequence is located,
-   * after the initial backslash.  On output, it is advanced after the
-   * last character parsed.  On error, it is not advanced at all.
-   * @return the character represented by the escape sequence at
-   * offset, or (UChar32)0xFFFFFFFF on error.
-   * @see UnicodeString#unescape()
-   * @see u_unescape()
-   * @see u_unescapeAt()
-   * @stable ICU 2.0
-   */
-  UChar32 unescapeAt(int32_t &offset) const;
-
-  /**
-   * ICU "poor man's RTTI", returns a UClassID for this class.
-   *
-   * @stable ICU 2.2
-   */
-  static UClassID U_EXPORT2 getStaticClassID();
-
-  /**
-   * ICU "poor man's RTTI", returns a UClassID for the actual class.
-   *
-   * @stable ICU 2.2
-   */
-  virtual UClassID getDynamicClassID() const;
-
-  //========================================
-  // Implementation methods
-  //========================================
-
-protected:
-  /**
-   * Implement Replaceable::getLength() (see jitterbug 1027).
-   * @stable ICU 2.4
-   */
-  virtual int32_t getLength() const;
-
-  /**
-   * The change in Replaceable to use virtual getCharAt() allows
-   * UnicodeString::charAt() to be inline again (see jitterbug 709).
-   * @stable ICU 2.4
-   */
-  virtual UChar getCharAt(int32_t offset) const;
-
-  /**
-   * The change in Replaceable to use virtual getChar32At() allows
-   * UnicodeString::char32At() to be inline again (see jitterbug 709).
-   * @stable ICU 2.4
-   */
-  virtual UChar32 getChar32At(int32_t offset) const;
-
-private:
-  // For char* constructors. Could be made public.
-  UnicodeString &setToUTF8(const StringPiece &utf8);
-  // For extract(char*).
-  // We could make a toUTF8(target, capacity, errorCode) public but not
-  // this version: New API will be cleaner if we make callers create substrings
-  // rather than having start+length on every method,
-  // and it should take a UErrorCode&.
-  int32_t
-  toUTF8(int32_t start, int32_t len,
-         char *target, int32_t capacity) const;
-
-
-  inline int8_t
-  doCompare(int32_t start,
-           int32_t length,
-           const UnicodeString& srcText,
-           int32_t srcStart,
-           int32_t srcLength) const;
-
-  int8_t doCompare(int32_t start,
-           int32_t length,
-           const UChar *srcChars,
-           int32_t srcStart,
-           int32_t srcLength) const;
-
-  inline int8_t
-  doCompareCodePointOrder(int32_t start,
-                          int32_t length,
-                          const UnicodeString& srcText,
-                          int32_t srcStart,
-                          int32_t srcLength) const;
-
-  int8_t doCompareCodePointOrder(int32_t start,
-                                 int32_t length,
-                                 const UChar *srcChars,
-                                 int32_t srcStart,
-                                 int32_t srcLength) const;
-
-  inline int8_t
-  doCaseCompare(int32_t start,
-                int32_t length,
-                const UnicodeString &srcText,
-                int32_t srcStart,
-                int32_t srcLength,
-                uint32_t options) const;
-
-  int8_t
-  doCaseCompare(int32_t start,
-                int32_t length,
-                const UChar *srcChars,
-                int32_t srcStart,
-                int32_t srcLength,
-                uint32_t options) const;
-
-  int32_t doIndexOf(UChar c,
-            int32_t start,
-            int32_t length) const;
-
-  int32_t doIndexOf(UChar32 c,
-                        int32_t start,
-                        int32_t length) const;
-
-  int32_t doLastIndexOf(UChar c,
-                int32_t start,
-                int32_t length) const;
-
-  int32_t doLastIndexOf(UChar32 c,
-                            int32_t start,
-                            int32_t length) const;
-
-  void doExtract(int32_t start,
-         int32_t length,
-         UChar *dst,
-         int32_t dstStart) const;
-
-  inline void doExtract(int32_t start,
-         int32_t length,
-         UnicodeString& target) const;
-
-  inline UChar doCharAt(int32_t offset)  const;
-
-  UnicodeString& doReplace(int32_t start,
-               int32_t length,
-               const UnicodeString& srcText,
-               int32_t srcStart,
-               int32_t srcLength);
-
-  UnicodeString& doReplace(int32_t start,
-               int32_t length,
-               const UChar *srcChars,
-               int32_t srcStart,
-               int32_t srcLength);
-
-  UnicodeString& doReverse(int32_t start,
-               int32_t length);
-
-  // calculate hash code
-  int32_t doHashCode(void) const;
-
-  // get pointer to start of array
-  // these do not check for kOpenGetBuffer, unlike the public getBuffer() function
-  inline UChar* getArrayStart(void);
-  inline const UChar* getArrayStart(void) const;
-
-  // A UnicodeString object (not necessarily its current buffer)
-  // is writable unless it isBogus() or it has an "open" getBuffer(minCapacity).
-  inline UBool isWritable() const;
-
-  // Is the current buffer writable?
-  inline UBool isBufferWritable() const;
-
-  // None of the following does releaseArray().
-  inline void setLength(int32_t len);        // sets only fShortLength and fLength
-  inline void setToEmpty();                  // sets fFlags=kShortString
-  inline void setArray(UChar *array, int32_t len, int32_t capacity); // does not set fFlags
-
-  // allocate the array; result may be fStackBuffer
-  // sets refCount to 1 if appropriate
-  // sets fArray, fCapacity, and fFlags
-  // returns boolean for success or failure
-  UBool allocate(int32_t capacity);
-
-  // release the array if owned
-  void releaseArray(void);
-
-  // turn a bogus string into an empty one
-  void unBogus();
-
-  // implements assigment operator, copy constructor, and fastCopyFrom()
-  UnicodeString &copyFrom(const UnicodeString &src, UBool fastCopy=FALSE);
-
-  // Pin start and limit to acceptable values.
-  inline void pinIndex(int32_t& start) const;
-  inline void pinIndices(int32_t& start,
-                         int32_t& length) const;
-
-#if !UCONFIG_NO_CONVERSION
-
-  /* Internal extract() using UConverter. */
-  int32_t doExtract(int32_t start, int32_t length,
-                    char *dest, int32_t destCapacity,
-                    UConverter *cnv,
-                    UErrorCode &errorCode) const;
-
-  /*
-   * Real constructor for converting from codepage data.
-   * It assumes that it is called with !fRefCounted.
-   *
-   * If <code>codepage==0</code>, then the default converter
-   * is used for the platform encoding.
-   * 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.
-   */
-  void doCodepageCreate(const char *codepageData,
-                        int32_t dataLength,
-                        const char *codepage);
-
-  /*
-   * Worker function for creating a UnicodeString from
-   * a codepage string using a UConverter.
-   */
-  void
-  doCodepageCreate(const char *codepageData,
-                   int32_t dataLength,
-                   UConverter *converter,
-                   UErrorCode &status);
-
-#endif
-
-  /*
-   * This function is called when write access to the array
-   * is necessary.
-   *
-   * We need to make a copy of the array if
-   * the buffer is read-only, or
-   * the buffer is refCounted (shared), and refCount>1, or
-   * the buffer is too small.
-   *
-   * Return FALSE if memory could not be allocated.
-   */
-  UBool cloneArrayIfNeeded(int32_t newCapacity = -1,
-                            int32_t growCapacity = -1,
-                            UBool doCopyArray = TRUE,
-                            int32_t **pBufferToDelete = 0,
-                            UBool forceClone = FALSE);
-
-  // common function for case mappings
-  UnicodeString &
-  caseMap(BreakIterator *titleIter,
-          const char *locale,
-          uint32_t options,
-          int32_t toWhichCase);
-
-  // ref counting
-  void addRef(void);
-  int32_t removeRef(void);
-  int32_t refCount(void) const;
-
-  // constants
-  enum {
-    // Set the stack buffer size so that sizeof(UnicodeString) is a multiple of sizeof(pointer):
-    // 32-bit pointers: 4+1+1+13*2 = 32 bytes
-    // 64-bit pointers: 8+1+1+15*2 = 40 bytes
-    US_STACKBUF_SIZE= sizeof(void *)==4 ? 13 : 15, // Size of stack buffer for small strings
-    kInvalidUChar=0xffff, // invalid UChar index
-    kGrowSize=128, // grow size for this buffer
-    kInvalidHashCode=0, // invalid hash code
-    kEmptyHashCode=1, // hash code for empty string
-
-    // bit flag values for fFlags
-    kIsBogus=1,         // this string is bogus, i.e., not valid or NULL
-    kUsingStackBuffer=2,// fArray==fStackBuffer
-    kRefCounted=4,      // there is a refCount field before the characters in fArray
-    kBufferIsReadonly=8,// do not write to this buffer
-    kOpenGetBuffer=16,  // getBuffer(minCapacity) was called (is "open"),
-                        // and releaseBuffer(newLength) must be called
-
-    // combined values for convenience
-    kShortString=kUsingStackBuffer,
-    kLongString=kRefCounted,
-    kReadonlyAlias=kBufferIsReadonly,
-    kWritableAlias=0
-  };
-
-  friend class StringThreadTest;
-
-  union StackBufferOrFields;        // forward declaration necessary before friend declaration
-  friend union StackBufferOrFields; // make US_STACKBUF_SIZE visible inside fUnion
-
-  /*
-   * The following are all the class fields that are stored
-   * in each UnicodeString object.
-   * Note that UnicodeString has virtual functions,
-   * therefore there is an implicit vtable pointer
-   * as the first real field.
-   * The fields should be aligned such that no padding is
-   * necessary, mostly by having larger types first.
-   * On 32-bit machines, the size should be 32 bytes,
-   * on 64-bit machines (8-byte pointers), it should be 40 bytes.
-   */
-  // (implicit) *vtable;
-  int8_t    fShortLength;   // 0..127: length  <0: real length is in fUnion.fFields.fLength
-  uint8_t   fFlags;         // bit flags: see constants above
-  union StackBufferOrFields {
-    // fStackBuffer is used iff (fFlags&kUsingStackBuffer)
-    // else fFields is used
-    UChar     fStackBuffer [US_STACKBUF_SIZE]; // buffer for small strings
-    struct {
-      uint16_t  fPadding;   // align the following field at 8B (32b pointers) or 12B (64b)
-      int32_t   fLength;    // number of characters in fArray if >127; else undefined
-      UChar     *fArray;    // the Unicode data (aligned at 12B (32b pointers) or 16B (64b))
-      int32_t   fCapacity;  // sizeof fArray
-    } fFields;
-  } fUnion;
-};
-
-/**
- * Create a new UnicodeString with the concatenation of two others.
- *
- * @param s1 The first string to be copied to the new one.
- * @param s2 The second string to be copied to the new one, after s1.
- * @return UnicodeString(s1).append(s2)
- * @stable ICU 2.8
- */
-U_COMMON_API UnicodeString U_EXPORT2
-operator+ (const UnicodeString &s1, const UnicodeString &s2);
-
-//========================================
-// Inline members
-//========================================
-
-//========================================
-// Privates
-//========================================
-
-inline void
-UnicodeString::pinIndex(int32_t& start) const
-{
-  // pin index
-  if(start < 0) {
-    start = 0;
-  } else if(start > length()) {
-    start = length();
-  }
-}
-
-inline void
-UnicodeString::pinIndices(int32_t& start,
-                          int32_t& _length) const
-{
-  // pin indices
-  int32_t len = length();
-  if(start < 0) {
-    start = 0;
-  } else if(start > len) {
-    start = len;
-  }
-  if(_length < 0) {
-    _length = 0;
-  } else if(_length > (len - start)) {
-    _length = (len - start);
-  }
-}
-
-inline UChar*
-UnicodeString::getArrayStart()
-{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; }
-
-inline const UChar*
-UnicodeString::getArrayStart() const
-{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; }
-
-//========================================
-// Read-only implementation methods
-//========================================
-inline int32_t
-UnicodeString::length() const
-{ return fShortLength>=0 ? fShortLength : fUnion.fFields.fLength; }
-
-inline int32_t
-UnicodeString::getCapacity() const
-{ return (fFlags&kUsingStackBuffer) ? US_STACKBUF_SIZE : fUnion.fFields.fCapacity; }
-
-inline int32_t
-UnicodeString::hashCode() const
-{ return doHashCode(); }
-
-inline UBool
-UnicodeString::isBogus() const
-{ return (UBool)(fFlags & kIsBogus); }
-
-inline UBool
-UnicodeString::isWritable() const
-{ return (UBool)!(fFlags&(kOpenGetBuffer|kIsBogus)); }
-
-inline UBool
-UnicodeString::isBufferWritable() const
-{
-  return (UBool)(
-      !(fFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) &&
-      (!(fFlags&kRefCounted) || refCount()==1));
-}
-
-inline const UChar *
-UnicodeString::getBuffer() const {
-  if(fFlags&(kIsBogus|kOpenGetBuffer)) {
-    return 0;
-  } else if(fFlags&kUsingStackBuffer) {
-    return fUnion.fStackBuffer;
-  } else {
-    return fUnion.fFields.fArray;
-  }
-}
-
-//========================================
-// Read-only alias methods
-//========================================
-inline int8_t
-UnicodeString::doCompare(int32_t start,
-              int32_t thisLength,
-              const UnicodeString& srcText,
-              int32_t srcStart,
-              int32_t srcLength) const
-{
-  if(srcText.isBogus()) {
-    return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
-  } else {
-    srcText.pinIndices(srcStart, srcLength);
-    return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
-  }
-}
-
-inline UBool
-UnicodeString::operator== (const UnicodeString& text) const
-{
-  if(isBogus()) {
-    return text.isBogus();
-  } else {
-    int32_t len = length(), textLength = text.length();
-    return
-      !text.isBogus() &&
-      len == textLength &&
-      doCompare(0, len, text, 0, textLength) == 0;
-  }
-}
-
-inline UBool
-UnicodeString::operator!= (const UnicodeString& text) const
-{ return (! operator==(text)); }
-
-inline UBool
-UnicodeString::operator> (const UnicodeString& text) const
-{ return doCompare(0, length(), text, 0, text.length()) == 1; }
-
-inline UBool
-UnicodeString::operator< (const UnicodeString& text) const
-{ return doCompare(0, length(), text, 0, text.length()) == -1; }
-
-inline UBool
-UnicodeString::operator>= (const UnicodeString& text) const
-{ return doCompare(0, length(), text, 0, text.length()) != -1; }
-
-inline UBool
-UnicodeString::operator<= (const UnicodeString& text) const
-{ return doCompare(0, length(), text, 0, text.length()) != 1; }
-
-inline int8_t
-UnicodeString::compare(const UnicodeString& text) const
-{ return doCompare(0, length(), text, 0, text.length()); }
-
-inline int8_t
-UnicodeString::compare(int32_t start,
-               int32_t _length,
-               const UnicodeString& srcText) const
-{ return doCompare(start, _length, srcText, 0, srcText.length()); }
-
-inline int8_t
-UnicodeString::compare(const UChar *srcChars,
-               int32_t srcLength) const
-{ return doCompare(0, length(), srcChars, 0, srcLength); }
-
-inline int8_t
-UnicodeString::compare(int32_t start,
-               int32_t _length,
-               const UnicodeString& srcText,
-               int32_t srcStart,
-               int32_t srcLength) const
-{ return doCompare(start, _length, srcText, srcStart, srcLength); }
-
-inline int8_t
-UnicodeString::compare(int32_t start,
-               int32_t _length,
-               const UChar *srcChars) const
-{ return doCompare(start, _length, srcChars, 0, _length); }
-
-inline int8_t
-UnicodeString::compare(int32_t start,
-               int32_t _length,
-               const UChar *srcChars,
-               int32_t srcStart,
-               int32_t srcLength) const
-{ return doCompare(start, _length, srcChars, srcStart, srcLength); }
-
-inline int8_t
-UnicodeString::compareBetween(int32_t start,
-                  int32_t limit,
-                  const UnicodeString& srcText,
-                  int32_t srcStart,
-                  int32_t srcLimit) const
-{ return doCompare(start, limit - start,
-           srcText, srcStart, srcLimit - srcStart); }
-
-inline int8_t
-UnicodeString::doCompareCodePointOrder(int32_t start,
-                                       int32_t thisLength,
-                                       const UnicodeString& srcText,
-                                       int32_t srcStart,
-                                       int32_t srcLength) const
-{
-  if(srcText.isBogus()) {
-    return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
-  } else {
-    srcText.pinIndices(srcStart, srcLength);
-    return doCompareCodePointOrder(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
-  }
-}
-
-inline int8_t
-UnicodeString::compareCodePointOrder(const UnicodeString& text) const
-{ return doCompareCodePointOrder(0, length(), text, 0, text.length()); }
-
-inline int8_t
-UnicodeString::compareCodePointOrder(int32_t start,
-                                     int32_t _length,
-                                     const UnicodeString& srcText) const
-{ return doCompareCodePointOrder(start, _length, srcText, 0, srcText.length()); }
-
-inline int8_t
-UnicodeString::compareCodePointOrder(const UChar *srcChars,
-                                     int32_t srcLength) const
-{ return doCompareCodePointOrder(0, length(), srcChars, 0, srcLength); }
-
-inline int8_t
-UnicodeString::compareCodePointOrder(int32_t start,
-                                     int32_t _length,
-                                     const UnicodeString& srcText,
-                                     int32_t srcStart,
-                                     int32_t srcLength) const
-{ return doCompareCodePointOrder(start, _length, srcText, srcStart, srcLength); }
-
-inline int8_t
-UnicodeString::compareCodePointOrder(int32_t start,
-                                     int32_t _length,
-                                     const UChar *srcChars) const
-{ return doCompareCodePointOrder(start, _length, srcChars, 0, _length); }
-
-inline int8_t
-UnicodeString::compareCodePointOrder(int32_t start,
-                                     int32_t _length,
-                                     const UChar *srcChars,
-                                     int32_t srcStart,
-                                     int32_t srcLength) const
-{ return doCompareCodePointOrder(start, _length, srcChars, srcStart, srcLength); }
-
-inline int8_t
-UnicodeString::compareCodePointOrderBetween(int32_t start,
-                                            int32_t limit,
-                                            const UnicodeString& srcText,
-                                            int32_t srcStart,
-                                            int32_t srcLimit) const
-{ return doCompareCodePointOrder(start, limit - start,
-           srcText, srcStart, srcLimit - srcStart); }
-
-inline int8_t
-UnicodeString::doCaseCompare(int32_t start,
-                             int32_t thisLength,
-                             const UnicodeString &srcText,
-                             int32_t srcStart,
-                             int32_t srcLength,
-                             uint32_t options) const
-{
-  if(srcText.isBogus()) {
-    return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
-  } else {
-    srcText.pinIndices(srcStart, srcLength);
-    return doCaseCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength, options);
-  }
-}
-
-inline int8_t
-UnicodeString::caseCompare(const UnicodeString &text, uint32_t options) const {
-  return doCaseCompare(0, length(), text, 0, text.length(), options);
-}
-
-inline int8_t
-UnicodeString::caseCompare(int32_t start,
-                           int32_t _length,
-                           const UnicodeString &srcText,
-                           uint32_t options) const {
-  return doCaseCompare(start, _length, srcText, 0, srcText.length(), options);
-}
-
-inline int8_t
-UnicodeString::caseCompare(const UChar *srcChars,
-                           int32_t srcLength,
-                           uint32_t options) const {
-  return doCaseCompare(0, length(), srcChars, 0, srcLength, options);
-}
-
-inline int8_t
-UnicodeString::caseCompare(int32_t start,
-                           int32_t _length,
-                           const UnicodeString &srcText,
-                           int32_t srcStart,
-                           int32_t srcLength,
-                           uint32_t options) const {
-  return doCaseCompare(start, _length, srcText, srcStart, srcLength, options);
-}
-
-inline int8_t
-UnicodeString::caseCompare(int32_t start,
-                           int32_t _length,
-                           const UChar *srcChars,
-                           uint32_t options) const {
-  return doCaseCompare(start, _length, srcChars, 0, _length, options);
-}
-
-inline int8_t
-UnicodeString::caseCompare(int32_t start,
-                           int32_t _length,
-                           const UChar *srcChars,
-                           int32_t srcStart,
-                           int32_t srcLength,
-                           uint32_t options) const {
-  return doCaseCompare(start, _length, srcChars, srcStart, srcLength, options);
-}
-
-inline int8_t
-UnicodeString::caseCompareBetween(int32_t start,
-                                  int32_t limit,
-                                  const UnicodeString &srcText,
-                                  int32_t srcStart,
-                                  int32_t srcLimit,
-                                  uint32_t options) const {
-  return doCaseCompare(start, limit - start, srcText, srcStart, srcLimit - srcStart, options);
-}
-
-inline int32_t
-UnicodeString::indexOf(const UnicodeString& srcText,
-               int32_t srcStart,
-               int32_t srcLength,
-               int32_t start,
-               int32_t _length) const
-{
-  if(!srcText.isBogus()) {
-    srcText.pinIndices(srcStart, srcLength);
-    if(srcLength > 0) {
-      return indexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length);
-    }
-  }
-  return -1;
-}
-
-inline int32_t
-UnicodeString::indexOf(const UnicodeString& text) const
-{ return indexOf(text, 0, text.length(), 0, length()); }
-
-inline int32_t
-UnicodeString::indexOf(const UnicodeString& text,
-               int32_t start) const {
-  pinIndex(start);
-  return indexOf(text, 0, text.length(), start, length() - start);
-}
-
-inline int32_t
-UnicodeString::indexOf(const UnicodeString& text,
-               int32_t start,
-               int32_t _length) const
-{ return indexOf(text, 0, text.length(), start, _length); }
-
-inline int32_t
-UnicodeString::indexOf(const UChar *srcChars,
-               int32_t srcLength,
-               int32_t start) const {
-  pinIndex(start);
-  return indexOf(srcChars, 0, srcLength, start, length() - start);
-}
-
-inline int32_t
-UnicodeString::indexOf(const UChar *srcChars,
-               int32_t srcLength,
-               int32_t start,
-               int32_t _length) const
-{ return indexOf(srcChars, 0, srcLength, start, _length); }
-
-inline int32_t
-UnicodeString::indexOf(UChar c,
-               int32_t start,
-               int32_t _length) const
-{ return doIndexOf(c, start, _length); }
-
-inline int32_t
-UnicodeString::indexOf(UChar32 c,
-               int32_t start,
-               int32_t _length) const
-{ return doIndexOf(c, start, _length); }
-
-inline int32_t
-UnicodeString::indexOf(UChar c) const
-{ return doIndexOf(c, 0, length()); }
-
-inline int32_t
-UnicodeString::indexOf(UChar32 c) const
-{ return indexOf(c, 0, length()); }
-
-inline int32_t
-UnicodeString::indexOf(UChar c,
-               int32_t start) const {
-  pinIndex(start);
-  return doIndexOf(c, start, length() - start);
-}
-
-inline int32_t
-UnicodeString::indexOf(UChar32 c,
-               int32_t start) const {
-  pinIndex(start);
-  return indexOf(c, start, length() - start);
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(const UChar *srcChars,
-               int32_t srcLength,
-               int32_t start,
-               int32_t _length) const
-{ return lastIndexOf(srcChars, 0, srcLength, start, _length); }
-
-inline int32_t
-UnicodeString::lastIndexOf(const UChar *srcChars,
-               int32_t srcLength,
-               int32_t start) const {
-  pinIndex(start);
-  return lastIndexOf(srcChars, 0, srcLength, start, length() - start);
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(const UnicodeString& srcText,
-               int32_t srcStart,
-               int32_t srcLength,
-               int32_t start,
-               int32_t _length) const
-{
-  if(!srcText.isBogus()) {
-    srcText.pinIndices(srcStart, srcLength);
-    if(srcLength > 0) {
-      return lastIndexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length);
-    }
-  }
-  return -1;
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(const UnicodeString& text,
-               int32_t start,
-               int32_t _length) const
-{ return lastIndexOf(text, 0, text.length(), start, _length); }
-
-inline int32_t
-UnicodeString::lastIndexOf(const UnicodeString& text,
-               int32_t start) const {
-  pinIndex(start);
-  return lastIndexOf(text, 0, text.length(), start, length() - start);
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(const UnicodeString& text) const
-{ return lastIndexOf(text, 0, text.length(), 0, length()); }
-
-inline int32_t
-UnicodeString::lastIndexOf(UChar c,
-               int32_t start,
-               int32_t _length) const
-{ return doLastIndexOf(c, start, _length); }
-
-inline int32_t
-UnicodeString::lastIndexOf(UChar32 c,
-               int32_t start,
-               int32_t _length) const {
-  return doLastIndexOf(c, start, _length);
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(UChar c) const
-{ return doLastIndexOf(c, 0, length()); }
-
-inline int32_t
-UnicodeString::lastIndexOf(UChar32 c) const {
-  return lastIndexOf(c, 0, length());
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(UChar c,
-               int32_t start) const {
-  pinIndex(start);
-  return doLastIndexOf(c, start, length() - start);
-}
-
-inline int32_t
-UnicodeString::lastIndexOf(UChar32 c,
-               int32_t start) const {
-  pinIndex(start);
-  return lastIndexOf(c, start, length() - start);
-}
-
-inline UBool
-UnicodeString::startsWith(const UnicodeString& text) const
-{ return compare(0, text.length(), text, 0, text.length()) == 0; }
-
-inline UBool
-UnicodeString::startsWith(const UnicodeString& srcText,
-              int32_t srcStart,
-              int32_t srcLength) const
-{ return doCompare(0, srcLength, srcText, srcStart, srcLength) == 0; }
-
-inline UBool
-UnicodeString::startsWith(const UChar *srcChars,
-              int32_t srcLength) const
-{ return doCompare(0, srcLength, srcChars, 0, srcLength) == 0; }
-
-inline UBool
-UnicodeString::startsWith(const UChar *srcChars,
-              int32_t srcStart,
-              int32_t srcLength) const
-{ return doCompare(0, srcLength, srcChars, srcStart, srcLength) == 0;}
-
-inline UBool
-UnicodeString::endsWith(const UnicodeString& text) const
-{ return doCompare(length() - text.length(), text.length(),
-           text, 0, text.length()) == 0; }
-
-inline UBool
-UnicodeString::endsWith(const UnicodeString& srcText,
-            int32_t srcStart,
-            int32_t srcLength) const {
-  srcText.pinIndices(srcStart, srcLength);
-  return doCompare(length() - srcLength, srcLength,
-                   srcText, srcStart, srcLength) == 0;
-}
-
-inline UBool
-UnicodeString::endsWith(const UChar *srcChars,
-            int32_t srcLength) const {
-  if(srcLength < 0) {
-    srcLength = u_strlen(srcChars);
-  }
-  return doCompare(length() - srcLength, srcLength,
-                   srcChars, 0, srcLength) == 0;
-}
-
-inline UBool
-UnicodeString::endsWith(const UChar *srcChars,
-            int32_t srcStart,
-            int32_t srcLength) const {
-  if(srcLength < 0) {
-    srcLength = u_strlen(srcChars + srcStart);
-  }
-  return doCompare(length() - srcLength, srcLength,
-                   srcChars, srcStart, srcLength) == 0;
-}
-
-//========================================
-// replace
-//========================================
-inline UnicodeString&
-UnicodeString::replace(int32_t start,
-               int32_t _length,
-               const UnicodeString& srcText)
-{ return doReplace(start, _length, srcText, 0, srcText.length()); }
-
-inline UnicodeString&
-UnicodeString::replace(int32_t start,
-               int32_t _length,
-               const UnicodeString& srcText,
-               int32_t srcStart,
-               int32_t srcLength)
-{ return doReplace(start, _length, srcText, srcStart, srcLength); }
-
-inline UnicodeString&
-UnicodeString::replace(int32_t start,
-               int32_t _length,
-               const UChar *srcChars,
-               int32_t srcLength)
-{ return doReplace(start, _length, srcChars, 0, srcLength); }
-
-inline UnicodeString&
-UnicodeString::replace(int32_t start,
-               int32_t _length,
-               const UChar *srcChars,
-               int32_t srcStart,
-               int32_t srcLength)
-{ return doReplace(start, _length, srcChars, srcStart, srcLength); }
-
-inline UnicodeString&
-UnicodeString::replace(int32_t start,
-               int32_t _length,
-               UChar srcChar)
-{ return doReplace(start, _length, &srcChar, 0, 1); }
-
-inline UnicodeString&
-UnicodeString::replace(int32_t start,
-               int32_t _length,
-               UChar32 srcChar) {
-  UChar buffer[U16_MAX_LENGTH];
-  int32_t count = 0;
-  UBool isError = FALSE;
-  U16_APPEND(buffer, count, U16_MAX_LENGTH, srcChar, isError);
-  (void) isError;
-  return doReplace(start, _length, buffer, 0, count);
-}
-
-inline UnicodeString&
-UnicodeString::replaceBetween(int32_t start,
-                  int32_t limit,
-                  const UnicodeString& srcText)
-{ return doReplace(start, limit - start, srcText, 0, srcText.length()); }
-
-inline UnicodeString&
-UnicodeString::replaceBetween(int32_t start,
-                  int32_t limit,
-                  const UnicodeString& srcText,
-                  int32_t srcStart,
-                  int32_t srcLimit)
-{ return doReplace(start, limit - start, srcText, srcStart, srcLimit - srcStart); }
-
-inline UnicodeString&
-UnicodeString::findAndReplace(const UnicodeString& oldText,
-                  const UnicodeString& newText)
-{ return findAndReplace(0, length(), oldText, 0, oldText.length(),
-            newText, 0, newText.length()); }
-
-inline UnicodeString&
-UnicodeString::findAndReplace(int32_t start,
-                  int32_t _length,
-                  const UnicodeString& oldText,
-                  const UnicodeString& newText)
-{ return findAndReplace(start, _length, oldText, 0, oldText.length(),
-            newText, 0, newText.length()); }
-
-// ============================
-// extract
-// ============================
-inline void
-UnicodeString::doExtract(int32_t start,
-             int32_t _length,
-             UnicodeString& target) const
-{ target.replace(0, target.length(), *this, start, _length); }
-
-inline void
-UnicodeString::extract(int32_t start,
-               int32_t _length,
-               UChar *target,
-               int32_t targetStart) const
-{ doExtract(start, _length, target, targetStart); }
-
-inline void
-UnicodeString::extract(int32_t start,
-               int32_t _length,
-               UnicodeString& target) const
-{ doExtract(start, _length, target); }
-
-#if !UCONFIG_NO_CONVERSION
-
-inline int32_t
-UnicodeString::extract(int32_t start,
-               int32_t _length,
-               char *dst,
-               const char *codepage) const
-
-{
-  // This dstSize value will be checked explicitly
-#if defined(__GNUC__)
-  // Ticket #7039: Clip length to the maximum valid length to the end of addressable memory given the starting address
-  // This is only an issue when using GCC and certain optimizations are turned on.
-  return extract(start, _length, dst, dst!=0 ? ((dst >= (char*)((size_t)-1) - UINT32_MAX) ? static_cast<unsigned int>((((char*)UINT32_MAX) - dst)) : UINT32_MAX) : 0, codepage);
-#else
-  return extract(start, _length, dst, dst!=0 ? 0xffffffff : 0, codepage);
-#endif
-}
-
-#endif
-
-inline void
-UnicodeString::extractBetween(int32_t start,
-                  int32_t limit,
-                  UChar *dst,
-                  int32_t dstStart) const {
-  pinIndex(start);
-  pinIndex(limit);
-  doExtract(start, limit - start, dst, dstStart);
-}
-
-inline UnicodeString
-UnicodeString::tempSubStringBetween(int32_t start, int32_t limit) const {
-    return tempSubString(start, limit - start);
-}
-
-inline UChar
-UnicodeString::doCharAt(int32_t offset) const
-{
-  if((uint32_t)offset < (uint32_t)length()) {
-    return getArrayStart()[offset];
-  } else {
-    return kInvalidUChar;
-  }
-}
-
-inline UChar
-UnicodeString::charAt(int32_t offset) const
-{ return doCharAt(offset); }
-
-inline UChar
-UnicodeString::operator[] (int32_t offset) const
-{ return doCharAt(offset); }
-
-inline UChar32
-UnicodeString::char32At(int32_t offset) const
-{
-  int32_t len = length();
-  if((uint32_t)offset < (uint32_t)len) {
-    const UChar *array = getArrayStart();
-    UChar32 c;
-    U16_GET(array, 0, offset, len, c);
-    return c;
-  } else {
-    return kInvalidUChar;
-  }
-}
-
-inline int32_t
-UnicodeString::getChar32Start(int32_t offset) const {
-  if((uint32_t)offset < (uint32_t)length()) {
-    const UChar *array = getArrayStart();
-    U16_SET_CP_START(array, 0, offset);
-    return offset;
-  } else {
-    return 0;
-  }
-}
-
-inline int32_t
-UnicodeString::getChar32Limit(int32_t offset) const {
-  int32_t len = length();
-  if((uint32_t)offset < (uint32_t)len) {
-    const UChar *array = getArrayStart();
-    U16_SET_CP_LIMIT(array, 0, offset, len);
-    return offset;
-  } else {
-    return len;
-  }
-}
-
-inline UBool
-UnicodeString::isEmpty() const {
-  return fShortLength == 0;
-}
-
-//========================================
-// Write implementation methods
-//========================================
-inline void
-UnicodeString::setLength(int32_t len) {
-  if(len <= 127) {
-    fShortLength = (int8_t)len;
-  } else {
-    fShortLength = (int8_t)-1;
-    fUnion.fFields.fLength = len;
-  }
-}
-
-inline void
-UnicodeString::setToEmpty() {
-  fShortLength = 0;
-  fFlags = kShortString;
-}
-
-inline void
-UnicodeString::setArray(UChar *array, int32_t len, int32_t capacity) {
-  setLength(len);
-  fUnion.fFields.fArray = array;
-  fUnion.fFields.fCapacity = capacity;
-}
-
-inline const UChar *
-UnicodeString::getTerminatedBuffer() {
-  if(!isWritable()) {
-    return 0;
-  } else {
-    UChar *array = getArrayStart();
-    int32_t len = length();
-    if(len < getCapacity() && ((fFlags&kRefCounted) == 0 || refCount() == 1)) {
-      /*
-       * kRefCounted: Do not write the NUL if the buffer is shared.
-       * That is mostly safe, except when the length of one copy was modified
-       * without copy-on-write, e.g., via truncate(newLength) or remove(void).
-       * Then the NUL would be written into the middle of another copy's string.
-       */
-      if(!(fFlags&kBufferIsReadonly)) {
-        /*
-         * We must not write to a readonly buffer, but it is known to be
-         * NUL-terminated if len<capacity.
-         * A shared, allocated buffer (refCount()>1) must not have its contents
-         * modified, but the NUL at [len] is beyond the string contents,
-         * and multiple string objects and threads writing the same NUL into the
-         * same location is harmless.
-         * In all other cases, the buffer is fully writable and it is anyway safe
-         * to write the NUL.
-         *
-         * Note: An earlier version of this code tested whether there is a NUL
-         * at [len] already, but, while safe, it generated lots of warnings from
-         * tools like valgrind and Purify.
-         */
-        array[len] = 0;
-      }
-      return array;
-    } else if(cloneArrayIfNeeded(len+1)) {
-      array = getArrayStart();
-      array[len] = 0;
-      return array;
-    } else {
-      return 0;
-    }
-  }
-}
-
-inline UnicodeString&
-UnicodeString::operator= (UChar ch)
-{ return doReplace(0, length(), &ch, 0, 1); }
-
-inline UnicodeString&
-UnicodeString::operator= (UChar32 ch)
-{ return replace(0, length(), ch); }
-
-inline UnicodeString&
-UnicodeString::setTo(const UnicodeString& srcText,
-             int32_t srcStart,
-             int32_t srcLength)
-{
-  unBogus();
-  return doReplace(0, length(), srcText, srcStart, srcLength);
-}
-
-inline UnicodeString&
-UnicodeString::setTo(const UnicodeString& srcText,
-             int32_t srcStart)
-{
-  unBogus();
-  srcText.pinIndex(srcStart);
-  return doReplace(0, length(), srcText, srcStart, srcText.length() - srcStart);
-}
-
-inline UnicodeString&
-UnicodeString::setTo(const UnicodeString& srcText)
-{
-  unBogus();
-  return doReplace(0, length(), srcText, 0, srcText.length());
-}
-
-inline UnicodeString&
-UnicodeString::setTo(const UChar *srcChars,
-             int32_t srcLength)
-{
-  unBogus();
-  return doReplace(0, length(), srcChars, 0, srcLength);
-}
-
-inline UnicodeString&
-UnicodeString::setTo(UChar srcChar)
-{
-  unBogus();
-  return doReplace(0, length(), &srcChar, 0, 1);
-}
-
-inline UnicodeString&
-UnicodeString::setTo(UChar32 srcChar)
-{
-  unBogus();
-  return replace(0, length(), srcChar);
-}
-
-inline UnicodeString&
-UnicodeString::append(const UnicodeString& srcText,
-              int32_t srcStart,
-              int32_t srcLength)
-{ return doReplace(length(), 0, srcText, srcStart, srcLength); }
-
-inline UnicodeString&
-UnicodeString::append(const UnicodeString& srcText)
-{ return doReplace(length(), 0, srcText, 0, srcText.length()); }
-
-inline UnicodeString&
-UnicodeString::append(const UChar *srcChars,
-              int32_t srcStart,
-              int32_t srcLength)
-{ return doReplace(length(), 0, srcChars, srcStart, srcLength); }
-
-inline UnicodeString&
-UnicodeString::append(const UChar *srcChars,
-              int32_t srcLength)
-{ return doReplace(length(), 0, srcChars, 0, srcLength); }
-
-inline UnicodeString&
-UnicodeString::append(UChar srcChar)
-{ return doReplace(length(), 0, &srcChar, 0, 1); }
-
-inline UnicodeString&
-UnicodeString::append(UChar32 srcChar) {
-  UChar buffer[U16_MAX_LENGTH];
-  int32_t _length = 0;
-  UBool isError = FALSE;
-  U16_APPEND(buffer, _length, U16_MAX_LENGTH, srcChar, isError);
-  (void) isError;
-  return doReplace(length(), 0, buffer, 0, _length);
-}
-
-inline UnicodeString&
-UnicodeString::operator+= (UChar ch)
-{ return doReplace(length(), 0, &ch, 0, 1); }
-
-inline UnicodeString&
-UnicodeString::operator+= (UChar32 ch) {
-  return append(ch);
-}
-
-inline UnicodeString&
-UnicodeString::operator+= (const UnicodeString& srcText)
-{ return doReplace(length(), 0, srcText, 0, srcText.length()); }
-
-inline UnicodeString&
-UnicodeString::insert(int32_t start,
-              const UnicodeString& srcText,
-              int32_t srcStart,
-              int32_t srcLength)
-{ return doReplace(start, 0, srcText, srcStart, srcLength); }
-
-inline UnicodeString&
-UnicodeString::insert(int32_t start,
-              const UnicodeString& srcText)
-{ return doReplace(start, 0, srcText, 0, srcText.length()); }
-
-inline UnicodeString&
-UnicodeString::insert(int32_t start,
-              const UChar *srcChars,
-              int32_t srcStart,
-              int32_t srcLength)
-{ return doReplace(start, 0, srcChars, srcStart, srcLength); }
-
-inline UnicodeString&
-UnicodeString::insert(int32_t start,
-              const UChar *srcChars,
-              int32_t srcLength)
-{ return doReplace(start, 0, srcChars, 0, srcLength); }
-
-inline UnicodeString&
-UnicodeString::insert(int32_t start,
-              UChar srcChar)
-{ return doReplace(start, 0, &srcChar, 0, 1); }
-
-inline UnicodeString&
-UnicodeString::insert(int32_t start,
-              UChar32 srcChar)
-{ return replace(start, 0, srcChar); }
-
-
-inline UnicodeString&
-UnicodeString::remove()
-{
-  // remove() of a bogus string makes the string empty and non-bogus
-  // we also un-alias a read-only alias to deal with NUL-termination
-  // issues with getTerminatedBuffer()
-  if(fFlags & (kIsBogus|kBufferIsReadonly)) {
-    setToEmpty();
-  } else {
-    fShortLength = 0;
-  }
-  return *this;
-}
-
-inline UnicodeString&
-UnicodeString::remove(int32_t start,
-             int32_t _length)
-{
-    if(start <= 0 && _length == INT32_MAX) {
-        // remove(guaranteed everything) of a bogus string makes the string empty and non-bogus
-        return remove();
-    }
-    return doReplace(start, _length, NULL, 0, 0);
-}
-
-inline UnicodeString&
-UnicodeString::removeBetween(int32_t start,
-                int32_t limit)
-{ return doReplace(start, limit - start, NULL, 0, 0); }
-
-inline UnicodeString &
-UnicodeString::retainBetween(int32_t start, int32_t limit) {
-  truncate(limit);
-  return doReplace(0, start, NULL, 0, 0);
-}
-
-inline UBool
-UnicodeString::truncate(int32_t targetLength)
-{
-  if(isBogus() && targetLength == 0) {
-    // truncate(0) of a bogus string makes the string empty and non-bogus
-    unBogus();
-    return FALSE;
-  } else if((uint32_t)targetLength < (uint32_t)length()) {
-    setLength(targetLength);
-    if(fFlags&kBufferIsReadonly) {
-      fUnion.fFields.fCapacity = targetLength;  // not NUL-terminated any more
-    }
-    return TRUE;
-  } else {
-    return FALSE;
-  }
-}
-
-inline UnicodeString&
-UnicodeString::reverse()
-{ return doReverse(0, length()); }
-
-inline UnicodeString&
-UnicodeString::reverse(int32_t start,
-               int32_t _length)
-{ return doReverse(start, _length); }
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/unorm.h b/source/common/unicode/unorm.h
deleted file mode 100644
index fbb7b49..0000000
--- a/source/common/unicode/unorm.h
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (c) 1996-2010, International Business Machines Corporation
-*               and others. All Rights Reserved.
-*******************************************************************************
-* File unorm.h
-*
-* Created by: Vladimir Weinstein 12052000
-*
-* Modification history :
-*
-* Date        Name        Description
-* 02/01/01    synwee      Added normalization quickcheck enum and method.
-*/
-#ifndef UNORM_H
-#define UNORM_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-#include "unicode/uiter.h"
-#include "unicode/unorm2.h"
-
-/**
- * \file
- * \brief C API: Unicode Normalization 
- *
- * <h2>Unicode normalization API</h2>
- *
- * Note: This API has been replaced by the unorm2.h API and is only available
- * for backward compatibility. The functions here simply delegate to the
- * unorm2.h functions, for example unorm2_getInstance() and unorm2_normalize().
- * There is one exception: The new API does not provide a replacement for unorm_compare().
- *
- * <code>unorm_normalize</code> transforms Unicode text into an equivalent composed or
- * decomposed form, allowing for easier sorting and searching of text.
- * <code>unorm_normalize</code> supports the standard normalization forms described in
- * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode">
- * Unicode Standard Annex #15: Unicode Normalization Forms</a>.
- *
- * Characters with accents or other adornments can be encoded in
- * several different ways in Unicode.  For example, take the character A-acute.
- * In Unicode, this can be encoded as a single character (the
- * "composed" form):
- *
- * \code
- *      00C1    LATIN CAPITAL LETTER A WITH ACUTE
- * \endcode
- *
- * or as two separate characters (the "decomposed" form):
- *
- * \code
- *      0041    LATIN CAPITAL LETTER A
- *      0301    COMBINING ACUTE ACCENT
- * \endcode
- *
- * To a user of your program, however, both of these sequences should be
- * treated as the same "user-level" character "A with acute accent".  When you are searching or
- * comparing text, you must ensure that these two sequences are treated 
- * equivalently.  In addition, you must handle characters with more than one
- * accent.  Sometimes the order of a character's combining accents is
- * significant, while in other cases accent sequences in different orders are
- * really equivalent.
- *
- * Similarly, the string "ffi" can be encoded as three separate letters:
- *
- * \code
- *      0066    LATIN SMALL LETTER F
- *      0066    LATIN SMALL LETTER F
- *      0069    LATIN SMALL LETTER I
- * \endcode
- *
- * or as the single character
- *
- * \code
- *      FB03    LATIN SMALL LIGATURE FFI
- * \endcode
- *
- * The ffi ligature is not a distinct semantic character, and strictly speaking
- * it shouldn't be in Unicode at all, but it was included for compatibility
- * with existing character sets that already provided it.  The Unicode standard
- * identifies such characters by giving them "compatibility" decompositions
- * into the corresponding semantic characters.  When sorting and searching, you
- * will often want to use these mappings.
- *
- * <code>unorm_normalize</code> helps solve these problems by transforming text into the
- * canonical composed and decomposed forms as shown in the first example above.  
- * In addition, you can have it perform compatibility decompositions so that 
- * you can treat compatibility characters the same as their equivalents.
- * Finally, <code>unorm_normalize</code> rearranges accents into the proper canonical
- * order, so that you do not have to worry about accent rearrangement on your
- * own.
- *
- * Form FCD, "Fast C or D", is also designed for collation.
- * It allows to work on strings that are not necessarily normalized
- * with an algorithm (like in collation) that works under "canonical closure", i.e., it treats precomposed
- * characters and their decomposed equivalents the same.
- *
- * It is not a normalization form because it does not provide for uniqueness of representation. Multiple strings
- * may be canonically equivalent (their NFDs are identical) and may all conform to FCD without being identical
- * themselves.
- *
- * The form is defined such that the "raw decomposition", the recursive canonical decomposition of each character,
- * results in a string that is canonically ordered. This means that precomposed characters are allowed for as long
- * as their decompositions do not need canonical reordering.
- *
- * Its advantage for a process like collation is that all NFD and most NFC texts - and many unnormalized texts -
- * already conform to FCD and do not need to be normalized (NFD) for such a process. The FCD quick check will
- * return UNORM_YES for most strings in practice.
- *
- * unorm_normalize(UNORM_FCD) may be implemented with UNORM_NFD.
- *
- * For more details on FCD see the collation design document:
- * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
- *
- * ICU collation performs either NFD or FCD normalization automatically if normalization
- * is turned on for the collator object.
- * Beyond collation and string search, normalized strings may be useful for string equivalence comparisons,
- * transliteration/transcription, unique representations, etc.
- *
- * The W3C generally recommends to exchange texts in NFC.
- * Note also that most legacy character encodings use only precomposed forms and often do not
- * encode any combining marks by themselves. For conversion to such character encodings the
- * Unicode text needs to be normalized to NFC.
- * For more usage examples, see the Unicode Standard Annex.
- */
-
-/**
- * Constants for normalization modes.
- * @stable ICU 2.0
- */
-typedef enum {
-  /** No decomposition/composition. @stable ICU 2.0 */
-  UNORM_NONE = 1, 
-  /** Canonical decomposition. @stable ICU 2.0 */
-  UNORM_NFD = 2,
-  /** Compatibility decomposition. @stable ICU 2.0 */
-  UNORM_NFKD = 3,
-  /** Canonical decomposition followed by canonical composition. @stable ICU 2.0 */
-  UNORM_NFC = 4,
-  /** Default normalization. @stable ICU 2.0 */
-  UNORM_DEFAULT = UNORM_NFC, 
-  /** Compatibility decomposition followed by canonical composition. @stable ICU 2.0 */
-  UNORM_NFKC =5,
-  /** "Fast C or D" form. @stable ICU 2.0 */
-  UNORM_FCD = 6,
-
-  /** One more than the highest normalization mode constant. @stable ICU 2.0 */
-  UNORM_MODE_COUNT
-} UNormalizationMode;
-
-/**
- * Constants for options flags for normalization.
- * Use 0 for default options,
- * including normalization according to the Unicode version
- * that is currently supported by ICU (see u_getUnicodeVersion).
- * @stable ICU 2.6
- */
-enum {
-    /**
-     * Options bit set value to select Unicode 3.2 normalization
-     * (except NormalizationCorrections).
-     * At most one Unicode version can be selected at a time.
-     * @stable ICU 2.6
-     */
-    UNORM_UNICODE_3_2=0x20
-};
-
-/**
- * Lowest-order bit number of unorm_compare() options bits corresponding to
- * normalization options bits.
- *
- * The options parameter for unorm_compare() uses most bits for
- * itself and for various comparison and folding flags.
- * The most significant bits, however, are shifted down and passed on
- * to the normalization implementation.
- * (That is, from unorm_compare(..., options, ...),
- * options>>UNORM_COMPARE_NORM_OPTIONS_SHIFT will be passed on to the
- * internal normalization functions.)
- *
- * @see unorm_compare
- * @stable ICU 2.6
- */
-#define UNORM_COMPARE_NORM_OPTIONS_SHIFT 20
-
-/**
- * Normalize a string.
- * The string will be normalized according the specified normalization mode
- * and options.
- * The source and result buffers must not be the same, nor overlap.
- *
- * @param source The string to normalize.
- * @param sourceLength The length of source, or -1 if NUL-terminated.
- * @param mode The normalization mode; one of UNORM_NONE, 
- *             UNORM_NFD, UNORM_NFC, UNORM_NFKC, UNORM_NFKD, UNORM_DEFAULT.
- * @param options The normalization options, ORed together (0 for no options).
- * @param result A pointer to a buffer to receive the result string.
- *               The result string is NUL-terminated if possible.
- * @param resultLength The maximum size of result.
- * @param status A pointer to a UErrorCode to receive any errors.
- * @return The total buffer size needed; if greater than resultLength,
- *         the output was truncated, and the error code is set to U_BUFFER_OVERFLOW_ERROR.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-unorm_normalize(const UChar *source, int32_t sourceLength,
-                UNormalizationMode mode, int32_t options,
-                UChar *result, int32_t resultLength,
-                UErrorCode *status);
-
-/**
- * Performing quick check on a string, to quickly determine if the string is 
- * in a particular normalization format.
- * Three types of result can be returned UNORM_YES, UNORM_NO or
- * UNORM_MAYBE. Result UNORM_YES indicates that the argument
- * string is in the desired normalized format, UNORM_NO determines that
- * argument string is not in the desired normalized format. A 
- * UNORM_MAYBE result indicates that a more thorough check is required, 
- * the user may have to put the string in its normalized form and compare the 
- * results.
- *
- * @param source       string for determining if it is in a normalized format
- * @param sourcelength length of source to test, or -1 if NUL-terminated
- * @param mode         which normalization form to test for
- * @param status       a pointer to a UErrorCode to receive any errors
- * @return UNORM_YES, UNORM_NO or UNORM_MAYBE
- *
- * @see unorm_isNormalized
- * @stable ICU 2.0
- */
-U_STABLE UNormalizationCheckResult U_EXPORT2
-unorm_quickCheck(const UChar *source, int32_t sourcelength,
-                 UNormalizationMode mode,
-                 UErrorCode *status);
-
-/**
- * Performing quick check on a string; same as unorm_quickCheck but
- * takes an extra options parameter like most normalization functions.
- *
- * @param src        String that is to be tested if it is in a normalization format.
- * @param srcLength  Length of source to test, or -1 if NUL-terminated.
- * @param mode       Which normalization form to test for.
- * @param options    The normalization options, ORed together (0 for no options).
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return UNORM_YES, UNORM_NO or UNORM_MAYBE
- *
- * @see unorm_quickCheck
- * @see unorm_isNormalized
- * @stable ICU 2.6
- */
-U_STABLE UNormalizationCheckResult U_EXPORT2
-unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, 
-                            UNormalizationMode mode, int32_t options,
-                            UErrorCode *pErrorCode);
-
-/**
- * Test if a string is in a given normalization form.
- * This is semantically equivalent to source.equals(normalize(source, mode)) .
- *
- * Unlike unorm_quickCheck(), this function returns a definitive result,
- * never a "maybe".
- * For NFD, NFKD, and FCD, both functions work exactly the same.
- * For NFC and NFKC where quickCheck may return "maybe", this function will
- * perform further tests to arrive at a TRUE/FALSE result.
- *
- * @param src        String that is to be tested if it is in a normalization format.
- * @param srcLength  Length of source to test, or -1 if NUL-terminated.
- * @param mode       Which normalization form to test for.
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return Boolean value indicating whether the source string is in the
- *         "mode" normalization form.
- *
- * @see unorm_quickCheck
- * @stable ICU 2.2
- */
-U_STABLE UBool U_EXPORT2
-unorm_isNormalized(const UChar *src, int32_t srcLength,
-                   UNormalizationMode mode,
-                   UErrorCode *pErrorCode);
-
-/**
- * Test if a string is in a given normalization form; same as unorm_isNormalized but
- * takes an extra options parameter like most normalization functions.
- *
- * @param src        String that is to be tested if it is in a normalization format.
- * @param srcLength  Length of source to test, or -1 if NUL-terminated.
- * @param mode       Which normalization form to test for.
- * @param options    The normalization options, ORed together (0 for no options).
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return Boolean value indicating whether the source string is in the
- *         "mode/options" normalization form.
- *
- * @see unorm_quickCheck
- * @see unorm_isNormalized
- * @stable ICU 2.6
- */
-U_STABLE UBool U_EXPORT2
-unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength,
-                              UNormalizationMode mode, int32_t options,
-                              UErrorCode *pErrorCode);
-
-/**
- * Iterative normalization forward.
- * This function (together with unorm_previous) is somewhat
- * similar to the C++ Normalizer class (see its non-static functions).
- *
- * Iterative normalization is useful when only a small portion of a longer
- * string/text needs to be processed.
- *
- * For example, the likelihood may be high that processing the first 10% of some
- * text will be sufficient to find certain data.
- * Another example: When one wants to concatenate two normalized strings and get a
- * normalized result, it is much more efficient to normalize just a small part of
- * the result around the concatenation place instead of re-normalizing everything.
- *
- * The input text is an instance of the C character iteration API UCharIterator.
- * It may wrap around a simple string, a CharacterIterator, a Replaceable, or any
- * other kind of text object.
- *
- * If a buffer overflow occurs, then the caller needs to reset the iterator to the
- * old index and call the function again with a larger buffer - if the caller cares
- * for the actual output.
- * Regardless of the output buffer, the iterator will always be moved to the next
- * normalization boundary.
- *
- * This function (like unorm_previous) serves two purposes:
- *
- * 1) To find the next boundary so that the normalization of the part of the text
- * from the current position to that boundary does not affect and is not affected
- * by the part of the text beyond that boundary.
- *
- * 2) To normalize the text up to the boundary.
- *
- * The second step is optional, per the doNormalize parameter.
- * It is omitted for operations like string concatenation, where the two adjacent
- * string ends need to be normalized together.
- * In such a case, the output buffer will just contain a copy of the text up to the
- * boundary.
- *
- * pNeededToNormalize is an output-only parameter. Its output value is only defined
- * if normalization was requested (doNormalize) and successful (especially, no
- * buffer overflow).
- * It is useful for operations like a normalizing transliterator, where one would
- * not want to replace a piece of text if it is not modified.
- *
- * If doNormalize==TRUE and pNeededToNormalize!=NULL then *pNeeded... is set TRUE
- * if the normalization was necessary.
- *
- * If doNormalize==FALSE then *pNeededToNormalize will be set to FALSE.
- *
- * If the buffer overflows, then *pNeededToNormalize will be undefined;
- * essentially, whenever U_FAILURE is true (like in buffer overflows), this result
- * will be undefined.
- *
- * @param src The input text in the form of a C character iterator.
- * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting.
- * @param destCapacity The number of UChars that fit into dest.
- * @param mode The normalization mode.
- * @param options The normalization options, ORed together (0 for no options).
- * @param doNormalize Indicates if the source text up to the next boundary
- *                    is to be normalized (TRUE) or just copied (FALSE).
- * @param pNeededToNormalize Output flag indicating if the normalization resulted in
- *                           different text from the input.
- *                           Not defined if an error occurs including buffer overflow.
- *                           Always FALSE if !doNormalize.
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return Length of output (number of UChars) when successful or buffer overflow.
- *
- * @see unorm_previous
- * @see unorm_normalize
- *
- * @stable ICU 2.1
- */
-U_STABLE int32_t U_EXPORT2
-unorm_next(UCharIterator *src,
-           UChar *dest, int32_t destCapacity,
-           UNormalizationMode mode, int32_t options,
-           UBool doNormalize, UBool *pNeededToNormalize,
-           UErrorCode *pErrorCode);
-
-/**
- * Iterative normalization backward.
- * This function (together with unorm_next) is somewhat
- * similar to the C++ Normalizer class (see its non-static functions).
- * For all details see unorm_next.
- *
- * @param src The input text in the form of a C character iterator.
- * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting.
- * @param destCapacity The number of UChars that fit into dest.
- * @param mode The normalization mode.
- * @param options The normalization options, ORed together (0 for no options).
- * @param doNormalize Indicates if the source text up to the next boundary
- *                    is to be normalized (TRUE) or just copied (FALSE).
- * @param pNeededToNormalize Output flag indicating if the normalization resulted in
- *                           different text from the input.
- *                           Not defined if an error occurs including buffer overflow.
- *                           Always FALSE if !doNormalize.
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return Length of output (number of UChars) when successful or buffer overflow.
- *
- * @see unorm_next
- * @see unorm_normalize
- *
- * @stable ICU 2.1
- */
-U_STABLE int32_t U_EXPORT2
-unorm_previous(UCharIterator *src,
-               UChar *dest, int32_t destCapacity,
-               UNormalizationMode mode, int32_t options,
-               UBool doNormalize, UBool *pNeededToNormalize,
-               UErrorCode *pErrorCode);
-
-/**
- * Concatenate normalized strings, making sure that the result is normalized as well.
- *
- * If both the left and the right strings are in
- * the normalization form according to "mode/options",
- * then the result will be
- *
- * \code
- *     dest=normalize(left+right, mode, options)
- * \endcode
- *
- * With the input strings already being normalized,
- * this function will use unorm_next() and unorm_previous()
- * to find the adjacent end pieces of the input strings.
- * Only the concatenation of these end pieces will be normalized and
- * then concatenated with the remaining parts of the input strings.
- *
- * It is allowed to have dest==left to avoid copying the entire left string.
- *
- * @param left Left source string, may be same as dest.
- * @param leftLength Length of left source string, or -1 if NUL-terminated.
- * @param right Right source string. Must not be the same as dest, nor overlap.
- * @param rightLength Length of right source string, or -1 if NUL-terminated.
- * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting.
- * @param destCapacity The number of UChars that fit into dest.
- * @param mode The normalization mode.
- * @param options The normalization options, ORed together (0 for no options).
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return Length of output (number of UChars) when successful or buffer overflow.
- *
- * @see unorm_normalize
- * @see unorm_next
- * @see unorm_previous
- *
- * @stable ICU 2.1
- */
-U_STABLE int32_t U_EXPORT2
-unorm_concatenate(const UChar *left, int32_t leftLength,
-                  const UChar *right, int32_t rightLength,
-                  UChar *dest, int32_t destCapacity,
-                  UNormalizationMode mode, int32_t options,
-                  UErrorCode *pErrorCode);
-
-/**
- * Option bit for unorm_compare:
- * Both input strings are assumed to fulfill FCD conditions.
- * @stable ICU 2.2
- */
-#define UNORM_INPUT_IS_FCD          0x20000
-
-/**
- * Option bit for unorm_compare:
- * Perform case-insensitive comparison.
- * @stable ICU 2.2
- */
-#define U_COMPARE_IGNORE_CASE       0x10000
-
-#ifndef U_COMPARE_CODE_POINT_ORDER
-/* see also unistr.h and ustring.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
-
-/**
- * Compare two strings for canonical equivalence.
- * Further options include case-insensitive comparison and
- * code point order (as opposed to code unit order).
- *
- * Canonical equivalence between two strings is defined as their normalized
- * forms (NFD or NFC) being identical.
- * This function compares strings incrementally instead of normalizing
- * (and optionally case-folding) both strings entirely,
- * improving performance significantly.
- *
- * Bulk normalization is only necessary if the strings do not fulfill the FCD
- * conditions. Only in this case, and only if the strings are relatively long,
- * is memory allocated temporarily.
- * For FCD strings and short non-FCD strings there is no memory allocation.
- *
- * Semantically, this is equivalent to
- *   strcmp[CodePointOrder](NFD(foldCase(NFD(s1))), NFD(foldCase(NFD(s2))))
- * where code point order and foldCase are all optional.
- *
- * UAX 21 2.5 Caseless Matching specifies that for a canonical caseless match
- * the case folding must be performed first, then the normalization.
- *
- * @param s1 First source string.
- * @param length1 Length of first source string, or -1 if NUL-terminated.
- *
- * @param s2 Second source string.
- * @param length2 Length of second source string, or -1 if NUL-terminated.
- *
- * @param options A bit set of options:
- *   - U_FOLD_CASE_DEFAULT or 0 is used for default options:
- *     Case-sensitive comparison in code unit order, and the input strings
- *     are quick-checked for FCD.
- *
- *   - UNORM_INPUT_IS_FCD
- *     Set if the caller knows that both s1 and s2 fulfill the FCD conditions.
- *     If not set, the function will quickCheck for FCD
- *     and normalize if necessary.
- *
- *   - U_COMPARE_CODE_POINT_ORDER
- *     Set to choose code point order instead of code unit order
- *     (see u_strCompare for details).
- *
- *   - U_COMPARE_IGNORE_CASE
- *     Set to compare strings case-insensitively using case folding,
- *     instead of case-sensitively.
- *     If set, then the following case folding options are used.
- *
- *   - Options as used with case-insensitive comparisons, currently:
- *
- *   - U_FOLD_CASE_EXCLUDE_SPECIAL_I
- *    (see u_strCaseCompare for details)
- *
- *   - regular normalization options shifted left by UNORM_COMPARE_NORM_OPTIONS_SHIFT
- *
- * @param pErrorCode ICU error code in/out parameter.
- *                   Must fulfill U_SUCCESS before the function call.
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @see unorm_normalize
- * @see UNORM_FCD
- * @see u_strCompare
- * @see u_strCaseCompare
- *
- * @stable ICU 2.2
- */
-U_STABLE int32_t U_EXPORT2
-unorm_compare(const UChar *s1, int32_t length1,
-              const UChar *s2, int32_t length2,
-              uint32_t options,
-              UErrorCode *pErrorCode);
-
-#endif /* #if !UCONFIG_NO_NORMALIZATION */
-
-#endif
diff --git a/source/common/unicode/unorm2.h b/source/common/unicode/unorm2.h
deleted file mode 100644
index a522b47..0000000
--- a/source/common/unicode/unorm2.h
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2009-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  unorm2.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2009dec15
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __UNORM2_H__
-#define __UNORM2_H__
-
-/**
- * \file
- * \brief C API: New API for Unicode Normalization.
- *
- * Unicode normalization functionality for standard Unicode normalization or
- * for using custom mapping tables.
- * All instances of UNormalizer2 are unmodifiable/immutable.
- * Instances returned by unorm2_getInstance() are singletons that must not be deleted by the caller.
- * For more details see the Normalizer2 C++ class.
- */
-
-#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
-#include "unicode/uset.h"
-
-/**
- * Constants for normalization modes.
- * For details about standard Unicode normalization forms
- * and about the algorithms which are also used with custom mapping tables
- * see http://www.unicode.org/unicode/reports/tr15/
- * @stable ICU 4.4
- */
-typedef enum {
-    /**
-     * Decomposition followed by composition.
-     * Same as standard NFC when using an "nfc" instance.
-     * Same as standard NFKC when using an "nfkc" instance.
-     * For details about standard Unicode normalization forms
-     * see http://www.unicode.org/unicode/reports/tr15/
-     * @stable ICU 4.4
-     */
-    UNORM2_COMPOSE,
-    /**
-     * Map, and reorder canonically.
-     * Same as standard NFD when using an "nfc" instance.
-     * Same as standard NFKD when using an "nfkc" instance.
-     * For details about standard Unicode normalization forms
-     * see http://www.unicode.org/unicode/reports/tr15/
-     * @stable ICU 4.4
-     */
-    UNORM2_DECOMPOSE,
-    /**
-     * "Fast C or D" form.
-     * If a string is in this form, then further decomposition <i>without reordering</i>
-     * would yield the same form as DECOMPOSE.
-     * Text in "Fast C or D" form can be processed efficiently with data tables
-     * that are "canonically closed", that is, that provide equivalent data for
-     * equivalent text, without having to be fully normalized.
-     * Not a standard Unicode normalization form.
-     * Not a unique form: Different FCD strings can be canonically equivalent.
-     * For details see http://www.unicode.org/notes/tn5/#FCD
-     * @stable ICU 4.4
-     */
-    UNORM2_FCD,
-    /**
-     * Compose only contiguously.
-     * Also known as "FCC" or "Fast C Contiguous".
-     * The result will often but not always be in NFC.
-     * The result will conform to FCD which is useful for processing.
-     * Not a standard Unicode normalization form.
-     * For details see http://www.unicode.org/notes/tn5/#FCC
-     * @stable ICU 4.4
-     */
-    UNORM2_COMPOSE_CONTIGUOUS
-} UNormalization2Mode;
-
-/**
- * Result values for normalization quick check functions.
- * For details see http://www.unicode.org/reports/tr15/#Detecting_Normalization_Forms
- * @stable ICU 2.0
- */
-typedef enum UNormalizationCheckResult {
-  /**
-   * The input string is not in the normalization form.
-   * @stable ICU 2.0
-   */
-  UNORM_NO,
-  /**
-   * The input string is in the normalization form.
-   * @stable ICU 2.0
-   */
-  UNORM_YES,
-  /**
-   * The input string may or may not be in the normalization form.
-   * This value is only returned for composition forms like NFC and FCC,
-   * when a backward-combining character is found for which the surrounding text
-   * would have to be analyzed further.
-   * @stable ICU 2.0
-   */
-  UNORM_MAYBE
-} UNormalizationCheckResult;
-
-/**
- * Opaque C service object type for the new normalization API.
- * @stable ICU 4.4
- */
-struct UNormalizer2;
-typedef struct UNormalizer2 UNormalizer2;  /**< C typedef for struct UNormalizer2. @stable ICU 4.4 */
-
-#if !UCONFIG_NO_NORMALIZATION
-
-/**
- * Returns a UNormalizer2 instance which uses the specified data file
- * (packageName/name similar to ucnv_openPackage() and ures_open()/ResourceBundle)
- * and which composes or decomposes text according to the specified mode.
- * Returns an unmodifiable singleton instance. Do not delete it.
- *
- * Use packageName=NULL for data files that are part of ICU's own data.
- * Use name="nfc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFC/NFD.
- * Use name="nfkc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFKC/NFKD.
- * Use name="nfkc_cf" and UNORM2_COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold.
- *
- * @param packageName NULL for ICU built-in data, otherwise application data package name
- * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file
- * @param mode normalization mode (compose or decompose etc.)
- * @param pErrorCode 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 requested UNormalizer2, if successful
- * @stable ICU 4.4
- */
-U_STABLE const UNormalizer2 * U_EXPORT2
-unorm2_getInstance(const char *packageName,
-                   const char *name,
-                   UNormalization2Mode mode,
-                   UErrorCode *pErrorCode);
-
-/**
- * Constructs a filtered normalizer wrapping any UNormalizer2 instance
- * and a filter set.
- * Both are aliased and must not be modified or deleted while this object
- * is used.
- * The filter set should be frozen; otherwise the performance will suffer greatly.
- * @param norm2 wrapped UNormalizer2 instance
- * @param filterSet USet which determines the characters to be normalized
- * @param pErrorCode 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 requested UNormalizer2, if successful
- * @stable ICU 4.4
- */
-U_STABLE UNormalizer2 * U_EXPORT2
-unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode *pErrorCode);
-
-/**
- * Closes a UNormalizer2 instance from unorm2_openFiltered().
- * Do not close instances from unorm2_getInstance()!
- * @param norm2 UNormalizer2 instance to be closed
- * @stable ICU 4.4
- */
-U_STABLE void U_EXPORT2
-unorm2_close(UNormalizer2 *norm2);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUNormalizer2Pointer
- * "Smart pointer" class, closes a UNormalizer2 via unorm2_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUNormalizer2Pointer, UNormalizer2, unorm2_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Writes the normalized form of the source string to the destination string
- * (replacing its contents) and returns the length of the destination string.
- * The source and destination strings must be different buffers.
- * @param norm2 UNormalizer2 instance
- * @param src source string
- * @param length length of the source string, or -1 if NUL-terminated
- * @param dest destination string; its contents is replaced with normalized src
- * @param capacity number of UChars that can be written to dest
- * @param pErrorCode 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 dest
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-unorm2_normalize(const UNormalizer2 *norm2,
-                 const UChar *src, int32_t length,
-                 UChar *dest, int32_t capacity,
-                 UErrorCode *pErrorCode);
-/**
- * Appends the normalized form of the second string to the first string
- * (merging them at the boundary) and returns the length of the first string.
- * The result is normalized if the first string was normalized.
- * The first and second strings must be different buffers.
- * @param norm2 UNormalizer2 instance
- * @param first string, should be normalized
- * @param firstLength length of the first string, or -1 if NUL-terminated
- * @param firstCapacity number of UChars that can be written to first
- * @param second string, will be normalized
- * @param secondLength length of the source string, or -1 if NUL-terminated
- * @param pErrorCode 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 first
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2,
-                                UChar *first, int32_t firstLength, int32_t firstCapacity,
-                                const UChar *second, int32_t secondLength,
-                                UErrorCode *pErrorCode);
-/**
- * Appends the second string to the first string
- * (merging them at the boundary) and returns the length of the first string.
- * The result is normalized if both the strings were normalized.
- * The first and second strings must be different buffers.
- * @param norm2 UNormalizer2 instance
- * @param first string, should be normalized
- * @param firstLength length of the first string, or -1 if NUL-terminated
- * @param firstCapacity number of UChars that can be written to first
- * @param second string, should be normalized
- * @param secondLength length of the source string, or -1 if NUL-terminated
- * @param pErrorCode 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 first
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-unorm2_append(const UNormalizer2 *norm2,
-              UChar *first, int32_t firstLength, int32_t firstCapacity,
-              const UChar *second, int32_t secondLength,
-              UErrorCode *pErrorCode);
-
-/**
- * Gets the decomposition mapping of c. Equivalent to unorm2_normalize(string(c))
- * on a UNORM2_DECOMPOSE UNormalizer2 instance, but much faster.
- * This function is independent of the mode of the UNormalizer2.
- * @param norm2 UNormalizer2 instance
- * @param c code point
- * @param decomposition String buffer which will be set to c's
- *                      decomposition mapping, if there is one.
- * @param capacity number of UChars that can be written to decomposition
- * @param pErrorCode 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 non-negative length of c's decomposition, if there is one; otherwise a negative value
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-unorm2_getDecomposition(const UNormalizer2 *norm2,
-                        UChar32 c, UChar *decomposition, int32_t capacity,
-                        UErrorCode *pErrorCode);
-
-/**
- * Tests if the string is normalized.
- * Internally, in cases where the quickCheck() method would return "maybe"
- * (which is only possible for the two COMPOSE modes) this method
- * resolves to "yes" or "no" to provide a definitive result,
- * at the cost of doing more work in those cases.
- * @param norm2 UNormalizer2 instance
- * @param s input string
- * @param length length of the string, or -1 if NUL-terminated
- * @param pErrorCode 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 TRUE if s is normalized
- * @stable ICU 4.4
- */
-U_STABLE UBool U_EXPORT2
-unorm2_isNormalized(const UNormalizer2 *norm2,
-                    const UChar *s, int32_t length,
-                    UErrorCode *pErrorCode);
-
-/**
- * Tests if the string is normalized.
- * For the two COMPOSE modes, the result could be "maybe" in cases that
- * would take a little more work to resolve definitively.
- * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster
- * combination of quick check + normalization, to avoid
- * re-checking the "yes" prefix.
- * @param norm2 UNormalizer2 instance
- * @param s input string
- * @param length length of the string, or -1 if NUL-terminated
- * @param pErrorCode 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 UNormalizationCheckResult
- * @stable ICU 4.4
- */
-U_STABLE UNormalizationCheckResult U_EXPORT2
-unorm2_quickCheck(const UNormalizer2 *norm2,
-                  const UChar *s, int32_t length,
-                  UErrorCode *pErrorCode);
-
-/**
- * Returns the end of the normalized substring of the input string.
- * In other words, with <code>end=spanQuickCheckYes(s, ec);</code>
- * the substring <code>UnicodeString(s, 0, end)</code>
- * will pass the quick check with a "yes" result.
- *
- * The returned end index is usually one or more characters before the
- * "no" or "maybe" character: The end index is at a normalization boundary.
- * (See the class documentation for more about normalization boundaries.)
- *
- * When the goal is a normalized string and most input strings are expected
- * to be normalized already, then call this method,
- * and if it returns a prefix shorter than the input string,
- * copy that prefix and use normalizeSecondAndAppend() for the remainder.
- * @param norm2 UNormalizer2 instance
- * @param s input string
- * @param length length of the string, or -1 if NUL-terminated
- * @param pErrorCode 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 "yes" span end index
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-unorm2_spanQuickCheckYes(const UNormalizer2 *norm2,
-                         const UChar *s, int32_t length,
-                         UErrorCode *pErrorCode);
-
-/**
- * Tests if the character always has a normalization boundary before it,
- * regardless of context.
- * For details see the Normalizer2 base class documentation.
- * @param norm2 UNormalizer2 instance
- * @param c character to test
- * @return TRUE if c has a normalization boundary before it
- * @stable ICU 4.4
- */
-U_STABLE UBool U_EXPORT2
-unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c);
-
-/**
- * Tests if the character always has a normalization boundary after it,
- * regardless of context.
- * For details see the Normalizer2 base class documentation.
- * @param norm2 UNormalizer2 instance
- * @param c character to test
- * @return TRUE if c has a normalization boundary after it
- * @stable ICU 4.4
- */
-U_STABLE UBool U_EXPORT2
-unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c);
-
-/**
- * Tests if the character is normalization-inert.
- * For details see the Normalizer2 base class documentation.
- * @param norm2 UNormalizer2 instance
- * @param c character to test
- * @return TRUE if c is normalization-inert
- * @stable ICU 4.4
- */
-U_STABLE UBool U_EXPORT2
-unorm2_isInert(const UNormalizer2 *norm2, UChar32 c);
-
-#endif  /* !UCONFIG_NO_NORMALIZATION */
-#endif  /* __UNORM2_H__ */
diff --git a/source/common/unicode/uobject.h b/source/common/unicode/uobject.h
deleted file mode 100644
index 27d4c84..0000000
--- a/source/common/unicode/uobject.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2002-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  uobject.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002jun26
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __UOBJECT_H__
-#define __UOBJECT_H__
-
-#include "unicode/utypes.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * \file
- * \brief C++ API: Common ICU base class UObject.
- */
-
-/**  U_OVERRIDE_CXX_ALLOCATION - Define this to override operator new and
- *                               delete in UMemory. Enabled by default for ICU.
- *
- *         Enabling forces all allocation of ICU object types to use ICU's
- *         memory allocation. On Windows, this allows the ICU DLL to be used by
- *         applications that statically link the C Runtime library, meaning that
- *         the app and ICU will be using different heaps.
- *
- * @stable ICU 2.2
- */                              
-#ifndef U_OVERRIDE_CXX_ALLOCATION
-#define U_OVERRIDE_CXX_ALLOCATION 1
-#endif
-
-/** 
- * \def U_HAVE_PLACEMENT_NEW
- *  Define this to define the placement new and
- *                          delete in UMemory for STL.
- *
- * @stable ICU 2.6
- */                              
-#ifndef U_HAVE_PLACEMENT_NEW
-#define U_HAVE_PLACEMENT_NEW 1
-#endif
-
-
-/** 
- * \def U_HAVE_DEBUG_LOCATION_NEW 
- * Define this to define the MFC debug
- * version of the operator new.
- *
- * @stable ICU 3.4
- */                              
-#ifndef U_HAVE_DEBUG_LOCATION_NEW
-#define U_HAVE_DEBUG_LOCATION_NEW 0
-#endif
-
-/**
- * @{
- * \def U_NO_THROW
- *         Define this to define the throw() specification so
- *                 certain functions do not throw any exceptions
- *
- *         UMemory operator new methods should have the throw() specification 
- *         appended to them, so that the compiler adds the additional NULL check 
- *         before calling constructors. Without, if <code>operator new</code> returns NULL the 
- *         constructor is still called, and if the constructor references member 
- *         data, (which it typically does), the result is a segmentation violation.
- *
- * @draft ICU 4.2
- */                              
-#ifndef U_NO_THROW
-#define U_NO_THROW throw()
-#endif
-
-/** @} */
-
-/**
- * UMemory is the common ICU base class.
- * All other ICU C++ classes are derived from UMemory (starting with ICU 2.4).
- *
- * This is primarily to make it possible and simple to override the
- * C++ memory management by adding new/delete operators to this base class.
- *
- * To override ALL ICU memory management, including that from plain C code,
- * replace the allocation functions declared in cmemory.h
- *
- * UMemory does not contain any virtual functions.
- * Common "boilerplate" functions are defined in UObject.
- *
- * @stable ICU 2.4
- */
-class U_COMMON_API UMemory {
-public:
-
-/* test versions for debugging shaper heap memory problems */
-#ifdef SHAPER_MEMORY_DEBUG  
-    static void * NewArray(int size, int count);
-    static void * GrowArray(void * array, int newSize );
-    static void   FreeArray(void * array );
-#endif
-
-#if U_OVERRIDE_CXX_ALLOCATION
-    /**
-     * Override for ICU4C C++ memory management.
-     * simple, non-class types are allocated using the macros in common/cmemory.h
-     * (uprv_malloc(), uprv_free(), uprv_realloc());
-     * they or something else could be used here to implement C++ new/delete
-     * for ICU4C C++ classes
-     * @stable ICU 2.4
-     */
-    static void * U_EXPORT2 operator new(size_t size) U_NO_THROW;
-
-    /**
-     * Override for ICU4C C++ memory management.
-     * See new().
-     * @stable ICU 2.4
-     */
-    static void * U_EXPORT2 operator new[](size_t size) U_NO_THROW;
-
-    /**
-     * Override for ICU4C C++ memory management.
-     * simple, non-class types are allocated using the macros in common/cmemory.h
-     * (uprv_malloc(), uprv_free(), uprv_realloc());
-     * they or something else could be used here to implement C++ new/delete
-     * for ICU4C C++ classes
-     * @stable ICU 2.4
-     */
-    static void U_EXPORT2 operator delete(void *p) U_NO_THROW;
-
-    /**
-     * Override for ICU4C C++ memory management.
-     * See delete().
-     * @stable ICU 2.4
-     */
-    static void U_EXPORT2 operator delete[](void *p) U_NO_THROW;
-
-#if U_HAVE_PLACEMENT_NEW
-    /**
-     * Override for ICU4C C++ memory management for STL.
-     * See new().
-     * @stable ICU 2.6
-     */
-    static inline void * U_EXPORT2 operator new(size_t, void *ptr) U_NO_THROW { return ptr; }
-
-    /**
-     * Override for ICU4C C++ memory management for STL.
-     * See delete().
-     * @stable ICU 2.6
-     */
-    static inline void U_EXPORT2 operator delete(void *, void *) U_NO_THROW {}
-#endif /* U_HAVE_PLACEMENT_NEW */
-#if U_HAVE_DEBUG_LOCATION_NEW
-    /**
-      * This method overrides the MFC debug version of the operator new
-      * 
-      * @param size   The requested memory size
-      * @param file   The file where the allocation was requested
-      * @param line   The line where the allocation was requested 
-      */ 
-    static void * U_EXPORT2 operator new(size_t size, const char* file, int line) U_NO_THROW;
-    /**
-      * This method provides a matching delete for the MFC debug new
-      * 
-      * @param p      The pointer to the allocated memory
-      * @param file   The file where the allocation was requested
-      * @param line   The line where the allocation was requested 
-      */ 
-    static void U_EXPORT2 operator delete(void* p, const char* file, int line) U_NO_THROW;
-#endif /* U_HAVE_DEBUG_LOCATION_NEW */
-#endif /* U_OVERRIDE_CXX_ALLOCATION */
-
-    /*
-     * Assignment operator not declared. The compiler will provide one
-     * which does nothing since this class does not contain any data members.
-     * API/code coverage may show the assignment operator as present and
-     * untested - ignore.
-     * Subclasses need this assignment operator if they use compiler-provided
-     * assignment operators of their own. An alternative to not declaring one
-     * here would be to declare and empty-implement a protected or public one.
-    UMemory &UMemory::operator=(const UMemory &);
-     */
-};
-
-/**
- * UObject is the common ICU "boilerplate" class.
- * UObject inherits UMemory (starting with ICU 2.4),
- * and all other public ICU C++ classes
- * are derived from UObject (starting with ICU 2.2).
- *
- * UObject contains common virtual functions like for ICU's "poor man's RTTI".
- * It does not contain default implementations of virtual methods
- * like getDynamicClassID to allow derived classes such as Format
- * to declare these as pure virtual.
- *
- * The clone() function is not available in UObject because it is not
- * implemented by all ICU classes.
- * Many ICU services provide a clone() function for their class trees,
- * defined on the service's C++ base class, and all subclasses within that
- * service class tree return a pointer to the service base class
- * (which itself is a subclass of UObject).
- * This is because some compilers do not support covariant (same-as-this)
- * return types; cast to the appropriate subclass if necessary.
- *
- * @stable ICU 2.2
- */
-class U_COMMON_API UObject : public UMemory {
-public:
-    /**
-     * Destructor.
-     *
-     * @stable ICU 2.2
-     */
-    virtual ~UObject();
-
-    /**
-     * ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const = 0;
-
-protected:
-    // the following functions are protected to prevent instantiation and
-    // direct use of UObject itself
-
-    // default constructor
-    // commented out because UObject is abstract (see getDynamicClassID)
-    // inline UObject() {}
-
-    // copy constructor
-    // commented out because UObject is abstract (see getDynamicClassID)
-    // inline UObject(const UObject &other) {}
-
-#if 0
-    // TODO Sometime in the future. Implement operator==().
-    // (This comment inserted in 2.2)
-    // some or all of the following "boilerplate" functions may be made public
-    // in a future ICU4C release when all subclasses implement them
-
-    // assignment operator
-    // (not virtual, see "Taligent's Guide to Designing Programs" pp.73..74)
-    // commented out because the implementation is the same as a compiler's default
-    // UObject &operator=(const UObject &other) { return *this; }
-
-    // comparison operators
-    virtual inline UBool operator==(const UObject &other) const { return this==&other; }
-    inline UBool operator!=(const UObject &other) const { return !operator==(other); }
-
-    // clone() commented out from the base class:
-    // some compilers do not support co-variant return types
-    // (i.e., subclasses would have to return UObject * as well, instead of SubClass *)
-    // see also UObject class documentation.
-    // virtual UObject *clone() const;
-#endif
-
-    /*
-     * Assignment operator not declared. The compiler will provide one
-     * which does nothing since this class does not contain any data members.
-     * API/code coverage may show the assignment operator as present and
-     * untested - ignore.
-     * Subclasses need this assignment operator if they use compiler-provided
-     * assignment operators of their own. An alternative to not declaring one
-     * here would be to declare and empty-implement a protected or public one.
-    UObject &UObject::operator=(const UObject &);
-     */
-
-// Future implementation for RTTI that support subtyping. [alan]
-// 
-//  public:
-//     /**
-//      * @internal
-//      */
-//     static UClassID getStaticClassID();
-// 
-//     /**
-//      * @internal
-//      */
-//     UBool instanceOf(UClassID type) const;
-};
-
-/**
- * This is a simple macro to add ICU RTTI to an ICU object implementation.
- * This does not go into the header. This should only be used in *.cpp files.
- *
- * @param myClass The name of the class that needs RTTI defined.
- * @internal
- */
-#define UOBJECT_DEFINE_RTTI_IMPLEMENTATION(myClass) \
-    UClassID U_EXPORT2 myClass::getStaticClassID() { \
-        static char classID = 0; \
-        return (UClassID)&classID; \
-    } \
-    UClassID myClass::getDynamicClassID() const \
-    { return myClass::getStaticClassID(); }
-
-
-/**
- * This macro adds ICU RTTI to an ICU abstract class implementation.
- * This macro should be invoked in *.cpp files.  The corresponding
- * header should declare getStaticClassID.
- *
- * @param myClass The name of the class that needs RTTI defined.
- * @internal
- */
-#define UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(myClass) \
-    UClassID U_EXPORT2 myClass::getStaticClassID() { \
-        static char classID = 0; \
-        return (UClassID)&classID; \
-    }
-
-/**
- * This is a simple macro to express that a class and its subclasses do not offer
- * ICU's "poor man's RTTI".
- * Beginning with ICU 4.6, ICU requires C++ compiler RTTI.
- * This does not go into the header. This should only be used in *.cpp files.
- * Use this with a private getDynamicClassID() in an immediate subclass of UObject.
- *
- * @param myClass The name of the class that needs RTTI defined.
- * @internal
- */
-#define UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(myClass) \
-    UClassID myClass::getDynamicClassID() const { return NULL; }
-
-// /**
-//  * This macro adds ICU RTTI to an ICU concrete class implementation.
-//  * This macro should be invoked in *.cpp files.  The corresponding
-//  * header should declare getDynamicClassID and getStaticClassID.
-//  *
-//  * @param myClass The name of the class that needs RTTI defined.
-//  * @param myParent The name of the myClass's parent.
-//  * @internal
-//  */
-/*#define UOBJECT_DEFINE_RTTI_IMPLEMENTATION(myClass, myParent) \
-    UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(myClass, myParent) \
-    UClassID myClass::getDynamicClassID() const { \
-        return myClass::getStaticClassID(); \
-    }
-*/
-
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/uobslete.h b/source/common/unicode/uobslete.h
deleted file mode 100644
index 1ef6e85..0000000
--- a/source/common/unicode/uobslete.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  uobslete.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: genheaders.pl, a perl script written by Ram Viswanadha
-*
-*  Contains data for commenting out APIs.
-*  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 UOBSLETE_H
-#define UOBSLETE_H
-
-#ifdef U_HIDE_OBSOLETE_API
-
-#    if U_DISABLE_RENAMING
-#    else
-#    endif /* U_DISABLE_RENAMING */
-
-#endif /* U_HIDE_OBSOLETE_API */
-#endif /* UOBSLETE_H */
-
diff --git a/source/common/unicode/urename.h b/source/common/unicode/urename.h
deleted file mode 100644
index 468bdbd..0000000
--- a/source/common/unicode/urename.h
+++ /dev/null
@@ -1,2241 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2002-2010, 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
-
-/* We need the U_ICU_ENTRY_POINT_RENAME definition. There's a default one in unicode/uvernum.h we can use, but we will give
-   the platform a chance to define it first.
-   Normally (if utypes.h or umachine.h was included first) this will not be necessary as it will already be defined.
- */
-#ifndef U_ICU_ENTRY_POINT_RENAME
-#include "unicode/umachine.h"
-#endif
-
-/* If we still don't have U_ICU_ENTRY_POINT_RENAME use the default. */
-#ifndef U_ICU_ENTRY_POINT_RENAME
-#include "unicode/uvernum.h"
-#endif
-
-/* Error out before the following defines cause very strange and unexpected code breakage */
-#ifndef U_ICU_ENTRY_POINT_RENAME
-#error U_ICU_ENTRY_POINT_RENAME is not defined - cannot continue. Consider defining U_DISABLE_RENAMING if renaming should not be used.
-#endif
-
-
-/* C exports renaming data */
-
-#define DECPOWERS U_ICU_ENTRY_POINT_RENAME(DECPOWERS)
-#define DECSTICKYTAB U_ICU_ENTRY_POINT_RENAME(DECSTICKYTAB)
-#define LNnn U_ICU_ENTRY_POINT_RENAME(LNnn)
-#define T_CString_int64ToString U_ICU_ENTRY_POINT_RENAME(T_CString_int64ToString)
-#define T_CString_integerToString U_ICU_ENTRY_POINT_RENAME(T_CString_integerToString)
-#define T_CString_stricmp U_ICU_ENTRY_POINT_RENAME(T_CString_stricmp)
-#define T_CString_stringToInteger U_ICU_ENTRY_POINT_RENAME(T_CString_stringToInteger)
-#define T_CString_strnicmp U_ICU_ENTRY_POINT_RENAME(T_CString_strnicmp)
-#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
-#define T_CString_toUpperCase U_ICU_ENTRY_POINT_RENAME(T_CString_toUpperCase)
-#define UCNV_FROM_U_CALLBACK_ESCAPE U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_ESCAPE)
-#define UCNV_FROM_U_CALLBACK_SKIP U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_SKIP)
-#define UCNV_FROM_U_CALLBACK_STOP U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_STOP)
-#define UCNV_FROM_U_CALLBACK_SUBSTITUTE U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_SUBSTITUTE)
-#define UCNV_TO_U_CALLBACK_ESCAPE U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_ESCAPE)
-#define UCNV_TO_U_CALLBACK_SKIP U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_SKIP)
-#define UCNV_TO_U_CALLBACK_STOP U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_STOP)
-#define UCNV_TO_U_CALLBACK_SUBSTITUTE U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_SUBSTITUTE)
-#define UDataMemory_createNewInstance U_ICU_ENTRY_POINT_RENAME(UDataMemory_createNewInstance)
-#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
-#define UDataMemory_isLoaded U_ICU_ENTRY_POINT_RENAME(UDataMemory_isLoaded)
-#define UDataMemory_normalizeDataPointer U_ICU_ENTRY_POINT_RENAME(UDataMemory_normalizeDataPointer)
-#define UDataMemory_setData U_ICU_ENTRY_POINT_RENAME(UDataMemory_setData)
-#define UDatamemory_assign U_ICU_ENTRY_POINT_RENAME(UDatamemory_assign)
-#define _ASCIIData U_ICU_ENTRY_POINT_RENAME(_ASCIIData)
-#define _Bocu1Data U_ICU_ENTRY_POINT_RENAME(_Bocu1Data)
-#define _CESU8Data U_ICU_ENTRY_POINT_RENAME(_CESU8Data)
-#define _HZData U_ICU_ENTRY_POINT_RENAME(_HZData)
-#define _IMAPData U_ICU_ENTRY_POINT_RENAME(_IMAPData)
-#define _ISCIIData U_ICU_ENTRY_POINT_RENAME(_ISCIIData)
-#define _ISO2022Data U_ICU_ENTRY_POINT_RENAME(_ISO2022Data)
-#define _LMBCSData1 U_ICU_ENTRY_POINT_RENAME(_LMBCSData1)
-#define _LMBCSData11 U_ICU_ENTRY_POINT_RENAME(_LMBCSData11)
-#define _LMBCSData16 U_ICU_ENTRY_POINT_RENAME(_LMBCSData16)
-#define _LMBCSData17 U_ICU_ENTRY_POINT_RENAME(_LMBCSData17)
-#define _LMBCSData18 U_ICU_ENTRY_POINT_RENAME(_LMBCSData18)
-#define _LMBCSData19 U_ICU_ENTRY_POINT_RENAME(_LMBCSData19)
-#define _LMBCSData2 U_ICU_ENTRY_POINT_RENAME(_LMBCSData2)
-#define _LMBCSData3 U_ICU_ENTRY_POINT_RENAME(_LMBCSData3)
-#define _LMBCSData4 U_ICU_ENTRY_POINT_RENAME(_LMBCSData4)
-#define _LMBCSData5 U_ICU_ENTRY_POINT_RENAME(_LMBCSData5)
-#define _LMBCSData6 U_ICU_ENTRY_POINT_RENAME(_LMBCSData6)
-#define _LMBCSData8 U_ICU_ENTRY_POINT_RENAME(_LMBCSData8)
-#define _Latin1Data U_ICU_ENTRY_POINT_RENAME(_Latin1Data)
-#define _MBCSData U_ICU_ENTRY_POINT_RENAME(_MBCSData)
-#define _SCSUData U_ICU_ENTRY_POINT_RENAME(_SCSUData)
-#define _UTF16BEData U_ICU_ENTRY_POINT_RENAME(_UTF16BEData)
-#define _UTF16Data U_ICU_ENTRY_POINT_RENAME(_UTF16Data)
-#define _UTF16LEData U_ICU_ENTRY_POINT_RENAME(_UTF16LEData)
-#define _UTF32BEData U_ICU_ENTRY_POINT_RENAME(_UTF32BEData)
-#define _UTF32Data U_ICU_ENTRY_POINT_RENAME(_UTF32Data)
-#define _UTF32LEData U_ICU_ENTRY_POINT_RENAME(_UTF32LEData)
-#define _UTF7Data U_ICU_ENTRY_POINT_RENAME(_UTF7Data)
-#define _UTF8Data U_ICU_ENTRY_POINT_RENAME(_UTF8Data)
-#define bms_close U_ICU_ENTRY_POINT_RENAME(bms_close)
-#define bms_empty U_ICU_ENTRY_POINT_RENAME(bms_empty)
-#define bms_getData U_ICU_ENTRY_POINT_RENAME(bms_getData)
-#define bms_open U_ICU_ENTRY_POINT_RENAME(bms_open)
-#define bms_search U_ICU_ENTRY_POINT_RENAME(bms_search)
-#define bms_setTargetString U_ICU_ENTRY_POINT_RENAME(bms_setTargetString)
-#define buildWSConfusableData U_ICU_ENTRY_POINT_RENAME(buildWSConfusableData)
-#define cmemory_cleanup U_ICU_ENTRY_POINT_RENAME(cmemory_cleanup)
-#define cmemory_inUse U_ICU_ENTRY_POINT_RENAME(cmemory_inUse)
-#define d2utable U_ICU_ENTRY_POINT_RENAME(d2utable)
-#define deleteCEList U_ICU_ENTRY_POINT_RENAME(deleteCEList)
-#define deleteChars U_ICU_ENTRY_POINT_RENAME(deleteChars)
-#define deleteCollDataCacheEntry U_ICU_ENTRY_POINT_RENAME(deleteCollDataCacheEntry)
-#define deleteStringList U_ICU_ENTRY_POINT_RENAME(deleteStringList)
-#define deleteUnicodeStringKey U_ICU_ENTRY_POINT_RENAME(deleteUnicodeStringKey)
-#define izrule_clone U_ICU_ENTRY_POINT_RENAME(izrule_clone)
-#define izrule_close U_ICU_ENTRY_POINT_RENAME(izrule_close)
-#define izrule_equals U_ICU_ENTRY_POINT_RENAME(izrule_equals)
-#define izrule_getDSTSavings U_ICU_ENTRY_POINT_RENAME(izrule_getDSTSavings)
-#define izrule_getDynamicClassID U_ICU_ENTRY_POINT_RENAME(izrule_getDynamicClassID)
-#define izrule_getFinalStart U_ICU_ENTRY_POINT_RENAME(izrule_getFinalStart)
-#define izrule_getFirstStart U_ICU_ENTRY_POINT_RENAME(izrule_getFirstStart)
-#define izrule_getName U_ICU_ENTRY_POINT_RENAME(izrule_getName)
-#define izrule_getNextStart U_ICU_ENTRY_POINT_RENAME(izrule_getNextStart)
-#define izrule_getPreviousStart U_ICU_ENTRY_POINT_RENAME(izrule_getPreviousStart)
-#define izrule_getRawOffset U_ICU_ENTRY_POINT_RENAME(izrule_getRawOffset)
-#define izrule_getStaticClassID U_ICU_ENTRY_POINT_RENAME(izrule_getStaticClassID)
-#define izrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(izrule_isEquivalentTo)
-#define izrule_open U_ICU_ENTRY_POINT_RENAME(izrule_open)
-#define le_close U_ICU_ENTRY_POINT_RENAME(le_close)
-#define le_create U_ICU_ENTRY_POINT_RENAME(le_create)
-#define le_getCharIndices U_ICU_ENTRY_POINT_RENAME(le_getCharIndices)
-#define le_getCharIndicesWithBase U_ICU_ENTRY_POINT_RENAME(le_getCharIndicesWithBase)
-#define le_getGlyphCount U_ICU_ENTRY_POINT_RENAME(le_getGlyphCount)
-#define le_getGlyphPosition U_ICU_ENTRY_POINT_RENAME(le_getGlyphPosition)
-#define le_getGlyphPositions U_ICU_ENTRY_POINT_RENAME(le_getGlyphPositions)
-#define le_getGlyphs U_ICU_ENTRY_POINT_RENAME(le_getGlyphs)
-#define le_layoutChars U_ICU_ENTRY_POINT_RENAME(le_layoutChars)
-#define le_reset U_ICU_ENTRY_POINT_RENAME(le_reset)
-#define locale_getKeywords U_ICU_ENTRY_POINT_RENAME(locale_getKeywords)
-#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
-#define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default)
-#define locale_set_default U_ICU_ENTRY_POINT_RENAME(locale_set_default)
-#define pl_addFontRun U_ICU_ENTRY_POINT_RENAME(pl_addFontRun)
-#define pl_addLocaleRun U_ICU_ENTRY_POINT_RENAME(pl_addLocaleRun)
-#define pl_addValueRun U_ICU_ENTRY_POINT_RENAME(pl_addValueRun)
-#define pl_close U_ICU_ENTRY_POINT_RENAME(pl_close)
-#define pl_closeFontRuns U_ICU_ENTRY_POINT_RENAME(pl_closeFontRuns)
-#define pl_closeLine U_ICU_ENTRY_POINT_RENAME(pl_closeLine)
-#define pl_closeLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_closeLocaleRuns)
-#define pl_closeValueRuns U_ICU_ENTRY_POINT_RENAME(pl_closeValueRuns)
-#define pl_countLineRuns U_ICU_ENTRY_POINT_RENAME(pl_countLineRuns)
-#define pl_create U_ICU_ENTRY_POINT_RENAME(pl_create)
-#define pl_getAscent U_ICU_ENTRY_POINT_RENAME(pl_getAscent)
-#define pl_getDescent U_ICU_ENTRY_POINT_RENAME(pl_getDescent)
-#define pl_getFontRunCount U_ICU_ENTRY_POINT_RENAME(pl_getFontRunCount)
-#define pl_getFontRunFont U_ICU_ENTRY_POINT_RENAME(pl_getFontRunFont)
-#define pl_getFontRunLastLimit U_ICU_ENTRY_POINT_RENAME(pl_getFontRunLastLimit)
-#define pl_getFontRunLimit U_ICU_ENTRY_POINT_RENAME(pl_getFontRunLimit)
-#define pl_getLeading U_ICU_ENTRY_POINT_RENAME(pl_getLeading)
-#define pl_getLineAscent U_ICU_ENTRY_POINT_RENAME(pl_getLineAscent)
-#define pl_getLineDescent U_ICU_ENTRY_POINT_RENAME(pl_getLineDescent)
-#define pl_getLineLeading U_ICU_ENTRY_POINT_RENAME(pl_getLineLeading)
-#define pl_getLineVisualRun U_ICU_ENTRY_POINT_RENAME(pl_getLineVisualRun)
-#define pl_getLineWidth U_ICU_ENTRY_POINT_RENAME(pl_getLineWidth)
-#define pl_getLocaleRunCount U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunCount)
-#define pl_getLocaleRunLastLimit U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunLastLimit)
-#define pl_getLocaleRunLimit U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunLimit)
-#define pl_getLocaleRunLocale U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunLocale)
-#define pl_getParagraphLevel U_ICU_ENTRY_POINT_RENAME(pl_getParagraphLevel)
-#define pl_getTextDirection U_ICU_ENTRY_POINT_RENAME(pl_getTextDirection)
-#define pl_getValueRunCount U_ICU_ENTRY_POINT_RENAME(pl_getValueRunCount)
-#define pl_getValueRunLastLimit U_ICU_ENTRY_POINT_RENAME(pl_getValueRunLastLimit)
-#define pl_getValueRunLimit U_ICU_ENTRY_POINT_RENAME(pl_getValueRunLimit)
-#define pl_getValueRunValue U_ICU_ENTRY_POINT_RENAME(pl_getValueRunValue)
-#define pl_getVisualRunAscent U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunAscent)
-#define pl_getVisualRunDescent U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunDescent)
-#define pl_getVisualRunDirection U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunDirection)
-#define pl_getVisualRunFont U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunFont)
-#define pl_getVisualRunGlyphCount U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunGlyphCount)
-#define pl_getVisualRunGlyphToCharMap U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunGlyphToCharMap)
-#define pl_getVisualRunGlyphs U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunGlyphs)
-#define pl_getVisualRunLeading U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunLeading)
-#define pl_getVisualRunPositions U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunPositions)
-#define pl_isComplex U_ICU_ENTRY_POINT_RENAME(pl_isComplex)
-#define pl_nextLine U_ICU_ENTRY_POINT_RENAME(pl_nextLine)
-#define pl_openEmptyFontRuns U_ICU_ENTRY_POINT_RENAME(pl_openEmptyFontRuns)
-#define pl_openEmptyLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_openEmptyLocaleRuns)
-#define pl_openEmptyValueRuns U_ICU_ENTRY_POINT_RENAME(pl_openEmptyValueRuns)
-#define pl_openFontRuns U_ICU_ENTRY_POINT_RENAME(pl_openFontRuns)
-#define pl_openLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_openLocaleRuns)
-#define pl_openValueRuns U_ICU_ENTRY_POINT_RENAME(pl_openValueRuns)
-#define pl_reflow U_ICU_ENTRY_POINT_RENAME(pl_reflow)
-#define pl_resetFontRuns U_ICU_ENTRY_POINT_RENAME(pl_resetFontRuns)
-#define pl_resetLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_resetLocaleRuns)
-#define pl_resetValueRuns U_ICU_ENTRY_POINT_RENAME(pl_resetValueRuns)
-#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
-#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
-#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias)
-#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
-#define res_getBinary U_ICU_ENTRY_POINT_RENAME(res_getBinary)
-#define res_getIntVector U_ICU_ENTRY_POINT_RENAME(res_getIntVector)
-#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
-#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
-#define res_getString U_ICU_ENTRY_POINT_RENAME(res_getString)
-#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
-#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
-#define res_load U_ICU_ENTRY_POINT_RENAME(res_load)
-#define res_read U_ICU_ENTRY_POINT_RENAME(res_read)
-#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
-#define tmutfmtHashTableValueComparator U_ICU_ENTRY_POINT_RENAME(tmutfmtHashTableValueComparator)
-#define triedict_swap U_ICU_ENTRY_POINT_RENAME(triedict_swap)
-#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
-#define u_austrcpy U_ICU_ENTRY_POINT_RENAME(u_austrcpy)
-#define u_austrncpy U_ICU_ENTRY_POINT_RENAME(u_austrncpy)
-#define u_catclose U_ICU_ENTRY_POINT_RENAME(u_catclose)
-#define u_catgets U_ICU_ENTRY_POINT_RENAME(u_catgets)
-#define u_catopen U_ICU_ENTRY_POINT_RENAME(u_catopen)
-#define u_charAge U_ICU_ENTRY_POINT_RENAME(u_charAge)
-#define u_charDigitValue U_ICU_ENTRY_POINT_RENAME(u_charDigitValue)
-#define u_charDirection U_ICU_ENTRY_POINT_RENAME(u_charDirection)
-#define u_charFromName U_ICU_ENTRY_POINT_RENAME(u_charFromName)
-#define u_charMirror U_ICU_ENTRY_POINT_RENAME(u_charMirror)
-#define u_charName U_ICU_ENTRY_POINT_RENAME(u_charName)
-#define u_charType U_ICU_ENTRY_POINT_RENAME(u_charType)
-#define u_charsToUChars U_ICU_ENTRY_POINT_RENAME(u_charsToUChars)
-#define u_cleanup U_ICU_ENTRY_POINT_RENAME(u_cleanup)
-#define u_countChar32 U_ICU_ENTRY_POINT_RENAME(u_countChar32)
-#define u_digit U_ICU_ENTRY_POINT_RENAME(u_digit)
-#define u_enumCharNames U_ICU_ENTRY_POINT_RENAME(u_enumCharNames)
-#define u_enumCharTypes U_ICU_ENTRY_POINT_RENAME(u_enumCharTypes)
-#define u_errorName U_ICU_ENTRY_POINT_RENAME(u_errorName)
-#define u_fadopt U_ICU_ENTRY_POINT_RENAME(u_fadopt)
-#define u_fclose U_ICU_ENTRY_POINT_RENAME(u_fclose)
-#define u_feof U_ICU_ENTRY_POINT_RENAME(u_feof)
-#define u_fflush U_ICU_ENTRY_POINT_RENAME(u_fflush)
-#define u_fgetConverter U_ICU_ENTRY_POINT_RENAME(u_fgetConverter)
-#define u_fgetc U_ICU_ENTRY_POINT_RENAME(u_fgetc)
-#define u_fgetcodepage U_ICU_ENTRY_POINT_RENAME(u_fgetcodepage)
-#define u_fgetcx U_ICU_ENTRY_POINT_RENAME(u_fgetcx)
-#define u_fgetfile U_ICU_ENTRY_POINT_RENAME(u_fgetfile)
-#define u_fgetlocale U_ICU_ENTRY_POINT_RENAME(u_fgetlocale)
-#define u_fgets U_ICU_ENTRY_POINT_RENAME(u_fgets)
-#define u_file_read U_ICU_ENTRY_POINT_RENAME(u_file_read)
-#define u_file_write U_ICU_ENTRY_POINT_RENAME(u_file_write)
-#define u_file_write_flush U_ICU_ENTRY_POINT_RENAME(u_file_write_flush)
-#define u_finit U_ICU_ENTRY_POINT_RENAME(u_finit)
-#define u_flushDefaultConverter U_ICU_ENTRY_POINT_RENAME(u_flushDefaultConverter)
-#define u_foldCase U_ICU_ENTRY_POINT_RENAME(u_foldCase)
-#define u_fopen U_ICU_ENTRY_POINT_RENAME(u_fopen)
-#define u_forDigit U_ICU_ENTRY_POINT_RENAME(u_forDigit)
-#define u_formatMessage U_ICU_ENTRY_POINT_RENAME(u_formatMessage)
-#define u_formatMessageWithError U_ICU_ENTRY_POINT_RENAME(u_formatMessageWithError)
-#define u_fprintf U_ICU_ENTRY_POINT_RENAME(u_fprintf)
-#define u_fprintf_u U_ICU_ENTRY_POINT_RENAME(u_fprintf_u)
-#define u_fputc U_ICU_ENTRY_POINT_RENAME(u_fputc)
-#define u_fputs U_ICU_ENTRY_POINT_RENAME(u_fputs)
-#define u_frewind U_ICU_ENTRY_POINT_RENAME(u_frewind)
-#define u_fscanf U_ICU_ENTRY_POINT_RENAME(u_fscanf)
-#define u_fscanf_u U_ICU_ENTRY_POINT_RENAME(u_fscanf_u)
-#define u_fsetcodepage U_ICU_ENTRY_POINT_RENAME(u_fsetcodepage)
-#define u_fsetlocale U_ICU_ENTRY_POINT_RENAME(u_fsetlocale)
-#define u_fsettransliterator U_ICU_ENTRY_POINT_RENAME(u_fsettransliterator)
-#define u_fstropen U_ICU_ENTRY_POINT_RENAME(u_fstropen)
-#define u_fungetc U_ICU_ENTRY_POINT_RENAME(u_fungetc)
-#define u_getCombiningClass U_ICU_ENTRY_POINT_RENAME(u_getCombiningClass)
-#define u_getDataDirectory U_ICU_ENTRY_POINT_RENAME(u_getDataDirectory)
-#define u_getDataVersion U_ICU_ENTRY_POINT_RENAME(u_getDataVersion)
-#define u_getDefaultConverter U_ICU_ENTRY_POINT_RENAME(u_getDefaultConverter)
-#define u_getFC_NFKC_Closure U_ICU_ENTRY_POINT_RENAME(u_getFC_NFKC_Closure)
-#define u_getISOComment U_ICU_ENTRY_POINT_RENAME(u_getISOComment)
-#define u_getIntPropertyMaxValue U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyMaxValue)
-#define u_getIntPropertyMinValue U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyMinValue)
-#define u_getIntPropertyValue U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyValue)
-#define u_getNumericValue U_ICU_ENTRY_POINT_RENAME(u_getNumericValue)
-#define u_getPropertyEnum U_ICU_ENTRY_POINT_RENAME(u_getPropertyEnum)
-#define u_getPropertyName U_ICU_ENTRY_POINT_RENAME(u_getPropertyName)
-#define u_getPropertyValueEnum U_ICU_ENTRY_POINT_RENAME(u_getPropertyValueEnum)
-#define u_getPropertyValueName U_ICU_ENTRY_POINT_RENAME(u_getPropertyValueName)
-#define u_getUnicodeProperties U_ICU_ENTRY_POINT_RENAME(u_getUnicodeProperties)
-#define u_getUnicodeVersion U_ICU_ENTRY_POINT_RENAME(u_getUnicodeVersion)
-#define u_getVersion U_ICU_ENTRY_POINT_RENAME(u_getVersion)
-#define u_hasBinaryProperty U_ICU_ENTRY_POINT_RENAME(u_hasBinaryProperty)
-#define u_init U_ICU_ENTRY_POINT_RENAME(u_init)
-#define u_isDataOlder U_ICU_ENTRY_POINT_RENAME(u_isDataOlder)
-#define u_isIDIgnorable U_ICU_ENTRY_POINT_RENAME(u_isIDIgnorable)
-#define u_isIDPart U_ICU_ENTRY_POINT_RENAME(u_isIDPart)
-#define u_isIDStart U_ICU_ENTRY_POINT_RENAME(u_isIDStart)
-#define u_isISOControl U_ICU_ENTRY_POINT_RENAME(u_isISOControl)
-#define u_isJavaIDPart U_ICU_ENTRY_POINT_RENAME(u_isJavaIDPart)
-#define u_isJavaIDStart U_ICU_ENTRY_POINT_RENAME(u_isJavaIDStart)
-#define u_isJavaSpaceChar U_ICU_ENTRY_POINT_RENAME(u_isJavaSpaceChar)
-#define u_isMirrored U_ICU_ENTRY_POINT_RENAME(u_isMirrored)
-#define u_isUAlphabetic U_ICU_ENTRY_POINT_RENAME(u_isUAlphabetic)
-#define u_isULowercase U_ICU_ENTRY_POINT_RENAME(u_isULowercase)
-#define u_isUUppercase U_ICU_ENTRY_POINT_RENAME(u_isUUppercase)
-#define u_isUWhiteSpace U_ICU_ENTRY_POINT_RENAME(u_isUWhiteSpace)
-#define u_isWhitespace U_ICU_ENTRY_POINT_RENAME(u_isWhitespace)
-#define u_isalnum U_ICU_ENTRY_POINT_RENAME(u_isalnum)
-#define u_isalnumPOSIX U_ICU_ENTRY_POINT_RENAME(u_isalnumPOSIX)
-#define u_isalpha U_ICU_ENTRY_POINT_RENAME(u_isalpha)
-#define u_isbase U_ICU_ENTRY_POINT_RENAME(u_isbase)
-#define u_isblank U_ICU_ENTRY_POINT_RENAME(u_isblank)
-#define u_iscntrl U_ICU_ENTRY_POINT_RENAME(u_iscntrl)
-#define u_isdefined U_ICU_ENTRY_POINT_RENAME(u_isdefined)
-#define u_isdigit U_ICU_ENTRY_POINT_RENAME(u_isdigit)
-#define u_isgraph U_ICU_ENTRY_POINT_RENAME(u_isgraph)
-#define u_isgraphPOSIX U_ICU_ENTRY_POINT_RENAME(u_isgraphPOSIX)
-#define u_islower U_ICU_ENTRY_POINT_RENAME(u_islower)
-#define u_isprint U_ICU_ENTRY_POINT_RENAME(u_isprint)
-#define u_isprintPOSIX U_ICU_ENTRY_POINT_RENAME(u_isprintPOSIX)
-#define u_ispunct U_ICU_ENTRY_POINT_RENAME(u_ispunct)
-#define u_isspace U_ICU_ENTRY_POINT_RENAME(u_isspace)
-#define u_istitle U_ICU_ENTRY_POINT_RENAME(u_istitle)
-#define u_isupper U_ICU_ENTRY_POINT_RENAME(u_isupper)
-#define u_isxdigit U_ICU_ENTRY_POINT_RENAME(u_isxdigit)
-#define u_lengthOfIdenticalLevelRun U_ICU_ENTRY_POINT_RENAME(u_lengthOfIdenticalLevelRun)
-#define u_locbund_close U_ICU_ENTRY_POINT_RENAME(u_locbund_close)
-#define u_locbund_getNumberFormat U_ICU_ENTRY_POINT_RENAME(u_locbund_getNumberFormat)
-#define u_locbund_init U_ICU_ENTRY_POINT_RENAME(u_locbund_init)
-#define u_memcasecmp U_ICU_ENTRY_POINT_RENAME(u_memcasecmp)
-#define u_memchr U_ICU_ENTRY_POINT_RENAME(u_memchr)
-#define u_memchr32 U_ICU_ENTRY_POINT_RENAME(u_memchr32)
-#define u_memcmp U_ICU_ENTRY_POINT_RENAME(u_memcmp)
-#define u_memcmpCodePointOrder U_ICU_ENTRY_POINT_RENAME(u_memcmpCodePointOrder)
-#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
-#define u_memmove U_ICU_ENTRY_POINT_RENAME(u_memmove)
-#define u_memrchr U_ICU_ENTRY_POINT_RENAME(u_memrchr)
-#define u_memrchr32 U_ICU_ENTRY_POINT_RENAME(u_memrchr32)
-#define u_memset U_ICU_ENTRY_POINT_RENAME(u_memset)
-#define u_parseMessage U_ICU_ENTRY_POINT_RENAME(u_parseMessage)
-#define u_parseMessageWithError U_ICU_ENTRY_POINT_RENAME(u_parseMessageWithError)
-#define u_printf_parse U_ICU_ENTRY_POINT_RENAME(u_printf_parse)
-#define u_releaseDefaultConverter U_ICU_ENTRY_POINT_RENAME(u_releaseDefaultConverter)
-#define u_scanf_parse U_ICU_ENTRY_POINT_RENAME(u_scanf_parse)
-#define u_setAtomicIncDecFunctions U_ICU_ENTRY_POINT_RENAME(u_setAtomicIncDecFunctions)
-#define u_setDataDirectory U_ICU_ENTRY_POINT_RENAME(u_setDataDirectory)
-#define u_setMemoryFunctions U_ICU_ENTRY_POINT_RENAME(u_setMemoryFunctions)
-#define u_setMutexFunctions U_ICU_ENTRY_POINT_RENAME(u_setMutexFunctions)
-#define u_shapeArabic U_ICU_ENTRY_POINT_RENAME(u_shapeArabic)
-#define u_snprintf U_ICU_ENTRY_POINT_RENAME(u_snprintf)
-#define u_snprintf_u U_ICU_ENTRY_POINT_RENAME(u_snprintf_u)
-#define u_sprintf U_ICU_ENTRY_POINT_RENAME(u_sprintf)
-#define u_sprintf_u U_ICU_ENTRY_POINT_RENAME(u_sprintf_u)
-#define u_sscanf U_ICU_ENTRY_POINT_RENAME(u_sscanf)
-#define u_sscanf_u U_ICU_ENTRY_POINT_RENAME(u_sscanf_u)
-#define u_strCaseCompare U_ICU_ENTRY_POINT_RENAME(u_strCaseCompare)
-#define u_strCompare U_ICU_ENTRY_POINT_RENAME(u_strCompare)
-#define u_strCompareIter U_ICU_ENTRY_POINT_RENAME(u_strCompareIter)
-#define u_strFindFirst U_ICU_ENTRY_POINT_RENAME(u_strFindFirst)
-#define u_strFindLast U_ICU_ENTRY_POINT_RENAME(u_strFindLast)
-#define u_strFoldCase U_ICU_ENTRY_POINT_RENAME(u_strFoldCase)
-#define u_strFromJavaModifiedUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromJavaModifiedUTF8WithSub)
-#define u_strFromPunycode U_ICU_ENTRY_POINT_RENAME(u_strFromPunycode)
-#define u_strFromUTF32 U_ICU_ENTRY_POINT_RENAME(u_strFromUTF32)
-#define u_strFromUTF32WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromUTF32WithSub)
-#define u_strFromUTF8 U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8)
-#define u_strFromUTF8Lenient U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8Lenient)
-#define u_strFromUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8WithSub)
-#define u_strFromWCS U_ICU_ENTRY_POINT_RENAME(u_strFromWCS)
-#define u_strHasMoreChar32Than U_ICU_ENTRY_POINT_RENAME(u_strHasMoreChar32Than)
-#define u_strToJavaModifiedUTF8 U_ICU_ENTRY_POINT_RENAME(u_strToJavaModifiedUTF8)
-#define u_strToLower U_ICU_ENTRY_POINT_RENAME(u_strToLower)
-#define u_strToPunycode U_ICU_ENTRY_POINT_RENAME(u_strToPunycode)
-#define u_strToTitle U_ICU_ENTRY_POINT_RENAME(u_strToTitle)
-#define u_strToUTF32 U_ICU_ENTRY_POINT_RENAME(u_strToUTF32)
-#define u_strToUTF32WithSub U_ICU_ENTRY_POINT_RENAME(u_strToUTF32WithSub)
-#define u_strToUTF8 U_ICU_ENTRY_POINT_RENAME(u_strToUTF8)
-#define u_strToUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strToUTF8WithSub)
-#define u_strToUpper U_ICU_ENTRY_POINT_RENAME(u_strToUpper)
-#define u_strToWCS U_ICU_ENTRY_POINT_RENAME(u_strToWCS)
-#define u_strcasecmp U_ICU_ENTRY_POINT_RENAME(u_strcasecmp)
-#define u_strcat U_ICU_ENTRY_POINT_RENAME(u_strcat)
-#define u_strchr U_ICU_ENTRY_POINT_RENAME(u_strchr)
-#define u_strchr32 U_ICU_ENTRY_POINT_RENAME(u_strchr32)
-#define u_strcmp U_ICU_ENTRY_POINT_RENAME(u_strcmp)
-#define u_strcmpCodePointOrder U_ICU_ENTRY_POINT_RENAME(u_strcmpCodePointOrder)
-#define u_strcmpFold U_ICU_ENTRY_POINT_RENAME(u_strcmpFold)
-#define u_strcpy U_ICU_ENTRY_POINT_RENAME(u_strcpy)
-#define u_strcspn U_ICU_ENTRY_POINT_RENAME(u_strcspn)
-#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
-#define u_strncasecmp U_ICU_ENTRY_POINT_RENAME(u_strncasecmp)
-#define u_strncat U_ICU_ENTRY_POINT_RENAME(u_strncat)
-#define u_strncmp U_ICU_ENTRY_POINT_RENAME(u_strncmp)
-#define u_strncmpCodePointOrder U_ICU_ENTRY_POINT_RENAME(u_strncmpCodePointOrder)
-#define u_strncpy U_ICU_ENTRY_POINT_RENAME(u_strncpy)
-#define u_strpbrk U_ICU_ENTRY_POINT_RENAME(u_strpbrk)
-#define u_strrchr U_ICU_ENTRY_POINT_RENAME(u_strrchr)
-#define u_strrchr32 U_ICU_ENTRY_POINT_RENAME(u_strrchr32)
-#define u_strrstr U_ICU_ENTRY_POINT_RENAME(u_strrstr)
-#define u_strspn U_ICU_ENTRY_POINT_RENAME(u_strspn)
-#define u_strstr U_ICU_ENTRY_POINT_RENAME(u_strstr)
-#define u_strtok_r U_ICU_ENTRY_POINT_RENAME(u_strtok_r)
-#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
-#define u_terminateUChar32s U_ICU_ENTRY_POINT_RENAME(u_terminateUChar32s)
-#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
-#define u_terminateWChars U_ICU_ENTRY_POINT_RENAME(u_terminateWChars)
-#define u_tolower U_ICU_ENTRY_POINT_RENAME(u_tolower)
-#define u_totitle U_ICU_ENTRY_POINT_RENAME(u_totitle)
-#define u_toupper U_ICU_ENTRY_POINT_RENAME(u_toupper)
-#define u_uastrcpy U_ICU_ENTRY_POINT_RENAME(u_uastrcpy)
-#define u_uastrncpy U_ICU_ENTRY_POINT_RENAME(u_uastrncpy)
-#define u_unescape U_ICU_ENTRY_POINT_RENAME(u_unescape)
-#define u_unescapeAt U_ICU_ENTRY_POINT_RENAME(u_unescapeAt)
-#define u_versionFromString U_ICU_ENTRY_POINT_RENAME(u_versionFromString)
-#define u_versionFromUString U_ICU_ENTRY_POINT_RENAME(u_versionFromUString)
-#define u_versionToString U_ICU_ENTRY_POINT_RENAME(u_versionToString)
-#define u_vformatMessage U_ICU_ENTRY_POINT_RENAME(u_vformatMessage)
-#define u_vformatMessageWithError U_ICU_ENTRY_POINT_RENAME(u_vformatMessageWithError)
-#define u_vfprintf U_ICU_ENTRY_POINT_RENAME(u_vfprintf)
-#define u_vfprintf_u U_ICU_ENTRY_POINT_RENAME(u_vfprintf_u)
-#define u_vfscanf U_ICU_ENTRY_POINT_RENAME(u_vfscanf)
-#define u_vfscanf_u U_ICU_ENTRY_POINT_RENAME(u_vfscanf_u)
-#define u_vparseMessage U_ICU_ENTRY_POINT_RENAME(u_vparseMessage)
-#define u_vparseMessageWithError U_ICU_ENTRY_POINT_RENAME(u_vparseMessageWithError)
-#define u_vsnprintf U_ICU_ENTRY_POINT_RENAME(u_vsnprintf)
-#define u_vsnprintf_u U_ICU_ENTRY_POINT_RENAME(u_vsnprintf_u)
-#define u_vsprintf U_ICU_ENTRY_POINT_RENAME(u_vsprintf)
-#define u_vsprintf_u U_ICU_ENTRY_POINT_RENAME(u_vsprintf_u)
-#define u_vsscanf U_ICU_ENTRY_POINT_RENAME(u_vsscanf)
-#define u_vsscanf_u U_ICU_ENTRY_POINT_RENAME(u_vsscanf_u)
-#define u_writeDiff U_ICU_ENTRY_POINT_RENAME(u_writeDiff)
-#define u_writeIdenticalLevelRun U_ICU_ENTRY_POINT_RENAME(u_writeIdenticalLevelRun)
-#define u_writeIdenticalLevelRunTwoChars U_ICU_ENTRY_POINT_RENAME(u_writeIdenticalLevelRunTwoChars)
-#define ubidi_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(ubidi_addPropertyStarts)
-#define ubidi_close U_ICU_ENTRY_POINT_RENAME(ubidi_close)
-#define ubidi_countParagraphs U_ICU_ENTRY_POINT_RENAME(ubidi_countParagraphs)
-#define ubidi_countRuns U_ICU_ENTRY_POINT_RENAME(ubidi_countRuns)
-#define ubidi_getBaseDirection U_ICU_ENTRY_POINT_RENAME(ubidi_getBaseDirection)
-#define ubidi_getClass U_ICU_ENTRY_POINT_RENAME(ubidi_getClass)
-#define ubidi_getClassCallback U_ICU_ENTRY_POINT_RENAME(ubidi_getClassCallback)
-#define ubidi_getCustomizedClass U_ICU_ENTRY_POINT_RENAME(ubidi_getCustomizedClass)
-#define ubidi_getDirection U_ICU_ENTRY_POINT_RENAME(ubidi_getDirection)
-#define ubidi_getJoiningGroup U_ICU_ENTRY_POINT_RENAME(ubidi_getJoiningGroup)
-#define ubidi_getJoiningType U_ICU_ENTRY_POINT_RENAME(ubidi_getJoiningType)
-#define ubidi_getLength U_ICU_ENTRY_POINT_RENAME(ubidi_getLength)
-#define ubidi_getLevelAt U_ICU_ENTRY_POINT_RENAME(ubidi_getLevelAt)
-#define ubidi_getLevels U_ICU_ENTRY_POINT_RENAME(ubidi_getLevels)
-#define ubidi_getLogicalIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getLogicalIndex)
-#define ubidi_getLogicalMap U_ICU_ENTRY_POINT_RENAME(ubidi_getLogicalMap)
-#define ubidi_getLogicalRun U_ICU_ENTRY_POINT_RENAME(ubidi_getLogicalRun)
-#define ubidi_getMaxValue U_ICU_ENTRY_POINT_RENAME(ubidi_getMaxValue)
-#define ubidi_getMemory U_ICU_ENTRY_POINT_RENAME(ubidi_getMemory)
-#define ubidi_getMirror U_ICU_ENTRY_POINT_RENAME(ubidi_getMirror)
-#define ubidi_getParaLevel U_ICU_ENTRY_POINT_RENAME(ubidi_getParaLevel)
-#define ubidi_getParagraph U_ICU_ENTRY_POINT_RENAME(ubidi_getParagraph)
-#define ubidi_getParagraphByIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getParagraphByIndex)
-#define ubidi_getProcessedLength U_ICU_ENTRY_POINT_RENAME(ubidi_getProcessedLength)
-#define ubidi_getReorderingMode U_ICU_ENTRY_POINT_RENAME(ubidi_getReorderingMode)
-#define ubidi_getReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_getReorderingOptions)
-#define ubidi_getResultLength U_ICU_ENTRY_POINT_RENAME(ubidi_getResultLength)
-#define ubidi_getRuns U_ICU_ENTRY_POINT_RENAME(ubidi_getRuns)
-#define ubidi_getSingleton U_ICU_ENTRY_POINT_RENAME(ubidi_getSingleton)
-#define ubidi_getText U_ICU_ENTRY_POINT_RENAME(ubidi_getText)
-#define ubidi_getVisualIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualIndex)
-#define ubidi_getVisualMap U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualMap)
-#define ubidi_getVisualRun U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualRun)
-#define ubidi_invertMap U_ICU_ENTRY_POINT_RENAME(ubidi_invertMap)
-#define ubidi_isBidiControl U_ICU_ENTRY_POINT_RENAME(ubidi_isBidiControl)
-#define ubidi_isInverse U_ICU_ENTRY_POINT_RENAME(ubidi_isInverse)
-#define ubidi_isJoinControl U_ICU_ENTRY_POINT_RENAME(ubidi_isJoinControl)
-#define ubidi_isMirrored U_ICU_ENTRY_POINT_RENAME(ubidi_isMirrored)
-#define ubidi_isOrderParagraphsLTR U_ICU_ENTRY_POINT_RENAME(ubidi_isOrderParagraphsLTR)
-#define ubidi_open U_ICU_ENTRY_POINT_RENAME(ubidi_open)
-#define ubidi_openSized U_ICU_ENTRY_POINT_RENAME(ubidi_openSized)
-#define ubidi_orderParagraphsLTR U_ICU_ENTRY_POINT_RENAME(ubidi_orderParagraphsLTR)
-#define ubidi_reorderLogical U_ICU_ENTRY_POINT_RENAME(ubidi_reorderLogical)
-#define ubidi_reorderVisual U_ICU_ENTRY_POINT_RENAME(ubidi_reorderVisual)
-#define ubidi_setClassCallback U_ICU_ENTRY_POINT_RENAME(ubidi_setClassCallback)
-#define ubidi_setInverse U_ICU_ENTRY_POINT_RENAME(ubidi_setInverse)
-#define ubidi_setLine U_ICU_ENTRY_POINT_RENAME(ubidi_setLine)
-#define ubidi_setPara U_ICU_ENTRY_POINT_RENAME(ubidi_setPara)
-#define ubidi_setReorderingMode U_ICU_ENTRY_POINT_RENAME(ubidi_setReorderingMode)
-#define ubidi_setReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_setReorderingOptions)
-#define ubidi_writeReordered U_ICU_ENTRY_POINT_RENAME(ubidi_writeReordered)
-#define ubidi_writeReverse U_ICU_ENTRY_POINT_RENAME(ubidi_writeReverse)
-#define ublock_getCode U_ICU_ENTRY_POINT_RENAME(ublock_getCode)
-#define ubrk_close U_ICU_ENTRY_POINT_RENAME(ubrk_close)
-#define ubrk_countAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_countAvailable)
-#define ubrk_current U_ICU_ENTRY_POINT_RENAME(ubrk_current)
-#define ubrk_first U_ICU_ENTRY_POINT_RENAME(ubrk_first)
-#define ubrk_following U_ICU_ENTRY_POINT_RENAME(ubrk_following)
-#define ubrk_getAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_getAvailable)
-#define ubrk_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ubrk_getLocaleByType)
-#define ubrk_getRuleStatus U_ICU_ENTRY_POINT_RENAME(ubrk_getRuleStatus)
-#define ubrk_getRuleStatusVec U_ICU_ENTRY_POINT_RENAME(ubrk_getRuleStatusVec)
-#define ubrk_isBoundary U_ICU_ENTRY_POINT_RENAME(ubrk_isBoundary)
-#define ubrk_last U_ICU_ENTRY_POINT_RENAME(ubrk_last)
-#define ubrk_next U_ICU_ENTRY_POINT_RENAME(ubrk_next)
-#define ubrk_open U_ICU_ENTRY_POINT_RENAME(ubrk_open)
-#define ubrk_openRules U_ICU_ENTRY_POINT_RENAME(ubrk_openRules)
-#define ubrk_preceding U_ICU_ENTRY_POINT_RENAME(ubrk_preceding)
-#define ubrk_previous U_ICU_ENTRY_POINT_RENAME(ubrk_previous)
-#define ubrk_safeClone U_ICU_ENTRY_POINT_RENAME(ubrk_safeClone)
-#define ubrk_setText U_ICU_ENTRY_POINT_RENAME(ubrk_setText)
-#define ubrk_setUText U_ICU_ENTRY_POINT_RENAME(ubrk_setUText)
-#define ubrk_swap U_ICU_ENTRY_POINT_RENAME(ubrk_swap)
-#define ucal_add U_ICU_ENTRY_POINT_RENAME(ucal_add)
-#define ucal_clear U_ICU_ENTRY_POINT_RENAME(ucal_clear)
-#define ucal_clearField U_ICU_ENTRY_POINT_RENAME(ucal_clearField)
-#define ucal_clone U_ICU_ENTRY_POINT_RENAME(ucal_clone)
-#define ucal_close U_ICU_ENTRY_POINT_RENAME(ucal_close)
-#define ucal_countAvailable U_ICU_ENTRY_POINT_RENAME(ucal_countAvailable)
-#define ucal_equivalentTo U_ICU_ENTRY_POINT_RENAME(ucal_equivalentTo)
-#define ucal_get U_ICU_ENTRY_POINT_RENAME(ucal_get)
-#define ucal_getAttribute U_ICU_ENTRY_POINT_RENAME(ucal_getAttribute)
-#define ucal_getAvailable U_ICU_ENTRY_POINT_RENAME(ucal_getAvailable)
-#define ucal_getCanonicalTimeZoneID U_ICU_ENTRY_POINT_RENAME(ucal_getCanonicalTimeZoneID)
-#define ucal_getDSTSavings U_ICU_ENTRY_POINT_RENAME(ucal_getDSTSavings)
-#define ucal_getDayOfWeekType U_ICU_ENTRY_POINT_RENAME(ucal_getDayOfWeekType)
-#define ucal_getDefaultTimeZone U_ICU_ENTRY_POINT_RENAME(ucal_getDefaultTimeZone)
-#define ucal_getGregorianChange U_ICU_ENTRY_POINT_RENAME(ucal_getGregorianChange)
-#define ucal_getKeywordValuesForLocale U_ICU_ENTRY_POINT_RENAME(ucal_getKeywordValuesForLocale)
-#define ucal_getLimit U_ICU_ENTRY_POINT_RENAME(ucal_getLimit)
-#define ucal_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ucal_getLocaleByType)
-#define ucal_getMillis U_ICU_ENTRY_POINT_RENAME(ucal_getMillis)
-#define ucal_getNow U_ICU_ENTRY_POINT_RENAME(ucal_getNow)
-#define ucal_getTZDataVersion U_ICU_ENTRY_POINT_RENAME(ucal_getTZDataVersion)
-#define ucal_getTimeZoneDisplayName U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneDisplayName)
-#define ucal_getType U_ICU_ENTRY_POINT_RENAME(ucal_getType)
-#define ucal_getWeekendTransition U_ICU_ENTRY_POINT_RENAME(ucal_getWeekendTransition)
-#define ucal_inDaylightTime U_ICU_ENTRY_POINT_RENAME(ucal_inDaylightTime)
-#define ucal_isSet U_ICU_ENTRY_POINT_RENAME(ucal_isSet)
-#define ucal_isWeekend U_ICU_ENTRY_POINT_RENAME(ucal_isWeekend)
-#define ucal_open U_ICU_ENTRY_POINT_RENAME(ucal_open)
-#define ucal_openCountryTimeZones U_ICU_ENTRY_POINT_RENAME(ucal_openCountryTimeZones)
-#define ucal_openTimeZones U_ICU_ENTRY_POINT_RENAME(ucal_openTimeZones)
-#define ucal_roll U_ICU_ENTRY_POINT_RENAME(ucal_roll)
-#define ucal_set U_ICU_ENTRY_POINT_RENAME(ucal_set)
-#define ucal_setAttribute U_ICU_ENTRY_POINT_RENAME(ucal_setAttribute)
-#define ucal_setDate U_ICU_ENTRY_POINT_RENAME(ucal_setDate)
-#define ucal_setDateTime U_ICU_ENTRY_POINT_RENAME(ucal_setDateTime)
-#define ucal_setDefaultTimeZone U_ICU_ENTRY_POINT_RENAME(ucal_setDefaultTimeZone)
-#define ucal_setGregorianChange U_ICU_ENTRY_POINT_RENAME(ucal_setGregorianChange)
-#define ucal_setMillis U_ICU_ENTRY_POINT_RENAME(ucal_setMillis)
-#define ucal_setTimeZone U_ICU_ENTRY_POINT_RENAME(ucal_setTimeZone)
-#define ucase_addCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addCaseClosure)
-#define ucase_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(ucase_addPropertyStarts)
-#define ucase_addStringCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addStringCaseClosure)
-#define ucase_fold U_ICU_ENTRY_POINT_RENAME(ucase_fold)
-#define ucase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ucase_getCaseLocale)
-#define ucase_getSingleton U_ICU_ENTRY_POINT_RENAME(ucase_getSingleton)
-#define ucase_getType U_ICU_ENTRY_POINT_RENAME(ucase_getType)
-#define ucase_getTypeOrIgnorable U_ICU_ENTRY_POINT_RENAME(ucase_getTypeOrIgnorable)
-#define ucase_hasBinaryProperty U_ICU_ENTRY_POINT_RENAME(ucase_hasBinaryProperty)
-#define ucase_isCaseSensitive U_ICU_ENTRY_POINT_RENAME(ucase_isCaseSensitive)
-#define ucase_isSoftDotted U_ICU_ENTRY_POINT_RENAME(ucase_isSoftDotted)
-#define ucase_toFullFolding U_ICU_ENTRY_POINT_RENAME(ucase_toFullFolding)
-#define ucase_toFullLower U_ICU_ENTRY_POINT_RENAME(ucase_toFullLower)
-#define ucase_toFullTitle U_ICU_ENTRY_POINT_RENAME(ucase_toFullTitle)
-#define ucase_toFullUpper U_ICU_ENTRY_POINT_RENAME(ucase_toFullUpper)
-#define ucase_tolower U_ICU_ENTRY_POINT_RENAME(ucase_tolower)
-#define ucase_totitle U_ICU_ENTRY_POINT_RENAME(ucase_totitle)
-#define ucase_toupper U_ICU_ENTRY_POINT_RENAME(ucase_toupper)
-#define ucasemap_close U_ICU_ENTRY_POINT_RENAME(ucasemap_close)
-#define ucasemap_getBreakIterator U_ICU_ENTRY_POINT_RENAME(ucasemap_getBreakIterator)
-#define ucasemap_getLocale U_ICU_ENTRY_POINT_RENAME(ucasemap_getLocale)
-#define ucasemap_getOptions U_ICU_ENTRY_POINT_RENAME(ucasemap_getOptions)
-#define ucasemap_open U_ICU_ENTRY_POINT_RENAME(ucasemap_open)
-#define ucasemap_setBreakIterator U_ICU_ENTRY_POINT_RENAME(ucasemap_setBreakIterator)
-#define ucasemap_setLocale U_ICU_ENTRY_POINT_RENAME(ucasemap_setLocale)
-#define ucasemap_setOptions U_ICU_ENTRY_POINT_RENAME(ucasemap_setOptions)
-#define ucasemap_toTitle U_ICU_ENTRY_POINT_RENAME(ucasemap_toTitle)
-#define ucasemap_utf8FoldCase U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8FoldCase)
-#define ucasemap_utf8ToLower U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8ToLower)
-#define ucasemap_utf8ToTitle U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8ToTitle)
-#define ucasemap_utf8ToUpper U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8ToUpper)
-#define ucd_close U_ICU_ENTRY_POINT_RENAME(ucd_close)
-#define ucd_flushCache U_ICU_ENTRY_POINT_RENAME(ucd_flushCache)
-#define ucd_freeCache U_ICU_ENTRY_POINT_RENAME(ucd_freeCache)
-#define ucd_getCollator U_ICU_ENTRY_POINT_RENAME(ucd_getCollator)
-#define ucd_open U_ICU_ENTRY_POINT_RENAME(ucd_open)
-#define uchar_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(uchar_addPropertyStarts)
-#define uchar_swapNames U_ICU_ENTRY_POINT_RENAME(uchar_swapNames)
-#define ucln_cleanupOne U_ICU_ENTRY_POINT_RENAME(ucln_cleanupOne)
-#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
-#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
-#define ucln_io_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_io_registerCleanup)
-#define ucln_lib_cleanup U_ICU_ENTRY_POINT_RENAME(ucln_lib_cleanup)
-#define ucln_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_registerCleanup)
-#define ucnv_MBCSFromUChar32 U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSFromUChar32)
-#define ucnv_MBCSFromUnicodeWithOffsets U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSFromUnicodeWithOffsets)
-#define ucnv_MBCSGetFilteredUnicodeSetForUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSGetFilteredUnicodeSetForUnicode)
-#define ucnv_MBCSGetType U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSGetType)
-#define ucnv_MBCSGetUnicodeSetForUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSGetUnicodeSetForUnicode)
-#define ucnv_MBCSIsLeadByte U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSIsLeadByte)
-#define ucnv_MBCSSimpleGetNextUChar U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSSimpleGetNextUChar)
-#define ucnv_MBCSToUnicodeWithOffsets U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSToUnicodeWithOffsets)
-#define ucnv_bld_countAvailableConverters U_ICU_ENTRY_POINT_RENAME(ucnv_bld_countAvailableConverters)
-#define ucnv_bld_getAvailableConverter U_ICU_ENTRY_POINT_RENAME(ucnv_bld_getAvailableConverter)
-#define ucnv_canCreateConverter U_ICU_ENTRY_POINT_RENAME(ucnv_canCreateConverter)
-#define ucnv_cbFromUWriteBytes U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteBytes)
-#define ucnv_cbFromUWriteSub U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteSub)
-#define ucnv_cbFromUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteUChars)
-#define ucnv_cbToUWriteSub U_ICU_ENTRY_POINT_RENAME(ucnv_cbToUWriteSub)
-#define ucnv_cbToUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_cbToUWriteUChars)
-#define ucnv_close U_ICU_ENTRY_POINT_RENAME(ucnv_close)
-#define ucnv_compareNames U_ICU_ENTRY_POINT_RENAME(ucnv_compareNames)
-#define ucnv_convert U_ICU_ENTRY_POINT_RENAME(ucnv_convert)
-#define ucnv_convertEx U_ICU_ENTRY_POINT_RENAME(ucnv_convertEx)
-#define ucnv_countAliases U_ICU_ENTRY_POINT_RENAME(ucnv_countAliases)
-#define ucnv_countAvailable U_ICU_ENTRY_POINT_RENAME(ucnv_countAvailable)
-#define ucnv_countStandards U_ICU_ENTRY_POINT_RENAME(ucnv_countStandards)
-#define ucnv_createAlgorithmicConverter U_ICU_ENTRY_POINT_RENAME(ucnv_createAlgorithmicConverter)
-#define ucnv_createConverter U_ICU_ENTRY_POINT_RENAME(ucnv_createConverter)
-#define ucnv_createConverterFromPackage U_ICU_ENTRY_POINT_RENAME(ucnv_createConverterFromPackage)
-#define ucnv_createConverterFromSharedData U_ICU_ENTRY_POINT_RENAME(ucnv_createConverterFromSharedData)
-#define ucnv_detectUnicodeSignature U_ICU_ENTRY_POINT_RENAME(ucnv_detectUnicodeSignature)
-#define ucnv_extContinueMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extContinueMatchFromU)
-#define ucnv_extContinueMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extContinueMatchToU)
-#define ucnv_extGetUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_extGetUnicodeSet)
-#define ucnv_extInitialMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extInitialMatchFromU)
-#define ucnv_extInitialMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extInitialMatchToU)
-#define ucnv_extSimpleMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extSimpleMatchFromU)
-#define ucnv_extSimpleMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extSimpleMatchToU)
-#define ucnv_fixFileSeparator U_ICU_ENTRY_POINT_RENAME(ucnv_fixFileSeparator)
-#define ucnv_flushCache U_ICU_ENTRY_POINT_RENAME(ucnv_flushCache)
-#define ucnv_fromAlgorithmic U_ICU_ENTRY_POINT_RENAME(ucnv_fromAlgorithmic)
-#define ucnv_fromUChars U_ICU_ENTRY_POINT_RENAME(ucnv_fromUChars)
-#define ucnv_fromUCountPending U_ICU_ENTRY_POINT_RENAME(ucnv_fromUCountPending)
-#define ucnv_fromUWriteBytes U_ICU_ENTRY_POINT_RENAME(ucnv_fromUWriteBytes)
-#define ucnv_fromUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_fromUnicode)
-#define ucnv_fromUnicode_UTF8 U_ICU_ENTRY_POINT_RENAME(ucnv_fromUnicode_UTF8)
-#define ucnv_fromUnicode_UTF8_OFFSETS_LOGIC U_ICU_ENTRY_POINT_RENAME(ucnv_fromUnicode_UTF8_OFFSETS_LOGIC)
-#define ucnv_getAlias U_ICU_ENTRY_POINT_RENAME(ucnv_getAlias)
-#define ucnv_getAliases U_ICU_ENTRY_POINT_RENAME(ucnv_getAliases)
-#define ucnv_getAvailableName U_ICU_ENTRY_POINT_RENAME(ucnv_getAvailableName)
-#define ucnv_getCCSID U_ICU_ENTRY_POINT_RENAME(ucnv_getCCSID)
-#define ucnv_getCanonicalName U_ICU_ENTRY_POINT_RENAME(ucnv_getCanonicalName)
-#define ucnv_getCompleteUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_getCompleteUnicodeSet)
-#define ucnv_getDefaultName U_ICU_ENTRY_POINT_RENAME(ucnv_getDefaultName)
-#define ucnv_getDisplayName U_ICU_ENTRY_POINT_RENAME(ucnv_getDisplayName)
-#define ucnv_getFromUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_getFromUCallBack)
-#define ucnv_getInvalidChars U_ICU_ENTRY_POINT_RENAME(ucnv_getInvalidChars)
-#define ucnv_getInvalidUChars U_ICU_ENTRY_POINT_RENAME(ucnv_getInvalidUChars)
-#define ucnv_getMaxCharSize U_ICU_ENTRY_POINT_RENAME(ucnv_getMaxCharSize)
-#define ucnv_getMinCharSize U_ICU_ENTRY_POINT_RENAME(ucnv_getMinCharSize)
-#define ucnv_getName U_ICU_ENTRY_POINT_RENAME(ucnv_getName)
-#define ucnv_getNextUChar U_ICU_ENTRY_POINT_RENAME(ucnv_getNextUChar)
-#define ucnv_getNonSurrogateUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_getNonSurrogateUnicodeSet)
-#define ucnv_getPlatform U_ICU_ENTRY_POINT_RENAME(ucnv_getPlatform)
-#define ucnv_getStandard U_ICU_ENTRY_POINT_RENAME(ucnv_getStandard)
-#define ucnv_getStandardName U_ICU_ENTRY_POINT_RENAME(ucnv_getStandardName)
-#define ucnv_getStarters U_ICU_ENTRY_POINT_RENAME(ucnv_getStarters)
-#define ucnv_getSubstChars U_ICU_ENTRY_POINT_RENAME(ucnv_getSubstChars)
-#define ucnv_getToUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_getToUCallBack)
-#define ucnv_getType U_ICU_ENTRY_POINT_RENAME(ucnv_getType)
-#define ucnv_getUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_getUnicodeSet)
-#define ucnv_incrementRefCount U_ICU_ENTRY_POINT_RENAME(ucnv_incrementRefCount)
-#define ucnv_io_countKnownConverters U_ICU_ENTRY_POINT_RENAME(ucnv_io_countKnownConverters)
-#define ucnv_io_getConverterName U_ICU_ENTRY_POINT_RENAME(ucnv_io_getConverterName)
-#define ucnv_io_stripASCIIForCompare U_ICU_ENTRY_POINT_RENAME(ucnv_io_stripASCIIForCompare)
-#define ucnv_io_stripEBCDICForCompare U_ICU_ENTRY_POINT_RENAME(ucnv_io_stripEBCDICForCompare)
-#define ucnv_isAmbiguous U_ICU_ENTRY_POINT_RENAME(ucnv_isAmbiguous)
-#define ucnv_load U_ICU_ENTRY_POINT_RENAME(ucnv_load)
-#define ucnv_loadSharedData U_ICU_ENTRY_POINT_RENAME(ucnv_loadSharedData)
-#define ucnv_open U_ICU_ENTRY_POINT_RENAME(ucnv_open)
-#define ucnv_openAllNames U_ICU_ENTRY_POINT_RENAME(ucnv_openAllNames)
-#define ucnv_openCCSID U_ICU_ENTRY_POINT_RENAME(ucnv_openCCSID)
-#define ucnv_openPackage U_ICU_ENTRY_POINT_RENAME(ucnv_openPackage)
-#define ucnv_openStandardNames U_ICU_ENTRY_POINT_RENAME(ucnv_openStandardNames)
-#define ucnv_openU U_ICU_ENTRY_POINT_RENAME(ucnv_openU)
-#define ucnv_reset U_ICU_ENTRY_POINT_RENAME(ucnv_reset)
-#define ucnv_resetFromUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_resetFromUnicode)
-#define ucnv_resetToUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_resetToUnicode)
-#define ucnv_safeClone U_ICU_ENTRY_POINT_RENAME(ucnv_safeClone)
-#define ucnv_setDefaultName U_ICU_ENTRY_POINT_RENAME(ucnv_setDefaultName)
-#define ucnv_setFallback U_ICU_ENTRY_POINT_RENAME(ucnv_setFallback)
-#define ucnv_setFromUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_setFromUCallBack)
-#define ucnv_setSubstChars U_ICU_ENTRY_POINT_RENAME(ucnv_setSubstChars)
-#define ucnv_setSubstString U_ICU_ENTRY_POINT_RENAME(ucnv_setSubstString)
-#define ucnv_setToUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_setToUCallBack)
-#define ucnv_swap U_ICU_ENTRY_POINT_RENAME(ucnv_swap)
-#define ucnv_swapAliases U_ICU_ENTRY_POINT_RENAME(ucnv_swapAliases)
-#define ucnv_toAlgorithmic U_ICU_ENTRY_POINT_RENAME(ucnv_toAlgorithmic)
-#define ucnv_toUChars U_ICU_ENTRY_POINT_RENAME(ucnv_toUChars)
-#define ucnv_toUCountPending U_ICU_ENTRY_POINT_RENAME(ucnv_toUCountPending)
-#define ucnv_toUWriteCodePoint U_ICU_ENTRY_POINT_RENAME(ucnv_toUWriteCodePoint)
-#define ucnv_toUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_toUWriteUChars)
-#define ucnv_toUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_toUnicode)
-#define ucnv_unload U_ICU_ENTRY_POINT_RENAME(ucnv_unload)
-#define ucnv_unloadSharedDataIfReady U_ICU_ENTRY_POINT_RENAME(ucnv_unloadSharedDataIfReady)
-#define ucnv_usesFallback U_ICU_ENTRY_POINT_RENAME(ucnv_usesFallback)
-#define ucnvsel_close U_ICU_ENTRY_POINT_RENAME(ucnvsel_close)
-#define ucnvsel_open U_ICU_ENTRY_POINT_RENAME(ucnvsel_open)
-#define ucnvsel_openFromSerialized U_ICU_ENTRY_POINT_RENAME(ucnvsel_openFromSerialized)
-#define ucnvsel_selectForString U_ICU_ENTRY_POINT_RENAME(ucnvsel_selectForString)
-#define ucnvsel_selectForUTF8 U_ICU_ENTRY_POINT_RENAME(ucnvsel_selectForUTF8)
-#define ucnvsel_serialize U_ICU_ENTRY_POINT_RENAME(ucnvsel_serialize)
-#define ucol_allocWeights U_ICU_ENTRY_POINT_RENAME(ucol_allocWeights)
-#define ucol_assembleTailoringTable U_ICU_ENTRY_POINT_RENAME(ucol_assembleTailoringTable)
-#define ucol_buildPermutationTable U_ICU_ENTRY_POINT_RENAME(ucol_buildPermutationTable)
-#define ucol_calcSortKey U_ICU_ENTRY_POINT_RENAME(ucol_calcSortKey)
-#define ucol_calcSortKeySimpleTertiary U_ICU_ENTRY_POINT_RENAME(ucol_calcSortKeySimpleTertiary)
-#define ucol_cloneBinary U_ICU_ENTRY_POINT_RENAME(ucol_cloneBinary)
-#define ucol_cloneRuleData U_ICU_ENTRY_POINT_RENAME(ucol_cloneRuleData)
-#define ucol_close U_ICU_ENTRY_POINT_RENAME(ucol_close)
-#define ucol_closeElements U_ICU_ENTRY_POINT_RENAME(ucol_closeElements)
-#define ucol_countAvailable U_ICU_ENTRY_POINT_RENAME(ucol_countAvailable)
-#define ucol_createElements U_ICU_ENTRY_POINT_RENAME(ucol_createElements)
-#define ucol_doCE U_ICU_ENTRY_POINT_RENAME(ucol_doCE)
-#define ucol_equal U_ICU_ENTRY_POINT_RENAME(ucol_equal)
-#define ucol_equals U_ICU_ENTRY_POINT_RENAME(ucol_equals)
-#define ucol_findReorderingEntry U_ICU_ENTRY_POINT_RENAME(ucol_findReorderingEntry)
-#define ucol_forceHanImplicit U_ICU_ENTRY_POINT_RENAME(ucol_forceHanImplicit)
-#define ucol_forgetUCA U_ICU_ENTRY_POINT_RENAME(ucol_forgetUCA)
-#define ucol_freeOffsetBuffer U_ICU_ENTRY_POINT_RENAME(ucol_freeOffsetBuffer)
-#define ucol_getAttribute U_ICU_ENTRY_POINT_RENAME(ucol_getAttribute)
-#define ucol_getAttributeOrDefault U_ICU_ENTRY_POINT_RENAME(ucol_getAttributeOrDefault)
-#define ucol_getAvailable U_ICU_ENTRY_POINT_RENAME(ucol_getAvailable)
-#define ucol_getBound U_ICU_ENTRY_POINT_RENAME(ucol_getBound)
-#define ucol_getCEStrengthDifference U_ICU_ENTRY_POINT_RENAME(ucol_getCEStrengthDifference)
-#define ucol_getContractions U_ICU_ENTRY_POINT_RENAME(ucol_getContractions)
-#define ucol_getContractionsAndExpansions U_ICU_ENTRY_POINT_RENAME(ucol_getContractionsAndExpansions)
-#define ucol_getDisplayName U_ICU_ENTRY_POINT_RENAME(ucol_getDisplayName)
-#define ucol_getFirstCE U_ICU_ENTRY_POINT_RENAME(ucol_getFirstCE)
-#define ucol_getFunctionalEquivalent U_ICU_ENTRY_POINT_RENAME(ucol_getFunctionalEquivalent)
-#define ucol_getKeywordValues U_ICU_ENTRY_POINT_RENAME(ucol_getKeywordValues)
-#define ucol_getKeywordValuesForLocale U_ICU_ENTRY_POINT_RENAME(ucol_getKeywordValuesForLocale)
-#define ucol_getKeywords U_ICU_ENTRY_POINT_RENAME(ucol_getKeywords)
-#define ucol_getLeadBytesForReorderCode U_ICU_ENTRY_POINT_RENAME(ucol_getLeadBytesForReorderCode)
-#define ucol_getLocale U_ICU_ENTRY_POINT_RENAME(ucol_getLocale)
-#define ucol_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ucol_getLocaleByType)
-#define ucol_getMaxExpansion U_ICU_ENTRY_POINT_RENAME(ucol_getMaxExpansion)
-#define ucol_getNextCE U_ICU_ENTRY_POINT_RENAME(ucol_getNextCE)
-#define ucol_getOffset U_ICU_ENTRY_POINT_RENAME(ucol_getOffset)
-#define ucol_getPrevCE U_ICU_ENTRY_POINT_RENAME(ucol_getPrevCE)
-#define ucol_getReorderCodes U_ICU_ENTRY_POINT_RENAME(ucol_getReorderCodes)
-#define ucol_getReorderCodesForLeadByte U_ICU_ENTRY_POINT_RENAME(ucol_getReorderCodesForLeadByte)
-#define ucol_getRules U_ICU_ENTRY_POINT_RENAME(ucol_getRules)
-#define ucol_getRulesEx U_ICU_ENTRY_POINT_RENAME(ucol_getRulesEx)
-#define ucol_getShortDefinitionString U_ICU_ENTRY_POINT_RENAME(ucol_getShortDefinitionString)
-#define ucol_getSortKey U_ICU_ENTRY_POINT_RENAME(ucol_getSortKey)
-#define ucol_getSortKeySize U_ICU_ENTRY_POINT_RENAME(ucol_getSortKeySize)
-#define ucol_getSortKeyWithAllocation U_ICU_ENTRY_POINT_RENAME(ucol_getSortKeyWithAllocation)
-#define ucol_getStrength U_ICU_ENTRY_POINT_RENAME(ucol_getStrength)
-#define ucol_getTailoredSet U_ICU_ENTRY_POINT_RENAME(ucol_getTailoredSet)
-#define ucol_getUCAVersion U_ICU_ENTRY_POINT_RENAME(ucol_getUCAVersion)
-#define ucol_getUnsafeSet U_ICU_ENTRY_POINT_RENAME(ucol_getUnsafeSet)
-#define ucol_getVariableTop U_ICU_ENTRY_POINT_RENAME(ucol_getVariableTop)
-#define ucol_getVersion U_ICU_ENTRY_POINT_RENAME(ucol_getVersion)
-#define ucol_greater U_ICU_ENTRY_POINT_RENAME(ucol_greater)
-#define ucol_greaterOrEqual U_ICU_ENTRY_POINT_RENAME(ucol_greaterOrEqual)
-#define ucol_initBuffers U_ICU_ENTRY_POINT_RENAME(ucol_initBuffers)
-#define ucol_initCollator U_ICU_ENTRY_POINT_RENAME(ucol_initCollator)
-#define ucol_initInverseUCA U_ICU_ENTRY_POINT_RENAME(ucol_initInverseUCA)
-#define ucol_initUCA U_ICU_ENTRY_POINT_RENAME(ucol_initUCA)
-#define ucol_inv_getNextCE U_ICU_ENTRY_POINT_RENAME(ucol_inv_getNextCE)
-#define ucol_inv_getPrevCE U_ICU_ENTRY_POINT_RENAME(ucol_inv_getPrevCE)
-#define ucol_isTailored U_ICU_ENTRY_POINT_RENAME(ucol_isTailored)
-#define ucol_keyHashCode U_ICU_ENTRY_POINT_RENAME(ucol_keyHashCode)
-#define ucol_looksLikeCollationBinary U_ICU_ENTRY_POINT_RENAME(ucol_looksLikeCollationBinary)
-#define ucol_mergeSortkeys U_ICU_ENTRY_POINT_RENAME(ucol_mergeSortkeys)
-#define ucol_next U_ICU_ENTRY_POINT_RENAME(ucol_next)
-#define ucol_nextProcessed U_ICU_ENTRY_POINT_RENAME(ucol_nextProcessed)
-#define ucol_nextSortKeyPart U_ICU_ENTRY_POINT_RENAME(ucol_nextSortKeyPart)
-#define ucol_nextWeight U_ICU_ENTRY_POINT_RENAME(ucol_nextWeight)
-#define ucol_normalizeShortDefinitionString U_ICU_ENTRY_POINT_RENAME(ucol_normalizeShortDefinitionString)
-#define ucol_open U_ICU_ENTRY_POINT_RENAME(ucol_open)
-#define ucol_openAvailableLocales U_ICU_ENTRY_POINT_RENAME(ucol_openAvailableLocales)
-#define ucol_openBinary U_ICU_ENTRY_POINT_RENAME(ucol_openBinary)
-#define ucol_openElements U_ICU_ENTRY_POINT_RENAME(ucol_openElements)
-#define ucol_openFromShortString U_ICU_ENTRY_POINT_RENAME(ucol_openFromShortString)
-#define ucol_openRules U_ICU_ENTRY_POINT_RENAME(ucol_openRules)
-#define ucol_openRulesForImport U_ICU_ENTRY_POINT_RENAME(ucol_openRulesForImport)
-#define ucol_open_internal U_ICU_ENTRY_POINT_RENAME(ucol_open_internal)
-#define ucol_prepareShortStringOpen U_ICU_ENTRY_POINT_RENAME(ucol_prepareShortStringOpen)
-#define ucol_previous U_ICU_ENTRY_POINT_RENAME(ucol_previous)
-#define ucol_previousProcessed U_ICU_ENTRY_POINT_RENAME(ucol_previousProcessed)
-#define ucol_primaryOrder U_ICU_ENTRY_POINT_RENAME(ucol_primaryOrder)
-#define ucol_prv_getSpecialCE U_ICU_ENTRY_POINT_RENAME(ucol_prv_getSpecialCE)
-#define ucol_prv_getSpecialPrevCE U_ICU_ENTRY_POINT_RENAME(ucol_prv_getSpecialPrevCE)
-#define ucol_reset U_ICU_ENTRY_POINT_RENAME(ucol_reset)
-#define ucol_restoreVariableTop U_ICU_ENTRY_POINT_RENAME(ucol_restoreVariableTop)
-#define ucol_safeClone U_ICU_ENTRY_POINT_RENAME(ucol_safeClone)
-#define ucol_secondaryOrder U_ICU_ENTRY_POINT_RENAME(ucol_secondaryOrder)
-#define ucol_setAttribute U_ICU_ENTRY_POINT_RENAME(ucol_setAttribute)
-#define ucol_setOffset U_ICU_ENTRY_POINT_RENAME(ucol_setOffset)
-#define ucol_setOptionsFromHeader U_ICU_ENTRY_POINT_RENAME(ucol_setOptionsFromHeader)
-#define ucol_setReorderCodes U_ICU_ENTRY_POINT_RENAME(ucol_setReorderCodes)
-#define ucol_setReqValidLocales U_ICU_ENTRY_POINT_RENAME(ucol_setReqValidLocales)
-#define ucol_setStrength U_ICU_ENTRY_POINT_RENAME(ucol_setStrength)
-#define ucol_setText U_ICU_ENTRY_POINT_RENAME(ucol_setText)
-#define ucol_setVariableTop U_ICU_ENTRY_POINT_RENAME(ucol_setVariableTop)
-#define ucol_strcoll U_ICU_ENTRY_POINT_RENAME(ucol_strcoll)
-#define ucol_strcollIter U_ICU_ENTRY_POINT_RENAME(ucol_strcollIter)
-#define ucol_swap U_ICU_ENTRY_POINT_RENAME(ucol_swap)
-#define ucol_swapBinary U_ICU_ENTRY_POINT_RENAME(ucol_swapBinary)
-#define ucol_swapInverseUCA U_ICU_ENTRY_POINT_RENAME(ucol_swapInverseUCA)
-#define ucol_tertiaryOrder U_ICU_ENTRY_POINT_RENAME(ucol_tertiaryOrder)
-#define ucol_tok_assembleTokenList U_ICU_ENTRY_POINT_RENAME(ucol_tok_assembleTokenList)
-#define ucol_tok_closeTokenList U_ICU_ENTRY_POINT_RENAME(ucol_tok_closeTokenList)
-#define ucol_tok_getNextArgument U_ICU_ENTRY_POINT_RENAME(ucol_tok_getNextArgument)
-#define ucol_tok_getRulesFromBundle U_ICU_ENTRY_POINT_RENAME(ucol_tok_getRulesFromBundle)
-#define ucol_tok_initTokenList U_ICU_ENTRY_POINT_RENAME(ucol_tok_initTokenList)
-#define ucol_tok_parseNextToken U_ICU_ENTRY_POINT_RENAME(ucol_tok_parseNextToken)
-#define ucol_updateInternalState U_ICU_ENTRY_POINT_RENAME(ucol_updateInternalState)
-#define ucsdet_close U_ICU_ENTRY_POINT_RENAME(ucsdet_close)
-#define ucsdet_detect U_ICU_ENTRY_POINT_RENAME(ucsdet_detect)
-#define ucsdet_detectAll U_ICU_ENTRY_POINT_RENAME(ucsdet_detectAll)
-#define ucsdet_enableInputFilter U_ICU_ENTRY_POINT_RENAME(ucsdet_enableInputFilter)
-#define ucsdet_getAllDetectableCharsets U_ICU_ENTRY_POINT_RENAME(ucsdet_getAllDetectableCharsets)
-#define ucsdet_getConfidence U_ICU_ENTRY_POINT_RENAME(ucsdet_getConfidence)
-#define ucsdet_getLanguage U_ICU_ENTRY_POINT_RENAME(ucsdet_getLanguage)
-#define ucsdet_getName U_ICU_ENTRY_POINT_RENAME(ucsdet_getName)
-#define ucsdet_getUChars U_ICU_ENTRY_POINT_RENAME(ucsdet_getUChars)
-#define ucsdet_isInputFilterEnabled U_ICU_ENTRY_POINT_RENAME(ucsdet_isInputFilterEnabled)
-#define ucsdet_open U_ICU_ENTRY_POINT_RENAME(ucsdet_open)
-#define ucsdet_setDeclaredEncoding U_ICU_ENTRY_POINT_RENAME(ucsdet_setDeclaredEncoding)
-#define ucsdet_setText U_ICU_ENTRY_POINT_RENAME(ucsdet_setText)
-#define ucurr_countCurrencies U_ICU_ENTRY_POINT_RENAME(ucurr_countCurrencies)
-#define ucurr_forLocale U_ICU_ENTRY_POINT_RENAME(ucurr_forLocale)
-#define ucurr_forLocaleAndDate U_ICU_ENTRY_POINT_RENAME(ucurr_forLocaleAndDate)
-#define ucurr_getDefaultFractionDigits U_ICU_ENTRY_POINT_RENAME(ucurr_getDefaultFractionDigits)
-#define ucurr_getKeywordValuesForLocale U_ICU_ENTRY_POINT_RENAME(ucurr_getKeywordValuesForLocale)
-#define ucurr_getName U_ICU_ENTRY_POINT_RENAME(ucurr_getName)
-#define ucurr_getPluralName U_ICU_ENTRY_POINT_RENAME(ucurr_getPluralName)
-#define ucurr_getRoundingIncrement U_ICU_ENTRY_POINT_RENAME(ucurr_getRoundingIncrement)
-#define ucurr_openISOCurrencies U_ICU_ENTRY_POINT_RENAME(ucurr_openISOCurrencies)
-#define ucurr_register U_ICU_ENTRY_POINT_RENAME(ucurr_register)
-#define ucurr_unregister U_ICU_ENTRY_POINT_RENAME(ucurr_unregister)
-#define udat_applyPattern U_ICU_ENTRY_POINT_RENAME(udat_applyPattern)
-#define udat_applyPatternRelative U_ICU_ENTRY_POINT_RENAME(udat_applyPatternRelative)
-#define udat_clone U_ICU_ENTRY_POINT_RENAME(udat_clone)
-#define udat_close U_ICU_ENTRY_POINT_RENAME(udat_close)
-#define udat_countAvailable U_ICU_ENTRY_POINT_RENAME(udat_countAvailable)
-#define udat_countSymbols U_ICU_ENTRY_POINT_RENAME(udat_countSymbols)
-#define udat_format U_ICU_ENTRY_POINT_RENAME(udat_format)
-#define udat_get2DigitYearStart U_ICU_ENTRY_POINT_RENAME(udat_get2DigitYearStart)
-#define udat_getAvailable U_ICU_ENTRY_POINT_RENAME(udat_getAvailable)
-#define udat_getCalendar U_ICU_ENTRY_POINT_RENAME(udat_getCalendar)
-#define udat_getLocaleByType U_ICU_ENTRY_POINT_RENAME(udat_getLocaleByType)
-#define udat_getNumberFormat U_ICU_ENTRY_POINT_RENAME(udat_getNumberFormat)
-#define udat_getSymbols U_ICU_ENTRY_POINT_RENAME(udat_getSymbols)
-#define udat_isLenient U_ICU_ENTRY_POINT_RENAME(udat_isLenient)
-#define udat_open U_ICU_ENTRY_POINT_RENAME(udat_open)
-#define udat_parse U_ICU_ENTRY_POINT_RENAME(udat_parse)
-#define udat_parseCalendar U_ICU_ENTRY_POINT_RENAME(udat_parseCalendar)
-#define udat_set2DigitYearStart U_ICU_ENTRY_POINT_RENAME(udat_set2DigitYearStart)
-#define udat_setCalendar U_ICU_ENTRY_POINT_RENAME(udat_setCalendar)
-#define udat_setLenient U_ICU_ENTRY_POINT_RENAME(udat_setLenient)
-#define udat_setNumberFormat U_ICU_ENTRY_POINT_RENAME(udat_setNumberFormat)
-#define udat_setSymbols U_ICU_ENTRY_POINT_RENAME(udat_setSymbols)
-#define udat_toCalendarDateField U_ICU_ENTRY_POINT_RENAME(udat_toCalendarDateField)
-#define udat_toPattern U_ICU_ENTRY_POINT_RENAME(udat_toPattern)
-#define udat_toPatternRelativeDate U_ICU_ENTRY_POINT_RENAME(udat_toPatternRelativeDate)
-#define udat_toPatternRelativeTime U_ICU_ENTRY_POINT_RENAME(udat_toPatternRelativeTime)
-#define udata_checkCommonData U_ICU_ENTRY_POINT_RENAME(udata_checkCommonData)
-#define udata_close U_ICU_ENTRY_POINT_RENAME(udata_close)
-#define udata_closeSwapper U_ICU_ENTRY_POINT_RENAME(udata_closeSwapper)
-#define udata_getHeaderSize U_ICU_ENTRY_POINT_RENAME(udata_getHeaderSize)
-#define udata_getInfo U_ICU_ENTRY_POINT_RENAME(udata_getInfo)
-#define udata_getInfoSize U_ICU_ENTRY_POINT_RENAME(udata_getInfoSize)
-#define udata_getLength U_ICU_ENTRY_POINT_RENAME(udata_getLength)
-#define udata_getMemory U_ICU_ENTRY_POINT_RENAME(udata_getMemory)
-#define udata_getRawMemory U_ICU_ENTRY_POINT_RENAME(udata_getRawMemory)
-#define udata_open U_ICU_ENTRY_POINT_RENAME(udata_open)
-#define udata_openChoice U_ICU_ENTRY_POINT_RENAME(udata_openChoice)
-#define udata_openSwapper U_ICU_ENTRY_POINT_RENAME(udata_openSwapper)
-#define udata_openSwapperForInputData U_ICU_ENTRY_POINT_RENAME(udata_openSwapperForInputData)
-#define udata_printError U_ICU_ENTRY_POINT_RENAME(udata_printError)
-#define udata_readInt16 U_ICU_ENTRY_POINT_RENAME(udata_readInt16)
-#define udata_readInt32 U_ICU_ENTRY_POINT_RENAME(udata_readInt32)
-#define udata_setAppData U_ICU_ENTRY_POINT_RENAME(udata_setAppData)
-#define udata_setCommonData U_ICU_ENTRY_POINT_RENAME(udata_setCommonData)
-#define udata_setFileAccess U_ICU_ENTRY_POINT_RENAME(udata_setFileAccess)
-#define udata_swapDataHeader U_ICU_ENTRY_POINT_RENAME(udata_swapDataHeader)
-#define udata_swapInvStringBlock U_ICU_ENTRY_POINT_RENAME(udata_swapInvStringBlock)
-#define udatpg_addPattern U_ICU_ENTRY_POINT_RENAME(udatpg_addPattern)
-#define udatpg_clone U_ICU_ENTRY_POINT_RENAME(udatpg_clone)
-#define udatpg_close U_ICU_ENTRY_POINT_RENAME(udatpg_close)
-#define udatpg_getAppendItemFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getAppendItemFormat)
-#define udatpg_getAppendItemName U_ICU_ENTRY_POINT_RENAME(udatpg_getAppendItemName)
-#define udatpg_getBaseSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getBaseSkeleton)
-#define udatpg_getBestPattern U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPattern)
-#define udatpg_getBestPatternWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPatternWithOptions)
-#define udatpg_getDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormat)
-#define udatpg_getDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_getDecimal)
-#define udatpg_getPatternForSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getPatternForSkeleton)
-#define udatpg_getSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getSkeleton)
-#define udatpg_open U_ICU_ENTRY_POINT_RENAME(udatpg_open)
-#define udatpg_openBaseSkeletons U_ICU_ENTRY_POINT_RENAME(udatpg_openBaseSkeletons)
-#define udatpg_openEmpty U_ICU_ENTRY_POINT_RENAME(udatpg_openEmpty)
-#define udatpg_openSkeletons U_ICU_ENTRY_POINT_RENAME(udatpg_openSkeletons)
-#define udatpg_replaceFieldTypes U_ICU_ENTRY_POINT_RENAME(udatpg_replaceFieldTypes)
-#define udatpg_replaceFieldTypesWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_replaceFieldTypesWithOptions)
-#define udatpg_setAppendItemFormat U_ICU_ENTRY_POINT_RENAME(udatpg_setAppendItemFormat)
-#define udatpg_setAppendItemName U_ICU_ENTRY_POINT_RENAME(udatpg_setAppendItemName)
-#define udatpg_setDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_setDateTimeFormat)
-#define udatpg_setDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_setDecimal)
-#define uenum_close U_ICU_ENTRY_POINT_RENAME(uenum_close)
-#define uenum_count U_ICU_ENTRY_POINT_RENAME(uenum_count)
-#define uenum_next U_ICU_ENTRY_POINT_RENAME(uenum_next)
-#define uenum_nextDefault U_ICU_ENTRY_POINT_RENAME(uenum_nextDefault)
-#define uenum_openCharStringsEnumeration U_ICU_ENTRY_POINT_RENAME(uenum_openCharStringsEnumeration)
-#define uenum_openFromStringEnumeration U_ICU_ENTRY_POINT_RENAME(uenum_openFromStringEnumeration)
-#define uenum_reset U_ICU_ENTRY_POINT_RENAME(uenum_reset)
-#define uenum_unext U_ICU_ENTRY_POINT_RENAME(uenum_unext)
-#define uenum_unextDefault U_ICU_ENTRY_POINT_RENAME(uenum_unextDefault)
-#define ufile_close_translit U_ICU_ENTRY_POINT_RENAME(ufile_close_translit)
-#define ufile_fill_uchar_buffer U_ICU_ENTRY_POINT_RENAME(ufile_fill_uchar_buffer)
-#define ufile_flush_io U_ICU_ENTRY_POINT_RENAME(ufile_flush_io)
-#define ufile_flush_translit U_ICU_ENTRY_POINT_RENAME(ufile_flush_translit)
-#define ufile_getch U_ICU_ENTRY_POINT_RENAME(ufile_getch)
-#define ufile_getch32 U_ICU_ENTRY_POINT_RENAME(ufile_getch32)
-#define ufmt_64tou U_ICU_ENTRY_POINT_RENAME(ufmt_64tou)
-#define ufmt_defaultCPToUnicode U_ICU_ENTRY_POINT_RENAME(ufmt_defaultCPToUnicode)
-#define ufmt_digitvalue U_ICU_ENTRY_POINT_RENAME(ufmt_digitvalue)
-#define ufmt_isdigit U_ICU_ENTRY_POINT_RENAME(ufmt_isdigit)
-#define ufmt_ptou U_ICU_ENTRY_POINT_RENAME(ufmt_ptou)
-#define ufmt_uto64 U_ICU_ENTRY_POINT_RENAME(ufmt_uto64)
-#define ufmt_utop U_ICU_ENTRY_POINT_RENAME(ufmt_utop)
-#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
-#define uhash_compareCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareCaselessUnicodeString)
-#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
-#define uhash_compareIChars U_ICU_ENTRY_POINT_RENAME(uhash_compareIChars)
-#define uhash_compareLong U_ICU_ENTRY_POINT_RENAME(uhash_compareLong)
-#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
-#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
-#define uhash_count U_ICU_ENTRY_POINT_RENAME(uhash_count)
-#define uhash_deleteHashtable U_ICU_ENTRY_POINT_RENAME(uhash_deleteHashtable)
-#define uhash_deleteUObject U_ICU_ENTRY_POINT_RENAME(uhash_deleteUObject)
-#define uhash_deleteUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_deleteUnicodeString)
-#define uhash_equals U_ICU_ENTRY_POINT_RENAME(uhash_equals)
-#define uhash_find U_ICU_ENTRY_POINT_RENAME(uhash_find)
-#define uhash_freeBlock U_ICU_ENTRY_POINT_RENAME(uhash_freeBlock)
-#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
-#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
-#define uhash_hashCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashCaselessUnicodeString)
-#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
-#define uhash_hashIChars U_ICU_ENTRY_POINT_RENAME(uhash_hashIChars)
-#define uhash_hashLong U_ICU_ENTRY_POINT_RENAME(uhash_hashLong)
-#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
-#define uhash_hashUCharsN U_ICU_ENTRY_POINT_RENAME(uhash_hashUCharsN)
-#define uhash_hashUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashUnicodeString)
-#define uhash_iget U_ICU_ENTRY_POINT_RENAME(uhash_iget)
-#define uhash_igeti U_ICU_ENTRY_POINT_RENAME(uhash_igeti)
-#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init)
-#define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput)
-#define uhash_iputi U_ICU_ENTRY_POINT_RENAME(uhash_iputi)
-#define uhash_iremove U_ICU_ENTRY_POINT_RENAME(uhash_iremove)
-#define uhash_iremovei U_ICU_ENTRY_POINT_RENAME(uhash_iremovei)
-#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
-#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
-#define uhash_openSize U_ICU_ENTRY_POINT_RENAME(uhash_openSize)
-#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
-#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
-#define uhash_remove U_ICU_ENTRY_POINT_RENAME(uhash_remove)
-#define uhash_removeAll U_ICU_ENTRY_POINT_RENAME(uhash_removeAll)
-#define uhash_removeElement U_ICU_ENTRY_POINT_RENAME(uhash_removeElement)
-#define uhash_removei U_ICU_ENTRY_POINT_RENAME(uhash_removei)
-#define uhash_setKeyComparator U_ICU_ENTRY_POINT_RENAME(uhash_setKeyComparator)
-#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
-#define uhash_setKeyHasher U_ICU_ENTRY_POINT_RENAME(uhash_setKeyHasher)
-#define uhash_setResizePolicy U_ICU_ENTRY_POINT_RENAME(uhash_setResizePolicy)
-#define uhash_setValueComparator U_ICU_ENTRY_POINT_RENAME(uhash_setValueComparator)
-#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
-#define uidna_IDNToASCII U_ICU_ENTRY_POINT_RENAME(uidna_IDNToASCII)
-#define uidna_IDNToUnicode U_ICU_ENTRY_POINT_RENAME(uidna_IDNToUnicode)
-#define uidna_close U_ICU_ENTRY_POINT_RENAME(uidna_close)
-#define uidna_compare U_ICU_ENTRY_POINT_RENAME(uidna_compare)
-#define uidna_labelToASCII U_ICU_ENTRY_POINT_RENAME(uidna_labelToASCII)
-#define uidna_labelToASCII_UTF8 U_ICU_ENTRY_POINT_RENAME(uidna_labelToASCII_UTF8)
-#define uidna_labelToUnicode U_ICU_ENTRY_POINT_RENAME(uidna_labelToUnicode)
-#define uidna_labelToUnicodeUTF8 U_ICU_ENTRY_POINT_RENAME(uidna_labelToUnicodeUTF8)
-#define uidna_nameToASCII U_ICU_ENTRY_POINT_RENAME(uidna_nameToASCII)
-#define uidna_nameToASCII_UTF8 U_ICU_ENTRY_POINT_RENAME(uidna_nameToASCII_UTF8)
-#define uidna_nameToUnicode U_ICU_ENTRY_POINT_RENAME(uidna_nameToUnicode)
-#define uidna_nameToUnicodeUTF8 U_ICU_ENTRY_POINT_RENAME(uidna_nameToUnicodeUTF8)
-#define uidna_openUTS46 U_ICU_ENTRY_POINT_RENAME(uidna_openUTS46)
-#define uidna_toASCII U_ICU_ENTRY_POINT_RENAME(uidna_toASCII)
-#define uidna_toUnicode U_ICU_ENTRY_POINT_RENAME(uidna_toUnicode)
-#define uiter_current32 U_ICU_ENTRY_POINT_RENAME(uiter_current32)
-#define uiter_getState U_ICU_ENTRY_POINT_RENAME(uiter_getState)
-#define uiter_next32 U_ICU_ENTRY_POINT_RENAME(uiter_next32)
-#define uiter_previous32 U_ICU_ENTRY_POINT_RENAME(uiter_previous32)
-#define uiter_setCharacterIterator U_ICU_ENTRY_POINT_RENAME(uiter_setCharacterIterator)
-#define uiter_setReplaceable U_ICU_ENTRY_POINT_RENAME(uiter_setReplaceable)
-#define uiter_setState U_ICU_ENTRY_POINT_RENAME(uiter_setState)
-#define uiter_setString U_ICU_ENTRY_POINT_RENAME(uiter_setString)
-#define uiter_setUTF16BE U_ICU_ENTRY_POINT_RENAME(uiter_setUTF16BE)
-#define uiter_setUTF8 U_ICU_ENTRY_POINT_RENAME(uiter_setUTF8)
-#define uldn_close U_ICU_ENTRY_POINT_RENAME(uldn_close)
-#define uldn_getDialectHandling U_ICU_ENTRY_POINT_RENAME(uldn_getDialectHandling)
-#define uldn_getLocale U_ICU_ENTRY_POINT_RENAME(uldn_getLocale)
-#define uldn_keyDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_keyDisplayName)
-#define uldn_keyValueDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_keyValueDisplayName)
-#define uldn_languageDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_languageDisplayName)
-#define uldn_localeDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_localeDisplayName)
-#define uldn_open U_ICU_ENTRY_POINT_RENAME(uldn_open)
-#define uldn_regionDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_regionDisplayName)
-#define uldn_scriptCodeDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_scriptCodeDisplayName)
-#define uldn_scriptDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_scriptDisplayName)
-#define uldn_variantDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_variantDisplayName)
-#define ulist_addItemBeginList U_ICU_ENTRY_POINT_RENAME(ulist_addItemBeginList)
-#define ulist_addItemEndList U_ICU_ENTRY_POINT_RENAME(ulist_addItemEndList)
-#define ulist_close_keyword_values_iterator U_ICU_ENTRY_POINT_RENAME(ulist_close_keyword_values_iterator)
-#define ulist_containsString U_ICU_ENTRY_POINT_RENAME(ulist_containsString)
-#define ulist_count_keyword_values U_ICU_ENTRY_POINT_RENAME(ulist_count_keyword_values)
-#define ulist_createEmptyList U_ICU_ENTRY_POINT_RENAME(ulist_createEmptyList)
-#define ulist_deleteList U_ICU_ENTRY_POINT_RENAME(ulist_deleteList)
-#define ulist_getListFromEnum U_ICU_ENTRY_POINT_RENAME(ulist_getListFromEnum)
-#define ulist_getListSize U_ICU_ENTRY_POINT_RENAME(ulist_getListSize)
-#define ulist_getNext U_ICU_ENTRY_POINT_RENAME(ulist_getNext)
-#define ulist_next_keyword_value U_ICU_ENTRY_POINT_RENAME(ulist_next_keyword_value)
-#define ulist_resetList U_ICU_ENTRY_POINT_RENAME(ulist_resetList)
-#define ulist_reset_keyword_values_iterator U_ICU_ENTRY_POINT_RENAME(ulist_reset_keyword_values_iterator)
-#define uloc_acceptLanguage U_ICU_ENTRY_POINT_RENAME(uloc_acceptLanguage)
-#define uloc_acceptLanguageFromHTTP U_ICU_ENTRY_POINT_RENAME(uloc_acceptLanguageFromHTTP)
-#define uloc_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(uloc_addLikelySubtags)
-#define uloc_canonicalize U_ICU_ENTRY_POINT_RENAME(uloc_canonicalize)
-#define uloc_countAvailable U_ICU_ENTRY_POINT_RENAME(uloc_countAvailable)
-#define uloc_forLanguageTag U_ICU_ENTRY_POINT_RENAME(uloc_forLanguageTag)
-#define uloc_getAvailable U_ICU_ENTRY_POINT_RENAME(uloc_getAvailable)
-#define uloc_getBaseName U_ICU_ENTRY_POINT_RENAME(uloc_getBaseName)
-#define uloc_getCharacterOrientation U_ICU_ENTRY_POINT_RENAME(uloc_getCharacterOrientation)
-#define uloc_getCountry U_ICU_ENTRY_POINT_RENAME(uloc_getCountry)
-#define uloc_getCurrentCountryID U_ICU_ENTRY_POINT_RENAME(uloc_getCurrentCountryID)
-#define uloc_getCurrentLanguageID U_ICU_ENTRY_POINT_RENAME(uloc_getCurrentLanguageID)
-#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
-#define uloc_getDisplayCountry U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayCountry)
-#define uloc_getDisplayKeyword U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayKeyword)
-#define uloc_getDisplayKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayKeywordValue)
-#define uloc_getDisplayLanguage U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayLanguage)
-#define uloc_getDisplayName U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayName)
-#define uloc_getDisplayScript U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScript)
-#define uloc_getDisplayVariant U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayVariant)
-#define uloc_getISO3Country U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Country)
-#define uloc_getISO3Language U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Language)
-#define uloc_getISOCountries U_ICU_ENTRY_POINT_RENAME(uloc_getISOCountries)
-#define uloc_getISOLanguages U_ICU_ENTRY_POINT_RENAME(uloc_getISOLanguages)
-#define uloc_getKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_getKeywordValue)
-#define uloc_getLCID U_ICU_ENTRY_POINT_RENAME(uloc_getLCID)
-#define uloc_getLanguage U_ICU_ENTRY_POINT_RENAME(uloc_getLanguage)
-#define uloc_getLineOrientation U_ICU_ENTRY_POINT_RENAME(uloc_getLineOrientation)
-#define uloc_getLocaleForLCID U_ICU_ENTRY_POINT_RENAME(uloc_getLocaleForLCID)
-#define uloc_getName U_ICU_ENTRY_POINT_RENAME(uloc_getName)
-#define uloc_getParent U_ICU_ENTRY_POINT_RENAME(uloc_getParent)
-#define uloc_getScript U_ICU_ENTRY_POINT_RENAME(uloc_getScript)
-#define uloc_getTableStringWithFallback U_ICU_ENTRY_POINT_RENAME(uloc_getTableStringWithFallback)
-#define uloc_getVariant U_ICU_ENTRY_POINT_RENAME(uloc_getVariant)
-#define uloc_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(uloc_minimizeSubtags)
-#define uloc_openKeywordList U_ICU_ENTRY_POINT_RENAME(uloc_openKeywordList)
-#define uloc_openKeywords U_ICU_ENTRY_POINT_RENAME(uloc_openKeywords)
-#define uloc_setDefault U_ICU_ENTRY_POINT_RENAME(uloc_setDefault)
-#define uloc_setKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_setKeywordValue)
-#define uloc_toLanguageTag U_ICU_ENTRY_POINT_RENAME(uloc_toLanguageTag)
-#define ulocdata_close U_ICU_ENTRY_POINT_RENAME(ulocdata_close)
-#define ulocdata_getCLDRVersion U_ICU_ENTRY_POINT_RENAME(ulocdata_getCLDRVersion)
-#define ulocdata_getDelimiter U_ICU_ENTRY_POINT_RENAME(ulocdata_getDelimiter)
-#define ulocdata_getExemplarSet U_ICU_ENTRY_POINT_RENAME(ulocdata_getExemplarSet)
-#define ulocdata_getLocaleDisplayPattern U_ICU_ENTRY_POINT_RENAME(ulocdata_getLocaleDisplayPattern)
-#define ulocdata_getLocaleSeparator U_ICU_ENTRY_POINT_RENAME(ulocdata_getLocaleSeparator)
-#define ulocdata_getMeasurementSystem U_ICU_ENTRY_POINT_RENAME(ulocdata_getMeasurementSystem)
-#define ulocdata_getNoSubstitute U_ICU_ENTRY_POINT_RENAME(ulocdata_getNoSubstitute)
-#define ulocdata_getPaperSize U_ICU_ENTRY_POINT_RENAME(ulocdata_getPaperSize)
-#define ulocdata_open U_ICU_ENTRY_POINT_RENAME(ulocdata_open)
-#define ulocdata_setNoSubstitute U_ICU_ENTRY_POINT_RENAME(ulocdata_setNoSubstitute)
-#define ulocimp_getCountry U_ICU_ENTRY_POINT_RENAME(ulocimp_getCountry)
-#define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage)
-#define ulocimp_getScript U_ICU_ENTRY_POINT_RENAME(ulocimp_getScript)
-#define umsg_applyPattern U_ICU_ENTRY_POINT_RENAME(umsg_applyPattern)
-#define umsg_autoQuoteApostrophe U_ICU_ENTRY_POINT_RENAME(umsg_autoQuoteApostrophe)
-#define umsg_clone U_ICU_ENTRY_POINT_RENAME(umsg_clone)
-#define umsg_close U_ICU_ENTRY_POINT_RENAME(umsg_close)
-#define umsg_format U_ICU_ENTRY_POINT_RENAME(umsg_format)
-#define umsg_getLocale U_ICU_ENTRY_POINT_RENAME(umsg_getLocale)
-#define umsg_open U_ICU_ENTRY_POINT_RENAME(umsg_open)
-#define umsg_parse U_ICU_ENTRY_POINT_RENAME(umsg_parse)
-#define umsg_setLocale U_ICU_ENTRY_POINT_RENAME(umsg_setLocale)
-#define umsg_toPattern U_ICU_ENTRY_POINT_RENAME(umsg_toPattern)
-#define umsg_vformat U_ICU_ENTRY_POINT_RENAME(umsg_vformat)
-#define umsg_vparse U_ICU_ENTRY_POINT_RENAME(umsg_vparse)
-#define umtx_atomic_dec U_ICU_ENTRY_POINT_RENAME(umtx_atomic_dec)
-#define umtx_atomic_inc U_ICU_ENTRY_POINT_RENAME(umtx_atomic_inc)
-#define umtx_cleanup U_ICU_ENTRY_POINT_RENAME(umtx_cleanup)
-#define umtx_destroy U_ICU_ENTRY_POINT_RENAME(umtx_destroy)
-#define umtx_init U_ICU_ENTRY_POINT_RENAME(umtx_init)
-#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
-#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
-#define uniset_getUnicode32Instance U_ICU_ENTRY_POINT_RENAME(uniset_getUnicode32Instance)
-#define unorm2_append U_ICU_ENTRY_POINT_RENAME(unorm2_append)
-#define unorm2_close U_ICU_ENTRY_POINT_RENAME(unorm2_close)
-#define unorm2_getDecomposition U_ICU_ENTRY_POINT_RENAME(unorm2_getDecomposition)
-#define unorm2_getInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getInstance)
-#define unorm2_hasBoundaryAfter U_ICU_ENTRY_POINT_RENAME(unorm2_hasBoundaryAfter)
-#define unorm2_hasBoundaryBefore U_ICU_ENTRY_POINT_RENAME(unorm2_hasBoundaryBefore)
-#define unorm2_isInert U_ICU_ENTRY_POINT_RENAME(unorm2_isInert)
-#define unorm2_isNormalized U_ICU_ENTRY_POINT_RENAME(unorm2_isNormalized)
-#define unorm2_normalize U_ICU_ENTRY_POINT_RENAME(unorm2_normalize)
-#define unorm2_normalizeSecondAndAppend U_ICU_ENTRY_POINT_RENAME(unorm2_normalizeSecondAndAppend)
-#define unorm2_openFiltered U_ICU_ENTRY_POINT_RENAME(unorm2_openFiltered)
-#define unorm2_quickCheck U_ICU_ENTRY_POINT_RENAME(unorm2_quickCheck)
-#define unorm2_spanQuickCheckYes U_ICU_ENTRY_POINT_RENAME(unorm2_spanQuickCheckYes)
-#define unorm2_swap U_ICU_ENTRY_POINT_RENAME(unorm2_swap)
-#define unorm_closeIter U_ICU_ENTRY_POINT_RENAME(unorm_closeIter)
-#define unorm_compare U_ICU_ENTRY_POINT_RENAME(unorm_compare)
-#define unorm_concatenate U_ICU_ENTRY_POINT_RENAME(unorm_concatenate)
-#define unorm_getFCDTrieIndex U_ICU_ENTRY_POINT_RENAME(unorm_getFCDTrieIndex)
-#define unorm_getQuickCheck U_ICU_ENTRY_POINT_RENAME(unorm_getQuickCheck)
-#define unorm_isNormalized U_ICU_ENTRY_POINT_RENAME(unorm_isNormalized)
-#define unorm_isNormalizedWithOptions U_ICU_ENTRY_POINT_RENAME(unorm_isNormalizedWithOptions)
-#define unorm_next U_ICU_ENTRY_POINT_RENAME(unorm_next)
-#define unorm_normalize U_ICU_ENTRY_POINT_RENAME(unorm_normalize)
-#define unorm_openIter U_ICU_ENTRY_POINT_RENAME(unorm_openIter)
-#define unorm_previous U_ICU_ENTRY_POINT_RENAME(unorm_previous)
-#define unorm_quickCheck U_ICU_ENTRY_POINT_RENAME(unorm_quickCheck)
-#define unorm_quickCheckWithOptions U_ICU_ENTRY_POINT_RENAME(unorm_quickCheckWithOptions)
-#define unorm_setIter U_ICU_ENTRY_POINT_RENAME(unorm_setIter)
-#define unum_applyPattern U_ICU_ENTRY_POINT_RENAME(unum_applyPattern)
-#define unum_clone U_ICU_ENTRY_POINT_RENAME(unum_clone)
-#define unum_close U_ICU_ENTRY_POINT_RENAME(unum_close)
-#define unum_countAvailable U_ICU_ENTRY_POINT_RENAME(unum_countAvailable)
-#define unum_format U_ICU_ENTRY_POINT_RENAME(unum_format)
-#define unum_formatDecimal U_ICU_ENTRY_POINT_RENAME(unum_formatDecimal)
-#define unum_formatDouble U_ICU_ENTRY_POINT_RENAME(unum_formatDouble)
-#define unum_formatDoubleCurrency U_ICU_ENTRY_POINT_RENAME(unum_formatDoubleCurrency)
-#define unum_formatInt64 U_ICU_ENTRY_POINT_RENAME(unum_formatInt64)
-#define unum_getAttribute U_ICU_ENTRY_POINT_RENAME(unum_getAttribute)
-#define unum_getAvailable U_ICU_ENTRY_POINT_RENAME(unum_getAvailable)
-#define unum_getDoubleAttribute U_ICU_ENTRY_POINT_RENAME(unum_getDoubleAttribute)
-#define unum_getLocaleByType U_ICU_ENTRY_POINT_RENAME(unum_getLocaleByType)
-#define unum_getSymbol U_ICU_ENTRY_POINT_RENAME(unum_getSymbol)
-#define unum_getTextAttribute U_ICU_ENTRY_POINT_RENAME(unum_getTextAttribute)
-#define unum_open U_ICU_ENTRY_POINT_RENAME(unum_open)
-#define unum_parse U_ICU_ENTRY_POINT_RENAME(unum_parse)
-#define unum_parseDecimal U_ICU_ENTRY_POINT_RENAME(unum_parseDecimal)
-#define unum_parseDouble U_ICU_ENTRY_POINT_RENAME(unum_parseDouble)
-#define unum_parseDoubleCurrency U_ICU_ENTRY_POINT_RENAME(unum_parseDoubleCurrency)
-#define unum_parseInt64 U_ICU_ENTRY_POINT_RENAME(unum_parseInt64)
-#define unum_setAttribute U_ICU_ENTRY_POINT_RENAME(unum_setAttribute)
-#define unum_setDoubleAttribute U_ICU_ENTRY_POINT_RENAME(unum_setDoubleAttribute)
-#define unum_setSymbol U_ICU_ENTRY_POINT_RENAME(unum_setSymbol)
-#define unum_setTextAttribute U_ICU_ENTRY_POINT_RENAME(unum_setTextAttribute)
-#define unum_toPattern U_ICU_ENTRY_POINT_RENAME(unum_toPattern)
-#define uplug_closeLibrary U_ICU_ENTRY_POINT_RENAME(uplug_closeLibrary)
-#define uplug_findLibrary U_ICU_ENTRY_POINT_RENAME(uplug_findLibrary)
-#define uplug_getConfiguration U_ICU_ENTRY_POINT_RENAME(uplug_getConfiguration)
-#define uplug_getContext U_ICU_ENTRY_POINT_RENAME(uplug_getContext)
-#define uplug_getCurrentLevel U_ICU_ENTRY_POINT_RENAME(uplug_getCurrentLevel)
-#define uplug_getLibrary U_ICU_ENTRY_POINT_RENAME(uplug_getLibrary)
-#define uplug_getLibraryName U_ICU_ENTRY_POINT_RENAME(uplug_getLibraryName)
-#define uplug_getPlugInternal U_ICU_ENTRY_POINT_RENAME(uplug_getPlugInternal)
-#define uplug_getPlugLevel U_ICU_ENTRY_POINT_RENAME(uplug_getPlugLevel)
-#define uplug_getPlugLoadStatus U_ICU_ENTRY_POINT_RENAME(uplug_getPlugLoadStatus)
-#define uplug_getPlugName U_ICU_ENTRY_POINT_RENAME(uplug_getPlugName)
-#define uplug_getPluginFile U_ICU_ENTRY_POINT_RENAME(uplug_getPluginFile)
-#define uplug_getSymbolName U_ICU_ENTRY_POINT_RENAME(uplug_getSymbolName)
-#define uplug_init U_ICU_ENTRY_POINT_RENAME(uplug_init)
-#define uplug_loadPlugFromEntrypoint U_ICU_ENTRY_POINT_RENAME(uplug_loadPlugFromEntrypoint)
-#define uplug_loadPlugFromLibrary U_ICU_ENTRY_POINT_RENAME(uplug_loadPlugFromLibrary)
-#define uplug_nextPlug U_ICU_ENTRY_POINT_RENAME(uplug_nextPlug)
-#define uplug_openLibrary U_ICU_ENTRY_POINT_RENAME(uplug_openLibrary)
-#define uplug_removePlug U_ICU_ENTRY_POINT_RENAME(uplug_removePlug)
-#define uplug_setContext U_ICU_ENTRY_POINT_RENAME(uplug_setContext)
-#define uplug_setPlugLevel U_ICU_ENTRY_POINT_RENAME(uplug_setPlugLevel)
-#define uplug_setPlugName U_ICU_ENTRY_POINT_RENAME(uplug_setPlugName)
-#define uplug_setPlugNoUnload U_ICU_ENTRY_POINT_RENAME(uplug_setPlugNoUnload)
-#define upname_swap U_ICU_ENTRY_POINT_RENAME(upname_swap)
-#define uprops_getSource U_ICU_ENTRY_POINT_RENAME(uprops_getSource)
-#define upropsvec_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(upropsvec_addPropertyStarts)
-#define uprv_aestrncpy U_ICU_ENTRY_POINT_RENAME(uprv_aestrncpy)
-#define uprv_asciiFromEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_asciiFromEbcdic)
-#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
-#define uprv_ceil U_ICU_ENTRY_POINT_RENAME(uprv_ceil)
-#define uprv_cnttab_addContraction U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_addContraction)
-#define uprv_cnttab_changeContraction U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_changeContraction)
-#define uprv_cnttab_changeLastCE U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_changeLastCE)
-#define uprv_cnttab_clone U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_clone)
-#define uprv_cnttab_close U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_close)
-#define uprv_cnttab_constructTable U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_constructTable)
-#define uprv_cnttab_findCE U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_findCE)
-#define uprv_cnttab_findCP U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_findCP)
-#define uprv_cnttab_getCE U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_getCE)
-#define uprv_cnttab_insertContraction U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_insertContraction)
-#define uprv_cnttab_isTailored U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_isTailored)
-#define uprv_cnttab_open U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_open)
-#define uprv_cnttab_setContraction U_ICU_ENTRY_POINT_RENAME(uprv_cnttab_setContraction)
-#define uprv_collIterateAtEnd U_ICU_ENTRY_POINT_RENAME(uprv_collIterateAtEnd)
-#define uprv_compareASCIIPropertyNames U_ICU_ENTRY_POINT_RENAME(uprv_compareASCIIPropertyNames)
-#define uprv_compareEBCDICPropertyNames U_ICU_ENTRY_POINT_RENAME(uprv_compareEBCDICPropertyNames)
-#define uprv_compareInvAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvAscii)
-#define uprv_compareInvEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_compareInvEbcdic)
-#define uprv_compareInvEbcdicAsAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvEbcdicAsAscii)
-#define uprv_convertToLCID U_ICU_ENTRY_POINT_RENAME(uprv_convertToLCID)
-#define uprv_convertToPosix U_ICU_ENTRY_POINT_RENAME(uprv_convertToPosix)
-#define uprv_copyAscii U_ICU_ENTRY_POINT_RENAME(uprv_copyAscii)
-#define uprv_copyEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_copyEbcdic)
-#define uprv_decContextClearStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextClearStatus)
-#define uprv_decContextDefault U_ICU_ENTRY_POINT_RENAME(uprv_decContextDefault)
-#define uprv_decContextGetRounding U_ICU_ENTRY_POINT_RENAME(uprv_decContextGetRounding)
-#define uprv_decContextGetStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextGetStatus)
-#define uprv_decContextRestoreStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextRestoreStatus)
-#define uprv_decContextSaveStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextSaveStatus)
-#define uprv_decContextSetRounding U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetRounding)
-#define uprv_decContextSetStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatus)
-#define uprv_decContextSetStatusFromString U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatusFromString)
-#define uprv_decContextSetStatusFromStringQuiet U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatusFromStringQuiet)
-#define uprv_decContextSetStatusQuiet U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatusQuiet)
-#define uprv_decContextStatusToString U_ICU_ENTRY_POINT_RENAME(uprv_decContextStatusToString)
-#define uprv_decContextTestEndian U_ICU_ENTRY_POINT_RENAME(uprv_decContextTestEndian)
-#define uprv_decContextTestSavedStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextTestSavedStatus)
-#define uprv_decContextTestStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextTestStatus)
-#define uprv_decContextZeroStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextZeroStatus)
-#define uprv_decNumberAbs U_ICU_ENTRY_POINT_RENAME(uprv_decNumberAbs)
-#define uprv_decNumberAdd U_ICU_ENTRY_POINT_RENAME(uprv_decNumberAdd)
-#define uprv_decNumberAnd U_ICU_ENTRY_POINT_RENAME(uprv_decNumberAnd)
-#define uprv_decNumberClass U_ICU_ENTRY_POINT_RENAME(uprv_decNumberClass)
-#define uprv_decNumberClassToString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberClassToString)
-#define uprv_decNumberCompare U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompare)
-#define uprv_decNumberCompareSignal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompareSignal)
-#define uprv_decNumberCompareTotal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompareTotal)
-#define uprv_decNumberCompareTotalMag U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompareTotalMag)
-#define uprv_decNumberCopy U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopy)
-#define uprv_decNumberCopyAbs U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopyAbs)
-#define uprv_decNumberCopyNegate U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopyNegate)
-#define uprv_decNumberCopySign U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopySign)
-#define uprv_decNumberDivide U_ICU_ENTRY_POINT_RENAME(uprv_decNumberDivide)
-#define uprv_decNumberDivideInteger U_ICU_ENTRY_POINT_RENAME(uprv_decNumberDivideInteger)
-#define uprv_decNumberExp U_ICU_ENTRY_POINT_RENAME(uprv_decNumberExp)
-#define uprv_decNumberFMA U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFMA)
-#define uprv_decNumberFromInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFromInt32)
-#define uprv_decNumberFromString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFromString)
-#define uprv_decNumberFromUInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFromUInt32)
-#define uprv_decNumberGetBCD U_ICU_ENTRY_POINT_RENAME(uprv_decNumberGetBCD)
-#define uprv_decNumberInvert U_ICU_ENTRY_POINT_RENAME(uprv_decNumberInvert)
-#define uprv_decNumberIsNormal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberIsNormal)
-#define uprv_decNumberIsSubnormal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberIsSubnormal)
-#define uprv_decNumberLn U_ICU_ENTRY_POINT_RENAME(uprv_decNumberLn)
-#define uprv_decNumberLog10 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberLog10)
-#define uprv_decNumberLogB U_ICU_ENTRY_POINT_RENAME(uprv_decNumberLogB)
-#define uprv_decNumberMax U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMax)
-#define uprv_decNumberMaxMag U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMaxMag)
-#define uprv_decNumberMin U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMin)
-#define uprv_decNumberMinMag U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMinMag)
-#define uprv_decNumberMinus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMinus)
-#define uprv_decNumberMultiply U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMultiply)
-#define uprv_decNumberNextMinus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNextMinus)
-#define uprv_decNumberNextPlus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNextPlus)
-#define uprv_decNumberNextToward U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNextToward)
-#define uprv_decNumberNormalize U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNormalize)
-#define uprv_decNumberOr U_ICU_ENTRY_POINT_RENAME(uprv_decNumberOr)
-#define uprv_decNumberPlus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberPlus)
-#define uprv_decNumberPower U_ICU_ENTRY_POINT_RENAME(uprv_decNumberPower)
-#define uprv_decNumberQuantize U_ICU_ENTRY_POINT_RENAME(uprv_decNumberQuantize)
-#define uprv_decNumberReduce U_ICU_ENTRY_POINT_RENAME(uprv_decNumberReduce)
-#define uprv_decNumberRemainder U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRemainder)
-#define uprv_decNumberRemainderNear U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRemainderNear)
-#define uprv_decNumberRescale U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRescale)
-#define uprv_decNumberRotate U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRotate)
-#define uprv_decNumberSameQuantum U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSameQuantum)
-#define uprv_decNumberScaleB U_ICU_ENTRY_POINT_RENAME(uprv_decNumberScaleB)
-#define uprv_decNumberSetBCD U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSetBCD)
-#define uprv_decNumberShift U_ICU_ENTRY_POINT_RENAME(uprv_decNumberShift)
-#define uprv_decNumberSquareRoot U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSquareRoot)
-#define uprv_decNumberSubtract U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSubtract)
-#define uprv_decNumberToEngString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToEngString)
-#define uprv_decNumberToInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToInt32)
-#define uprv_decNumberToIntegralExact U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToIntegralExact)
-#define uprv_decNumberToIntegralValue U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToIntegralValue)
-#define uprv_decNumberToString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToString)
-#define uprv_decNumberToUInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToUInt32)
-#define uprv_decNumberTrim U_ICU_ENTRY_POINT_RENAME(uprv_decNumberTrim)
-#define uprv_decNumberVersion U_ICU_ENTRY_POINT_RENAME(uprv_decNumberVersion)
-#define uprv_decNumberXor U_ICU_ENTRY_POINT_RENAME(uprv_decNumberXor)
-#define uprv_decNumberZero U_ICU_ENTRY_POINT_RENAME(uprv_decNumberZero)
-#define uprv_delete_collIterate U_ICU_ENTRY_POINT_RENAME(uprv_delete_collIterate)
-#define uprv_dl_close U_ICU_ENTRY_POINT_RENAME(uprv_dl_close)
-#define uprv_dl_open U_ICU_ENTRY_POINT_RENAME(uprv_dl_open)
-#define uprv_dl_sym U_ICU_ENTRY_POINT_RENAME(uprv_dl_sym)
-#define uprv_eastrncpy U_ICU_ENTRY_POINT_RENAME(uprv_eastrncpy)
-#define uprv_ebcdicFromAscii U_ICU_ENTRY_POINT_RENAME(uprv_ebcdicFromAscii)
-#define uprv_ebcdictolower U_ICU_ENTRY_POINT_RENAME(uprv_ebcdictolower)
-#define uprv_fabs U_ICU_ENTRY_POINT_RENAME(uprv_fabs)
-#define uprv_floor U_ICU_ENTRY_POINT_RENAME(uprv_floor)
-#define uprv_fmax U_ICU_ENTRY_POINT_RENAME(uprv_fmax)
-#define uprv_fmin U_ICU_ENTRY_POINT_RENAME(uprv_fmin)
-#define uprv_fmod U_ICU_ENTRY_POINT_RENAME(uprv_fmod)
-#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
-#define uprv_getCharNameCharacters U_ICU_ENTRY_POINT_RENAME(uprv_getCharNameCharacters)
-#define uprv_getDefaultCodepage U_ICU_ENTRY_POINT_RENAME(uprv_getDefaultCodepage)
-#define uprv_getDefaultLocaleID U_ICU_ENTRY_POINT_RENAME(uprv_getDefaultLocaleID)
-#define uprv_getInfinity U_ICU_ENTRY_POINT_RENAME(uprv_getInfinity)
-#define uprv_getMaxCharNameLength U_ICU_ENTRY_POINT_RENAME(uprv_getMaxCharNameLength)
-#define uprv_getMaxValues U_ICU_ENTRY_POINT_RENAME(uprv_getMaxValues)
-#define uprv_getNaN U_ICU_ENTRY_POINT_RENAME(uprv_getNaN)
-#define uprv_getRawUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getRawUTCtime)
-#define uprv_getStaticCurrencyName U_ICU_ENTRY_POINT_RENAME(uprv_getStaticCurrencyName)
-#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
-#define uprv_haveProperties U_ICU_ENTRY_POINT_RENAME(uprv_haveProperties)
-#define uprv_init_collIterate U_ICU_ENTRY_POINT_RENAME(uprv_init_collIterate)
-#define uprv_init_pce U_ICU_ENTRY_POINT_RENAME(uprv_init_pce)
-#define uprv_int32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_int32Comparator)
-#define uprv_isInfinite U_ICU_ENTRY_POINT_RENAME(uprv_isInfinite)
-#define uprv_isInvariantString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantString)
-#define uprv_isInvariantUString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantUString)
-#define uprv_isNaN U_ICU_ENTRY_POINT_RENAME(uprv_isNaN)
-#define uprv_isNegativeInfinity U_ICU_ENTRY_POINT_RENAME(uprv_isNegativeInfinity)
-#define uprv_isPositiveInfinity U_ICU_ENTRY_POINT_RENAME(uprv_isPositiveInfinity)
-#define uprv_isRuleWhiteSpace U_ICU_ENTRY_POINT_RENAME(uprv_isRuleWhiteSpace)
-#define uprv_itou U_ICU_ENTRY_POINT_RENAME(uprv_itou)
-#define uprv_log U_ICU_ENTRY_POINT_RENAME(uprv_log)
-#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
-#define uprv_mapFile U_ICU_ENTRY_POINT_RENAME(uprv_mapFile)
-#define uprv_max U_ICU_ENTRY_POINT_RENAME(uprv_max)
-#define uprv_maxMantissa U_ICU_ENTRY_POINT_RENAME(uprv_maxMantissa)
-#define uprv_maximumPtr U_ICU_ENTRY_POINT_RENAME(uprv_maximumPtr)
-#define uprv_min U_ICU_ENTRY_POINT_RENAME(uprv_min)
-#define uprv_modf U_ICU_ENTRY_POINT_RENAME(uprv_modf)
-#define uprv_new_collIterate U_ICU_ENTRY_POINT_RENAME(uprv_new_collIterate)
-#define uprv_openRuleWhiteSpaceSet U_ICU_ENTRY_POINT_RENAME(uprv_openRuleWhiteSpaceSet)
-#define uprv_parseCurrency U_ICU_ENTRY_POINT_RENAME(uprv_parseCurrency)
-#define uprv_pathIsAbsolute U_ICU_ENTRY_POINT_RENAME(uprv_pathIsAbsolute)
-#define uprv_pow U_ICU_ENTRY_POINT_RENAME(uprv_pow)
-#define uprv_pow10 U_ICU_ENTRY_POINT_RENAME(uprv_pow10)
-#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc)
-#define uprv_round U_ICU_ENTRY_POINT_RENAME(uprv_round)
-#define uprv_sortArray U_ICU_ENTRY_POINT_RENAME(uprv_sortArray)
-#define uprv_strCompare U_ICU_ENTRY_POINT_RENAME(uprv_strCompare)
-#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
-#define uprv_strndup U_ICU_ENTRY_POINT_RENAME(uprv_strndup)
-#define uprv_syntaxError U_ICU_ENTRY_POINT_RENAME(uprv_syntaxError)
-#define uprv_timezone U_ICU_ENTRY_POINT_RENAME(uprv_timezone)
-#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
-#define uprv_trunc U_ICU_ENTRY_POINT_RENAME(uprv_trunc)
-#define uprv_tzname U_ICU_ENTRY_POINT_RENAME(uprv_tzname)
-#define uprv_tzset U_ICU_ENTRY_POINT_RENAME(uprv_tzset)
-#define uprv_uca_addAnElement U_ICU_ENTRY_POINT_RENAME(uprv_uca_addAnElement)
-#define uprv_uca_assembleTable U_ICU_ENTRY_POINT_RENAME(uprv_uca_assembleTable)
-#define uprv_uca_canonicalClosure U_ICU_ENTRY_POINT_RENAME(uprv_uca_canonicalClosure)
-#define uprv_uca_closeTempTable U_ICU_ENTRY_POINT_RENAME(uprv_uca_closeTempTable)
-#define uprv_uca_getCodePointFromRaw U_ICU_ENTRY_POINT_RENAME(uprv_uca_getCodePointFromRaw)
-#define uprv_uca_getImplicitFromRaw U_ICU_ENTRY_POINT_RENAME(uprv_uca_getImplicitFromRaw)
-#define uprv_uca_getRawFromCodePoint U_ICU_ENTRY_POINT_RENAME(uprv_uca_getRawFromCodePoint)
-#define uprv_uca_getRawFromImplicit U_ICU_ENTRY_POINT_RENAME(uprv_uca_getRawFromImplicit)
-#define uprv_uca_initImplicitConstants U_ICU_ENTRY_POINT_RENAME(uprv_uca_initImplicitConstants)
-#define uprv_uca_initTempTable U_ICU_ENTRY_POINT_RENAME(uprv_uca_initTempTable)
-#define uprv_uint16Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint16Comparator)
-#define uprv_uint32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint32Comparator)
-#define uprv_unmapFile U_ICU_ENTRY_POINT_RENAME(uprv_unmapFile)
-#define upvec_cloneArray U_ICU_ENTRY_POINT_RENAME(upvec_cloneArray)
-#define upvec_close U_ICU_ENTRY_POINT_RENAME(upvec_close)
-#define upvec_compact U_ICU_ENTRY_POINT_RENAME(upvec_compact)
-#define upvec_compactToUTrie2Handler U_ICU_ENTRY_POINT_RENAME(upvec_compactToUTrie2Handler)
-#define upvec_compactToUTrie2WithRowIndexes U_ICU_ENTRY_POINT_RENAME(upvec_compactToUTrie2WithRowIndexes)
-#define upvec_getArray U_ICU_ENTRY_POINT_RENAME(upvec_getArray)
-#define upvec_getRow U_ICU_ENTRY_POINT_RENAME(upvec_getRow)
-#define upvec_getValue U_ICU_ENTRY_POINT_RENAME(upvec_getValue)
-#define upvec_open U_ICU_ENTRY_POINT_RENAME(upvec_open)
-#define upvec_setValue U_ICU_ENTRY_POINT_RENAME(upvec_setValue)
-#define uregex_appendReplacement U_ICU_ENTRY_POINT_RENAME(uregex_appendReplacement)
-#define uregex_appendReplacementUText U_ICU_ENTRY_POINT_RENAME(uregex_appendReplacementUText)
-#define uregex_appendTail U_ICU_ENTRY_POINT_RENAME(uregex_appendTail)
-#define uregex_appendTailUText U_ICU_ENTRY_POINT_RENAME(uregex_appendTailUText)
-#define uregex_clone U_ICU_ENTRY_POINT_RENAME(uregex_clone)
-#define uregex_close U_ICU_ENTRY_POINT_RENAME(uregex_close)
-#define uregex_end U_ICU_ENTRY_POINT_RENAME(uregex_end)
-#define uregex_end64 U_ICU_ENTRY_POINT_RENAME(uregex_end64)
-#define uregex_find U_ICU_ENTRY_POINT_RENAME(uregex_find)
-#define uregex_find64 U_ICU_ENTRY_POINT_RENAME(uregex_find64)
-#define uregex_findNext U_ICU_ENTRY_POINT_RENAME(uregex_findNext)
-#define uregex_flags U_ICU_ENTRY_POINT_RENAME(uregex_flags)
-#define uregex_getFindProgressCallback U_ICU_ENTRY_POINT_RENAME(uregex_getFindProgressCallback)
-#define uregex_getMatchCallback U_ICU_ENTRY_POINT_RENAME(uregex_getMatchCallback)
-#define uregex_getStackLimit U_ICU_ENTRY_POINT_RENAME(uregex_getStackLimit)
-#define uregex_getText U_ICU_ENTRY_POINT_RENAME(uregex_getText)
-#define uregex_getTimeLimit U_ICU_ENTRY_POINT_RENAME(uregex_getTimeLimit)
-#define uregex_getUText U_ICU_ENTRY_POINT_RENAME(uregex_getUText)
-#define uregex_group U_ICU_ENTRY_POINT_RENAME(uregex_group)
-#define uregex_groupCount U_ICU_ENTRY_POINT_RENAME(uregex_groupCount)
-#define uregex_groupUText U_ICU_ENTRY_POINT_RENAME(uregex_groupUText)
-#define uregex_groupUTextDeep U_ICU_ENTRY_POINT_RENAME(uregex_groupUTextDeep)
-#define uregex_hasAnchoringBounds U_ICU_ENTRY_POINT_RENAME(uregex_hasAnchoringBounds)
-#define uregex_hasTransparentBounds U_ICU_ENTRY_POINT_RENAME(uregex_hasTransparentBounds)
-#define uregex_hitEnd U_ICU_ENTRY_POINT_RENAME(uregex_hitEnd)
-#define uregex_lookingAt U_ICU_ENTRY_POINT_RENAME(uregex_lookingAt)
-#define uregex_lookingAt64 U_ICU_ENTRY_POINT_RENAME(uregex_lookingAt64)
-#define uregex_matches U_ICU_ENTRY_POINT_RENAME(uregex_matches)
-#define uregex_matches64 U_ICU_ENTRY_POINT_RENAME(uregex_matches64)
-#define uregex_open U_ICU_ENTRY_POINT_RENAME(uregex_open)
-#define uregex_openC U_ICU_ENTRY_POINT_RENAME(uregex_openC)
-#define uregex_openUText U_ICU_ENTRY_POINT_RENAME(uregex_openUText)
-#define uregex_pattern U_ICU_ENTRY_POINT_RENAME(uregex_pattern)
-#define uregex_patternUText U_ICU_ENTRY_POINT_RENAME(uregex_patternUText)
-#define uregex_regionEnd U_ICU_ENTRY_POINT_RENAME(uregex_regionEnd)
-#define uregex_regionEnd64 U_ICU_ENTRY_POINT_RENAME(uregex_regionEnd64)
-#define uregex_regionStart U_ICU_ENTRY_POINT_RENAME(uregex_regionStart)
-#define uregex_regionStart64 U_ICU_ENTRY_POINT_RENAME(uregex_regionStart64)
-#define uregex_replaceAll U_ICU_ENTRY_POINT_RENAME(uregex_replaceAll)
-#define uregex_replaceAllUText U_ICU_ENTRY_POINT_RENAME(uregex_replaceAllUText)
-#define uregex_replaceFirst U_ICU_ENTRY_POINT_RENAME(uregex_replaceFirst)
-#define uregex_replaceFirstUText U_ICU_ENTRY_POINT_RENAME(uregex_replaceFirstUText)
-#define uregex_requireEnd U_ICU_ENTRY_POINT_RENAME(uregex_requireEnd)
-#define uregex_reset U_ICU_ENTRY_POINT_RENAME(uregex_reset)
-#define uregex_reset64 U_ICU_ENTRY_POINT_RENAME(uregex_reset64)
-#define uregex_setFindProgressCallback U_ICU_ENTRY_POINT_RENAME(uregex_setFindProgressCallback)
-#define uregex_setMatchCallback U_ICU_ENTRY_POINT_RENAME(uregex_setMatchCallback)
-#define uregex_setRegion U_ICU_ENTRY_POINT_RENAME(uregex_setRegion)
-#define uregex_setRegion64 U_ICU_ENTRY_POINT_RENAME(uregex_setRegion64)
-#define uregex_setRegionAndStart U_ICU_ENTRY_POINT_RENAME(uregex_setRegionAndStart)
-#define uregex_setStackLimit U_ICU_ENTRY_POINT_RENAME(uregex_setStackLimit)
-#define uregex_setText U_ICU_ENTRY_POINT_RENAME(uregex_setText)
-#define uregex_setTimeLimit U_ICU_ENTRY_POINT_RENAME(uregex_setTimeLimit)
-#define uregex_setUText U_ICU_ENTRY_POINT_RENAME(uregex_setUText)
-#define uregex_split U_ICU_ENTRY_POINT_RENAME(uregex_split)
-#define uregex_splitUText U_ICU_ENTRY_POINT_RENAME(uregex_splitUText)
-#define uregex_start U_ICU_ENTRY_POINT_RENAME(uregex_start)
-#define uregex_start64 U_ICU_ENTRY_POINT_RENAME(uregex_start64)
-#define uregex_ucstr_unescape_charAt U_ICU_ENTRY_POINT_RENAME(uregex_ucstr_unescape_charAt)
-#define uregex_useAnchoringBounds U_ICU_ENTRY_POINT_RENAME(uregex_useAnchoringBounds)
-#define uregex_useTransparentBounds U_ICU_ENTRY_POINT_RENAME(uregex_useTransparentBounds)
-#define uregex_utext_unescape_charAt U_ICU_ENTRY_POINT_RENAME(uregex_utext_unescape_charAt)
-#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
-#define ures_copyResb U_ICU_ENTRY_POINT_RENAME(ures_copyResb)
-#define ures_countArrayItems U_ICU_ENTRY_POINT_RENAME(ures_countArrayItems)
-#define ures_findResource U_ICU_ENTRY_POINT_RENAME(ures_findResource)
-#define ures_findSubResource U_ICU_ENTRY_POINT_RENAME(ures_findSubResource)
-#define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary)
-#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
-#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
-#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
-#define ures_getFunctionalEquivalent U_ICU_ENTRY_POINT_RENAME(ures_getFunctionalEquivalent)
-#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
-#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
-#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
-#define ures_getKeywordValues U_ICU_ENTRY_POINT_RENAME(ures_getKeywordValues)
-#define ures_getLocale U_ICU_ENTRY_POINT_RENAME(ures_getLocale)
-#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
-#define ures_getLocaleInternal U_ICU_ENTRY_POINT_RENAME(ures_getLocaleInternal)
-#define ures_getName U_ICU_ENTRY_POINT_RENAME(ures_getName)
-#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
-#define ures_getNextString U_ICU_ENTRY_POINT_RENAME(ures_getNextString)
-#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
-#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
-#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
-#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
-#define ures_getStringByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getStringByKeyWithFallback)
-#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
-#define ures_getUInt U_ICU_ENTRY_POINT_RENAME(ures_getUInt)
-#define ures_getUTF8String U_ICU_ENTRY_POINT_RENAME(ures_getUTF8String)
-#define ures_getUTF8StringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getUTF8StringByIndex)
-#define ures_getUTF8StringByKey U_ICU_ENTRY_POINT_RENAME(ures_getUTF8StringByKey)
-#define ures_getVersion U_ICU_ENTRY_POINT_RENAME(ures_getVersion)
-#define ures_getVersionByKey U_ICU_ENTRY_POINT_RENAME(ures_getVersionByKey)
-#define ures_getVersionNumber U_ICU_ENTRY_POINT_RENAME(ures_getVersionNumber)
-#define ures_getVersionNumberInternal U_ICU_ENTRY_POINT_RENAME(ures_getVersionNumberInternal)
-#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
-#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
-#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
-#define ures_openAvailableLocales U_ICU_ENTRY_POINT_RENAME(ures_openAvailableLocales)
-#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
-#define ures_openFillIn U_ICU_ENTRY_POINT_RENAME(ures_openFillIn)
-#define ures_openU U_ICU_ENTRY_POINT_RENAME(ures_openU)
-#define ures_resetIterator U_ICU_ENTRY_POINT_RENAME(ures_resetIterator)
-#define ures_swap U_ICU_ENTRY_POINT_RENAME(ures_swap)
-#define uscript_closeRun U_ICU_ENTRY_POINT_RENAME(uscript_closeRun)
-#define uscript_getCode U_ICU_ENTRY_POINT_RENAME(uscript_getCode)
-#define uscript_getName U_ICU_ENTRY_POINT_RENAME(uscript_getName)
-#define uscript_getScript U_ICU_ENTRY_POINT_RENAME(uscript_getScript)
-#define uscript_getScriptExtensions U_ICU_ENTRY_POINT_RENAME(uscript_getScriptExtensions)
-#define uscript_getShortName U_ICU_ENTRY_POINT_RENAME(uscript_getShortName)
-#define uscript_hasScript U_ICU_ENTRY_POINT_RENAME(uscript_hasScript)
-#define uscript_nextRun U_ICU_ENTRY_POINT_RENAME(uscript_nextRun)
-#define uscript_openRun U_ICU_ENTRY_POINT_RENAME(uscript_openRun)
-#define uscript_resetRun U_ICU_ENTRY_POINT_RENAME(uscript_resetRun)
-#define uscript_setRunText U_ICU_ENTRY_POINT_RENAME(uscript_setRunText)
-#define usearch_close U_ICU_ENTRY_POINT_RENAME(usearch_close)
-#define usearch_first U_ICU_ENTRY_POINT_RENAME(usearch_first)
-#define usearch_following U_ICU_ENTRY_POINT_RENAME(usearch_following)
-#define usearch_getAttribute U_ICU_ENTRY_POINT_RENAME(usearch_getAttribute)
-#define usearch_getBreakIterator U_ICU_ENTRY_POINT_RENAME(usearch_getBreakIterator)
-#define usearch_getCollator U_ICU_ENTRY_POINT_RENAME(usearch_getCollator)
-#define usearch_getMatchedLength U_ICU_ENTRY_POINT_RENAME(usearch_getMatchedLength)
-#define usearch_getMatchedStart U_ICU_ENTRY_POINT_RENAME(usearch_getMatchedStart)
-#define usearch_getMatchedText U_ICU_ENTRY_POINT_RENAME(usearch_getMatchedText)
-#define usearch_getOffset U_ICU_ENTRY_POINT_RENAME(usearch_getOffset)
-#define usearch_getPattern U_ICU_ENTRY_POINT_RENAME(usearch_getPattern)
-#define usearch_getText U_ICU_ENTRY_POINT_RENAME(usearch_getText)
-#define usearch_handleNextCanonical U_ICU_ENTRY_POINT_RENAME(usearch_handleNextCanonical)
-#define usearch_handleNextExact U_ICU_ENTRY_POINT_RENAME(usearch_handleNextExact)
-#define usearch_handlePreviousCanonical U_ICU_ENTRY_POINT_RENAME(usearch_handlePreviousCanonical)
-#define usearch_handlePreviousExact U_ICU_ENTRY_POINT_RENAME(usearch_handlePreviousExact)
-#define usearch_last U_ICU_ENTRY_POINT_RENAME(usearch_last)
-#define usearch_next U_ICU_ENTRY_POINT_RENAME(usearch_next)
-#define usearch_open U_ICU_ENTRY_POINT_RENAME(usearch_open)
-#define usearch_openFromCollator U_ICU_ENTRY_POINT_RENAME(usearch_openFromCollator)
-#define usearch_preceding U_ICU_ENTRY_POINT_RENAME(usearch_preceding)
-#define usearch_previous U_ICU_ENTRY_POINT_RENAME(usearch_previous)
-#define usearch_reset U_ICU_ENTRY_POINT_RENAME(usearch_reset)
-#define usearch_search U_ICU_ENTRY_POINT_RENAME(usearch_search)
-#define usearch_searchBackwards U_ICU_ENTRY_POINT_RENAME(usearch_searchBackwards)
-#define usearch_setAttribute U_ICU_ENTRY_POINT_RENAME(usearch_setAttribute)
-#define usearch_setBreakIterator U_ICU_ENTRY_POINT_RENAME(usearch_setBreakIterator)
-#define usearch_setCollator U_ICU_ENTRY_POINT_RENAME(usearch_setCollator)
-#define usearch_setOffset U_ICU_ENTRY_POINT_RENAME(usearch_setOffset)
-#define usearch_setPattern U_ICU_ENTRY_POINT_RENAME(usearch_setPattern)
-#define usearch_setText U_ICU_ENTRY_POINT_RENAME(usearch_setText)
-#define uset_add U_ICU_ENTRY_POINT_RENAME(uset_add)
-#define uset_addAll U_ICU_ENTRY_POINT_RENAME(uset_addAll)
-#define uset_addAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_addAllCodePoints)
-#define uset_addRange U_ICU_ENTRY_POINT_RENAME(uset_addRange)
-#define uset_addString U_ICU_ENTRY_POINT_RENAME(uset_addString)
-#define uset_applyIntPropertyValue U_ICU_ENTRY_POINT_RENAME(uset_applyIntPropertyValue)
-#define uset_applyPattern U_ICU_ENTRY_POINT_RENAME(uset_applyPattern)
-#define uset_applyPropertyAlias U_ICU_ENTRY_POINT_RENAME(uset_applyPropertyAlias)
-#define uset_charAt U_ICU_ENTRY_POINT_RENAME(uset_charAt)
-#define uset_clear U_ICU_ENTRY_POINT_RENAME(uset_clear)
-#define uset_clone U_ICU_ENTRY_POINT_RENAME(uset_clone)
-#define uset_cloneAsThawed U_ICU_ENTRY_POINT_RENAME(uset_cloneAsThawed)
-#define uset_close U_ICU_ENTRY_POINT_RENAME(uset_close)
-#define uset_closeOver U_ICU_ENTRY_POINT_RENAME(uset_closeOver)
-#define uset_compact U_ICU_ENTRY_POINT_RENAME(uset_compact)
-#define uset_complement U_ICU_ENTRY_POINT_RENAME(uset_complement)
-#define uset_complementAll U_ICU_ENTRY_POINT_RENAME(uset_complementAll)
-#define uset_contains U_ICU_ENTRY_POINT_RENAME(uset_contains)
-#define uset_containsAll U_ICU_ENTRY_POINT_RENAME(uset_containsAll)
-#define uset_containsAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_containsAllCodePoints)
-#define uset_containsNone U_ICU_ENTRY_POINT_RENAME(uset_containsNone)
-#define uset_containsRange U_ICU_ENTRY_POINT_RENAME(uset_containsRange)
-#define uset_containsSome U_ICU_ENTRY_POINT_RENAME(uset_containsSome)
-#define uset_containsString U_ICU_ENTRY_POINT_RENAME(uset_containsString)
-#define uset_equals U_ICU_ENTRY_POINT_RENAME(uset_equals)
-#define uset_freeze U_ICU_ENTRY_POINT_RENAME(uset_freeze)
-#define uset_getItem U_ICU_ENTRY_POINT_RENAME(uset_getItem)
-#define uset_getItemCount U_ICU_ENTRY_POINT_RENAME(uset_getItemCount)
-#define uset_getSerializedRange U_ICU_ENTRY_POINT_RENAME(uset_getSerializedRange)
-#define uset_getSerializedRangeCount U_ICU_ENTRY_POINT_RENAME(uset_getSerializedRangeCount)
-#define uset_getSerializedSet U_ICU_ENTRY_POINT_RENAME(uset_getSerializedSet)
-#define uset_indexOf U_ICU_ENTRY_POINT_RENAME(uset_indexOf)
-#define uset_isEmpty U_ICU_ENTRY_POINT_RENAME(uset_isEmpty)
-#define uset_isFrozen U_ICU_ENTRY_POINT_RENAME(uset_isFrozen)
-#define uset_open U_ICU_ENTRY_POINT_RENAME(uset_open)
-#define uset_openEmpty U_ICU_ENTRY_POINT_RENAME(uset_openEmpty)
-#define uset_openPattern U_ICU_ENTRY_POINT_RENAME(uset_openPattern)
-#define uset_openPatternOptions U_ICU_ENTRY_POINT_RENAME(uset_openPatternOptions)
-#define uset_remove U_ICU_ENTRY_POINT_RENAME(uset_remove)
-#define uset_removeAll U_ICU_ENTRY_POINT_RENAME(uset_removeAll)
-#define uset_removeAllStrings U_ICU_ENTRY_POINT_RENAME(uset_removeAllStrings)
-#define uset_removeRange U_ICU_ENTRY_POINT_RENAME(uset_removeRange)
-#define uset_removeString U_ICU_ENTRY_POINT_RENAME(uset_removeString)
-#define uset_resemblesPattern U_ICU_ENTRY_POINT_RENAME(uset_resemblesPattern)
-#define uset_retain U_ICU_ENTRY_POINT_RENAME(uset_retain)
-#define uset_retainAll U_ICU_ENTRY_POINT_RENAME(uset_retainAll)
-#define uset_serialize U_ICU_ENTRY_POINT_RENAME(uset_serialize)
-#define uset_serializedContains U_ICU_ENTRY_POINT_RENAME(uset_serializedContains)
-#define uset_set U_ICU_ENTRY_POINT_RENAME(uset_set)
-#define uset_setSerializedToOne U_ICU_ENTRY_POINT_RENAME(uset_setSerializedToOne)
-#define uset_size U_ICU_ENTRY_POINT_RENAME(uset_size)
-#define uset_span U_ICU_ENTRY_POINT_RENAME(uset_span)
-#define uset_spanBack U_ICU_ENTRY_POINT_RENAME(uset_spanBack)
-#define uset_spanBackUTF8 U_ICU_ENTRY_POINT_RENAME(uset_spanBackUTF8)
-#define uset_spanUTF8 U_ICU_ENTRY_POINT_RENAME(uset_spanUTF8)
-#define uset_toPattern U_ICU_ENTRY_POINT_RENAME(uset_toPattern)
-#define uspoof_areConfusable U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusable)
-#define uspoof_areConfusableUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUTF8)
-#define uspoof_areConfusableUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUnicodeString)
-#define uspoof_check U_ICU_ENTRY_POINT_RENAME(uspoof_check)
-#define uspoof_checkUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_checkUTF8)
-#define uspoof_checkUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_checkUnicodeString)
-#define uspoof_clone U_ICU_ENTRY_POINT_RENAME(uspoof_clone)
-#define uspoof_close U_ICU_ENTRY_POINT_RENAME(uspoof_close)
-#define uspoof_getAllowedChars U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedChars)
-#define uspoof_getAllowedLocales U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedLocales)
-#define uspoof_getAllowedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedUnicodeSet)
-#define uspoof_getChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getChecks)
-#define uspoof_getSkeleton U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeleton)
-#define uspoof_getSkeletonUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeletonUTF8)
-#define uspoof_getSkeletonUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeletonUnicodeString)
-#define uspoof_open U_ICU_ENTRY_POINT_RENAME(uspoof_open)
-#define uspoof_openFromSerialized U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSerialized)
-#define uspoof_openFromSource U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSource)
-#define uspoof_serialize U_ICU_ENTRY_POINT_RENAME(uspoof_serialize)
-#define uspoof_setAllowedChars U_ICU_ENTRY_POINT_RENAME(uspoof_setAllowedChars)
-#define uspoof_setAllowedLocales U_ICU_ENTRY_POINT_RENAME(uspoof_setAllowedLocales)
-#define uspoof_setAllowedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_setAllowedUnicodeSet)
-#define uspoof_setChecks U_ICU_ENTRY_POINT_RENAME(uspoof_setChecks)
-#define uspoof_swap U_ICU_ENTRY_POINT_RENAME(uspoof_swap)
-#define usprep_close U_ICU_ENTRY_POINT_RENAME(usprep_close)
-#define usprep_open U_ICU_ENTRY_POINT_RENAME(usprep_open)
-#define usprep_openByType U_ICU_ENTRY_POINT_RENAME(usprep_openByType)
-#define usprep_prepare U_ICU_ENTRY_POINT_RENAME(usprep_prepare)
-#define usprep_swap U_ICU_ENTRY_POINT_RENAME(usprep_swap)
-#define ustr_foldCase U_ICU_ENTRY_POINT_RENAME(ustr_foldCase)
-#define ustr_toLower U_ICU_ENTRY_POINT_RENAME(ustr_toLower)
-#define ustr_toTitle U_ICU_ENTRY_POINT_RENAME(ustr_toTitle)
-#define ustr_toUpper U_ICU_ENTRY_POINT_RENAME(ustr_toUpper)
-#define utext_caseCompare U_ICU_ENTRY_POINT_RENAME(utext_caseCompare)
-#define utext_caseCompareNativeLimit U_ICU_ENTRY_POINT_RENAME(utext_caseCompareNativeLimit)
-#define utext_char32At U_ICU_ENTRY_POINT_RENAME(utext_char32At)
-#define utext_clone U_ICU_ENTRY_POINT_RENAME(utext_clone)
-#define utext_close U_ICU_ENTRY_POINT_RENAME(utext_close)
-#define utext_compare U_ICU_ENTRY_POINT_RENAME(utext_compare)
-#define utext_compareNativeLimit U_ICU_ENTRY_POINT_RENAME(utext_compareNativeLimit)
-#define utext_copy U_ICU_ENTRY_POINT_RENAME(utext_copy)
-#define utext_current32 U_ICU_ENTRY_POINT_RENAME(utext_current32)
-#define utext_equals U_ICU_ENTRY_POINT_RENAME(utext_equals)
-#define utext_extract U_ICU_ENTRY_POINT_RENAME(utext_extract)
-#define utext_freeze U_ICU_ENTRY_POINT_RENAME(utext_freeze)
-#define utext_getNativeIndex U_ICU_ENTRY_POINT_RENAME(utext_getNativeIndex)
-#define utext_getPreviousNativeIndex U_ICU_ENTRY_POINT_RENAME(utext_getPreviousNativeIndex)
-#define utext_hasMetaData U_ICU_ENTRY_POINT_RENAME(utext_hasMetaData)
-#define utext_isLengthExpensive U_ICU_ENTRY_POINT_RENAME(utext_isLengthExpensive)
-#define utext_isWritable U_ICU_ENTRY_POINT_RENAME(utext_isWritable)
-#define utext_moveIndex32 U_ICU_ENTRY_POINT_RENAME(utext_moveIndex32)
-#define utext_nativeLength U_ICU_ENTRY_POINT_RENAME(utext_nativeLength)
-#define utext_next32 U_ICU_ENTRY_POINT_RENAME(utext_next32)
-#define utext_next32From U_ICU_ENTRY_POINT_RENAME(utext_next32From)
-#define utext_openCharacterIterator U_ICU_ENTRY_POINT_RENAME(utext_openCharacterIterator)
-#define utext_openConstUnicodeString U_ICU_ENTRY_POINT_RENAME(utext_openConstUnicodeString)
-#define utext_openReplaceable U_ICU_ENTRY_POINT_RENAME(utext_openReplaceable)
-#define utext_openUChars U_ICU_ENTRY_POINT_RENAME(utext_openUChars)
-#define utext_openUTF8 U_ICU_ENTRY_POINT_RENAME(utext_openUTF8)
-#define utext_openUnicodeString U_ICU_ENTRY_POINT_RENAME(utext_openUnicodeString)
-#define utext_previous32 U_ICU_ENTRY_POINT_RENAME(utext_previous32)
-#define utext_previous32From U_ICU_ENTRY_POINT_RENAME(utext_previous32From)
-#define utext_replace U_ICU_ENTRY_POINT_RENAME(utext_replace)
-#define utext_setNativeIndex U_ICU_ENTRY_POINT_RENAME(utext_setNativeIndex)
-#define utext_setup U_ICU_ENTRY_POINT_RENAME(utext_setup)
-#define utf8_appendCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_appendCharSafeBody)
-#define utf8_back1SafeBody U_ICU_ENTRY_POINT_RENAME(utf8_back1SafeBody)
-#define utf8_countTrailBytes U_ICU_ENTRY_POINT_RENAME(utf8_countTrailBytes)
-#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody)
-#define utf8_prevCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_prevCharSafeBody)
-#define utmscale_fromInt64 U_ICU_ENTRY_POINT_RENAME(utmscale_fromInt64)
-#define utmscale_getTimeScaleValue U_ICU_ENTRY_POINT_RENAME(utmscale_getTimeScaleValue)
-#define utmscale_toInt64 U_ICU_ENTRY_POINT_RENAME(utmscale_toInt64)
-#define utrace_cleanup U_ICU_ENTRY_POINT_RENAME(utrace_cleanup)
-#define utrace_data U_ICU_ENTRY_POINT_RENAME(utrace_data)
-#define utrace_entry U_ICU_ENTRY_POINT_RENAME(utrace_entry)
-#define utrace_exit U_ICU_ENTRY_POINT_RENAME(utrace_exit)
-#define utrace_format U_ICU_ENTRY_POINT_RENAME(utrace_format)
-#define utrace_functionName U_ICU_ENTRY_POINT_RENAME(utrace_functionName)
-#define utrace_getFunctions U_ICU_ENTRY_POINT_RENAME(utrace_getFunctions)
-#define utrace_getLevel U_ICU_ENTRY_POINT_RENAME(utrace_getLevel)
-#define utrace_level U_ICU_ENTRY_POINT_RENAME(utrace_level)
-#define utrace_setFunctions U_ICU_ENTRY_POINT_RENAME(utrace_setFunctions)
-#define utrace_setLevel U_ICU_ENTRY_POINT_RENAME(utrace_setLevel)
-#define utrace_vformat U_ICU_ENTRY_POINT_RENAME(utrace_vformat)
-#define utrans_clone U_ICU_ENTRY_POINT_RENAME(utrans_clone)
-#define utrans_close U_ICU_ENTRY_POINT_RENAME(utrans_close)
-#define utrans_countAvailableIDs U_ICU_ENTRY_POINT_RENAME(utrans_countAvailableIDs)
-#define utrans_getAvailableID U_ICU_ENTRY_POINT_RENAME(utrans_getAvailableID)
-#define utrans_getID U_ICU_ENTRY_POINT_RENAME(utrans_getID)
-#define utrans_getUnicodeID U_ICU_ENTRY_POINT_RENAME(utrans_getUnicodeID)
-#define utrans_open U_ICU_ENTRY_POINT_RENAME(utrans_open)
-#define utrans_openIDs U_ICU_ENTRY_POINT_RENAME(utrans_openIDs)
-#define utrans_openInverse U_ICU_ENTRY_POINT_RENAME(utrans_openInverse)
-#define utrans_openU U_ICU_ENTRY_POINT_RENAME(utrans_openU)
-#define utrans_register U_ICU_ENTRY_POINT_RENAME(utrans_register)
-#define utrans_rep_caseContextIterator U_ICU_ENTRY_POINT_RENAME(utrans_rep_caseContextIterator)
-#define utrans_setFilter U_ICU_ENTRY_POINT_RENAME(utrans_setFilter)
-#define utrans_stripRules U_ICU_ENTRY_POINT_RENAME(utrans_stripRules)
-#define utrans_trans U_ICU_ENTRY_POINT_RENAME(utrans_trans)
-#define utrans_transIncremental U_ICU_ENTRY_POINT_RENAME(utrans_transIncremental)
-#define utrans_transIncrementalUChars U_ICU_ENTRY_POINT_RENAME(utrans_transIncrementalUChars)
-#define utrans_transUChars U_ICU_ENTRY_POINT_RENAME(utrans_transUChars)
-#define utrans_transliterator_cleanup U_ICU_ENTRY_POINT_RENAME(utrans_transliterator_cleanup)
-#define utrans_unregister U_ICU_ENTRY_POINT_RENAME(utrans_unregister)
-#define utrans_unregisterID U_ICU_ENTRY_POINT_RENAME(utrans_unregisterID)
-#define utrie2_clone U_ICU_ENTRY_POINT_RENAME(utrie2_clone)
-#define utrie2_cloneAsThawed U_ICU_ENTRY_POINT_RENAME(utrie2_cloneAsThawed)
-#define utrie2_close U_ICU_ENTRY_POINT_RENAME(utrie2_close)
-#define utrie2_enum U_ICU_ENTRY_POINT_RENAME(utrie2_enum)
-#define utrie2_enumForLeadSurrogate U_ICU_ENTRY_POINT_RENAME(utrie2_enumForLeadSurrogate)
-#define utrie2_freeze U_ICU_ENTRY_POINT_RENAME(utrie2_freeze)
-#define utrie2_fromUTrie U_ICU_ENTRY_POINT_RENAME(utrie2_fromUTrie)
-#define utrie2_get32 U_ICU_ENTRY_POINT_RENAME(utrie2_get32)
-#define utrie2_get32FromLeadSurrogateCodeUnit U_ICU_ENTRY_POINT_RENAME(utrie2_get32FromLeadSurrogateCodeUnit)
-#define utrie2_getVersion U_ICU_ENTRY_POINT_RENAME(utrie2_getVersion)
-#define utrie2_internalU8NextIndex U_ICU_ENTRY_POINT_RENAME(utrie2_internalU8NextIndex)
-#define utrie2_internalU8PrevIndex U_ICU_ENTRY_POINT_RENAME(utrie2_internalU8PrevIndex)
-#define utrie2_isFrozen U_ICU_ENTRY_POINT_RENAME(utrie2_isFrozen)
-#define utrie2_open U_ICU_ENTRY_POINT_RENAME(utrie2_open)
-#define utrie2_openDummy U_ICU_ENTRY_POINT_RENAME(utrie2_openDummy)
-#define utrie2_openFromSerialized U_ICU_ENTRY_POINT_RENAME(utrie2_openFromSerialized)
-#define utrie2_serialize U_ICU_ENTRY_POINT_RENAME(utrie2_serialize)
-#define utrie2_set32 U_ICU_ENTRY_POINT_RENAME(utrie2_set32)
-#define utrie2_set32ForLeadSurrogateCodeUnit U_ICU_ENTRY_POINT_RENAME(utrie2_set32ForLeadSurrogateCodeUnit)
-#define utrie2_setRange32 U_ICU_ENTRY_POINT_RENAME(utrie2_setRange32)
-#define utrie2_swap U_ICU_ENTRY_POINT_RENAME(utrie2_swap)
-#define utrie2_swapAnyVersion U_ICU_ENTRY_POINT_RENAME(utrie2_swapAnyVersion)
-#define utrie_clone U_ICU_ENTRY_POINT_RENAME(utrie_clone)
-#define utrie_close U_ICU_ENTRY_POINT_RENAME(utrie_close)
-#define utrie_defaultGetFoldingOffset U_ICU_ENTRY_POINT_RENAME(utrie_defaultGetFoldingOffset)
-#define utrie_enum U_ICU_ENTRY_POINT_RENAME(utrie_enum)
-#define utrie_get32 U_ICU_ENTRY_POINT_RENAME(utrie_get32)
-#define utrie_getData U_ICU_ENTRY_POINT_RENAME(utrie_getData)
-#define utrie_open U_ICU_ENTRY_POINT_RENAME(utrie_open)
-#define utrie_serialize U_ICU_ENTRY_POINT_RENAME(utrie_serialize)
-#define utrie_set32 U_ICU_ENTRY_POINT_RENAME(utrie_set32)
-#define utrie_setRange32 U_ICU_ENTRY_POINT_RENAME(utrie_setRange32)
-#define utrie_swap U_ICU_ENTRY_POINT_RENAME(utrie_swap)
-#define utrie_unserialize U_ICU_ENTRY_POINT_RENAME(utrie_unserialize)
-#define utrie_unserializeDummy U_ICU_ENTRY_POINT_RENAME(utrie_unserializeDummy)
-#define vzone_clone U_ICU_ENTRY_POINT_RENAME(vzone_clone)
-#define vzone_close U_ICU_ENTRY_POINT_RENAME(vzone_close)
-#define vzone_countTransitionRules U_ICU_ENTRY_POINT_RENAME(vzone_countTransitionRules)
-#define vzone_equals U_ICU_ENTRY_POINT_RENAME(vzone_equals)
-#define vzone_getDynamicClassID U_ICU_ENTRY_POINT_RENAME(vzone_getDynamicClassID)
-#define vzone_getLastModified U_ICU_ENTRY_POINT_RENAME(vzone_getLastModified)
-#define vzone_getNextTransition U_ICU_ENTRY_POINT_RENAME(vzone_getNextTransition)
-#define vzone_getOffset U_ICU_ENTRY_POINT_RENAME(vzone_getOffset)
-#define vzone_getOffset2 U_ICU_ENTRY_POINT_RENAME(vzone_getOffset2)
-#define vzone_getOffset3 U_ICU_ENTRY_POINT_RENAME(vzone_getOffset3)
-#define vzone_getPreviousTransition U_ICU_ENTRY_POINT_RENAME(vzone_getPreviousTransition)
-#define vzone_getRawOffset U_ICU_ENTRY_POINT_RENAME(vzone_getRawOffset)
-#define vzone_getStaticClassID U_ICU_ENTRY_POINT_RENAME(vzone_getStaticClassID)
-#define vzone_getTZURL U_ICU_ENTRY_POINT_RENAME(vzone_getTZURL)
-#define vzone_hasSameRules U_ICU_ENTRY_POINT_RENAME(vzone_hasSameRules)
-#define vzone_inDaylightTime U_ICU_ENTRY_POINT_RENAME(vzone_inDaylightTime)
-#define vzone_openData U_ICU_ENTRY_POINT_RENAME(vzone_openData)
-#define vzone_openID U_ICU_ENTRY_POINT_RENAME(vzone_openID)
-#define vzone_setLastModified U_ICU_ENTRY_POINT_RENAME(vzone_setLastModified)
-#define vzone_setRawOffset U_ICU_ENTRY_POINT_RENAME(vzone_setRawOffset)
-#define vzone_setTZURL U_ICU_ENTRY_POINT_RENAME(vzone_setTZURL)
-#define vzone_useDaylightTime U_ICU_ENTRY_POINT_RENAME(vzone_useDaylightTime)
-#define vzone_write U_ICU_ENTRY_POINT_RENAME(vzone_write)
-#define vzone_writeFromStart U_ICU_ENTRY_POINT_RENAME(vzone_writeFromStart)
-#define vzone_writeSimple U_ICU_ENTRY_POINT_RENAME(vzone_writeSimple)
-#define zrule_close U_ICU_ENTRY_POINT_RENAME(zrule_close)
-#define zrule_equals U_ICU_ENTRY_POINT_RENAME(zrule_equals)
-#define zrule_getDSTSavings U_ICU_ENTRY_POINT_RENAME(zrule_getDSTSavings)
-#define zrule_getName U_ICU_ENTRY_POINT_RENAME(zrule_getName)
-#define zrule_getRawOffset U_ICU_ENTRY_POINT_RENAME(zrule_getRawOffset)
-#define zrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(zrule_isEquivalentTo)
-#define ztrans_adoptFrom U_ICU_ENTRY_POINT_RENAME(ztrans_adoptFrom)
-#define ztrans_adoptTo U_ICU_ENTRY_POINT_RENAME(ztrans_adoptTo)
-#define ztrans_clone U_ICU_ENTRY_POINT_RENAME(ztrans_clone)
-#define ztrans_close U_ICU_ENTRY_POINT_RENAME(ztrans_close)
-#define ztrans_equals U_ICU_ENTRY_POINT_RENAME(ztrans_equals)
-#define ztrans_getDynamicClassID U_ICU_ENTRY_POINT_RENAME(ztrans_getDynamicClassID)
-#define ztrans_getFrom U_ICU_ENTRY_POINT_RENAME(ztrans_getFrom)
-#define ztrans_getStaticClassID U_ICU_ENTRY_POINT_RENAME(ztrans_getStaticClassID)
-#define ztrans_getTime U_ICU_ENTRY_POINT_RENAME(ztrans_getTime)
-#define ztrans_getTo U_ICU_ENTRY_POINT_RENAME(ztrans_getTo)
-#define ztrans_open U_ICU_ENTRY_POINT_RENAME(ztrans_open)
-#define ztrans_openEmpty U_ICU_ENTRY_POINT_RENAME(ztrans_openEmpty)
-#define ztrans_setFrom U_ICU_ENTRY_POINT_RENAME(ztrans_setFrom)
-#define ztrans_setTime U_ICU_ENTRY_POINT_RENAME(ztrans_setTime)
-#define ztrans_setTo U_ICU_ENTRY_POINT_RENAME(ztrans_setTo)
-
-
-/* C++ class names renaming defines */
-
-#ifdef XP_CPLUSPLUS
-#if !U_HAVE_NAMESPACE
-
-#define AbsoluteValueSubstitution U_ICU_ENTRY_POINT_RENAME(AbsoluteValueSubstitution)
-#define AlternateSubstitutionSubtable U_ICU_ENTRY_POINT_RENAME(AlternateSubstitutionSubtable)
-#define AnchorTable U_ICU_ENTRY_POINT_RENAME(AnchorTable)
-#define AndConstraint U_ICU_ENTRY_POINT_RENAME(AndConstraint)
-#define AnnualTimeZoneRule U_ICU_ENTRY_POINT_RENAME(AnnualTimeZoneRule)
-#define AnyTransliterator U_ICU_ENTRY_POINT_RENAME(AnyTransliterator)
-#define ArabicOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(ArabicOpenTypeLayoutEngine)
-#define ArabicShaping U_ICU_ENTRY_POINT_RENAME(ArabicShaping)
-#define ArgExtractor U_ICU_ENTRY_POINT_RENAME(ArgExtractor)
-#define BMPSet U_ICU_ENTRY_POINT_RENAME(BMPSet)
-#define BackwardUTrie2StringIterator U_ICU_ENTRY_POINT_RENAME(BackwardUTrie2StringIterator)
-#define BadCharacterTable U_ICU_ENTRY_POINT_RENAME(BadCharacterTable)
-#define BasicCalendarFactory U_ICU_ENTRY_POINT_RENAME(BasicCalendarFactory)
-#define BasicTimeZone U_ICU_ENTRY_POINT_RENAME(BasicTimeZone)
-#define BinarySearchLookupTable U_ICU_ENTRY_POINT_RENAME(BinarySearchLookupTable)
-#define BoyerMooreSearch U_ICU_ENTRY_POINT_RENAME(BoyerMooreSearch)
-#define BreakIterator U_ICU_ENTRY_POINT_RENAME(BreakIterator)
-#define BreakTransliterator U_ICU_ENTRY_POINT_RENAME(BreakTransliterator)
-#define BuddhistCalendar U_ICU_ENTRY_POINT_RENAME(BuddhistCalendar)
-#define BuildCompactTrieHorizontalNode U_ICU_ENTRY_POINT_RENAME(BuildCompactTrieHorizontalNode)
-#define BuildCompactTrieNode U_ICU_ENTRY_POINT_RENAME(BuildCompactTrieNode)
-#define BuildCompactTrieVerticalNode U_ICU_ENTRY_POINT_RENAME(BuildCompactTrieVerticalNode)
-#define BuilderScriptSet U_ICU_ENTRY_POINT_RENAME(BuilderScriptSet)
-#define ByteSink U_ICU_ENTRY_POINT_RENAME(ByteSink)
-#define CEBuffer U_ICU_ENTRY_POINT_RENAME(CEBuffer)
-#define CECalendar U_ICU_ENTRY_POINT_RENAME(CECalendar)
-#define CEList U_ICU_ENTRY_POINT_RENAME(CEList)
-#define CEToStringsMap U_ICU_ENTRY_POINT_RENAME(CEToStringsMap)
-#define CFactory U_ICU_ENTRY_POINT_RENAME(CFactory)
-#define Calendar U_ICU_ENTRY_POINT_RENAME(Calendar)
-#define CalendarAstronomer U_ICU_ENTRY_POINT_RENAME(CalendarAstronomer)
-#define CalendarCache U_ICU_ENTRY_POINT_RENAME(CalendarCache)
-#define CalendarData U_ICU_ENTRY_POINT_RENAME(CalendarData)
-#define CalendarService U_ICU_ENTRY_POINT_RENAME(CalendarService)
-#define CanonIterData U_ICU_ENTRY_POINT_RENAME(CanonIterData)
-#define CanonIterDataSingleton U_ICU_ENTRY_POINT_RENAME(CanonIterDataSingleton)
-#define CanonMarkFilter U_ICU_ENTRY_POINT_RENAME(CanonMarkFilter)
-#define CanonShaping U_ICU_ENTRY_POINT_RENAME(CanonShaping)
-#define CanonicalIterator U_ICU_ENTRY_POINT_RENAME(CanonicalIterator)
-#define CaseMapTransliterator U_ICU_ENTRY_POINT_RENAME(CaseMapTransliterator)
-#define ChainingContextualSubstitutionFormat1Subtable U_ICU_ENTRY_POINT_RENAME(ChainingContextualSubstitutionFormat1Subtable)
-#define ChainingContextualSubstitutionFormat2Subtable U_ICU_ENTRY_POINT_RENAME(ChainingContextualSubstitutionFormat2Subtable)
-#define ChainingContextualSubstitutionFormat3Subtable U_ICU_ENTRY_POINT_RENAME(ChainingContextualSubstitutionFormat3Subtable)
-#define ChainingContextualSubstitutionSubtable U_ICU_ENTRY_POINT_RENAME(ChainingContextualSubstitutionSubtable)
-#define CharString U_ICU_ENTRY_POINT_RENAME(CharString)
-#define CharSubstitutionFilter U_ICU_ENTRY_POINT_RENAME(CharSubstitutionFilter)
-#define CharacterIterator U_ICU_ENTRY_POINT_RENAME(CharacterIterator)
-#define CharacterNode U_ICU_ENTRY_POINT_RENAME(CharacterNode)
-#define CharsetDetector U_ICU_ENTRY_POINT_RENAME(CharsetDetector)
-#define CharsetMatch U_ICU_ENTRY_POINT_RENAME(CharsetMatch)
-#define CharsetRecog_2022 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_2022)
-#define CharsetRecog_2022CN U_ICU_ENTRY_POINT_RENAME(CharsetRecog_2022CN)
-#define CharsetRecog_2022JP U_ICU_ENTRY_POINT_RENAME(CharsetRecog_2022JP)
-#define CharsetRecog_2022KR U_ICU_ENTRY_POINT_RENAME(CharsetRecog_2022KR)
-#define CharsetRecog_8859_1 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1)
-#define CharsetRecog_8859_1_da U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_da)
-#define CharsetRecog_8859_1_de U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_de)
-#define CharsetRecog_8859_1_en U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_en)
-#define CharsetRecog_8859_1_es U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_es)
-#define CharsetRecog_8859_1_fr U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_fr)
-#define CharsetRecog_8859_1_it U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_it)
-#define CharsetRecog_8859_1_nl U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_nl)
-#define CharsetRecog_8859_1_no U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_no)
-#define CharsetRecog_8859_1_pt U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_pt)
-#define CharsetRecog_8859_1_sv U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_1_sv)
-#define CharsetRecog_8859_2 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_2)
-#define CharsetRecog_8859_2_cs U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_2_cs)
-#define CharsetRecog_8859_2_hu U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_2_hu)
-#define CharsetRecog_8859_2_pl U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_2_pl)
-#define CharsetRecog_8859_2_ro U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_2_ro)
-#define CharsetRecog_8859_5 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_5)
-#define CharsetRecog_8859_5_ru U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_5_ru)
-#define CharsetRecog_8859_6 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_6)
-#define CharsetRecog_8859_6_ar U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_6_ar)
-#define CharsetRecog_8859_7 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_7)
-#define CharsetRecog_8859_7_el U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_7_el)
-#define CharsetRecog_8859_8 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_8)
-#define CharsetRecog_8859_8_I_he U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_8_I_he)
-#define CharsetRecog_8859_8_he U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_8_he)
-#define CharsetRecog_8859_9 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_9)
-#define CharsetRecog_8859_9_tr U_ICU_ENTRY_POINT_RENAME(CharsetRecog_8859_9_tr)
-#define CharsetRecog_IBM420_ar U_ICU_ENTRY_POINT_RENAME(CharsetRecog_IBM420_ar)
-#define CharsetRecog_IBM420_ar_ltr U_ICU_ENTRY_POINT_RENAME(CharsetRecog_IBM420_ar_ltr)
-#define CharsetRecog_IBM420_ar_rtl U_ICU_ENTRY_POINT_RENAME(CharsetRecog_IBM420_ar_rtl)
-#define CharsetRecog_IBM424_he U_ICU_ENTRY_POINT_RENAME(CharsetRecog_IBM424_he)
-#define CharsetRecog_IBM424_he_ltr U_ICU_ENTRY_POINT_RENAME(CharsetRecog_IBM424_he_ltr)
-#define CharsetRecog_IBM424_he_rtl U_ICU_ENTRY_POINT_RENAME(CharsetRecog_IBM424_he_rtl)
-#define CharsetRecog_KOI8_R U_ICU_ENTRY_POINT_RENAME(CharsetRecog_KOI8_R)
-#define CharsetRecog_UTF8 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_UTF8)
-#define CharsetRecog_UTF_16_BE U_ICU_ENTRY_POINT_RENAME(CharsetRecog_UTF_16_BE)
-#define CharsetRecog_UTF_16_LE U_ICU_ENTRY_POINT_RENAME(CharsetRecog_UTF_16_LE)
-#define CharsetRecog_UTF_32 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_UTF_32)
-#define CharsetRecog_UTF_32_BE U_ICU_ENTRY_POINT_RENAME(CharsetRecog_UTF_32_BE)
-#define CharsetRecog_UTF_32_LE U_ICU_ENTRY_POINT_RENAME(CharsetRecog_UTF_32_LE)
-#define CharsetRecog_Unicode U_ICU_ENTRY_POINT_RENAME(CharsetRecog_Unicode)
-#define CharsetRecog_big5 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_big5)
-#define CharsetRecog_euc U_ICU_ENTRY_POINT_RENAME(CharsetRecog_euc)
-#define CharsetRecog_euc_jp U_ICU_ENTRY_POINT_RENAME(CharsetRecog_euc_jp)
-#define CharsetRecog_euc_kr U_ICU_ENTRY_POINT_RENAME(CharsetRecog_euc_kr)
-#define CharsetRecog_gb_18030 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_gb_18030)
-#define CharsetRecog_mbcs U_ICU_ENTRY_POINT_RENAME(CharsetRecog_mbcs)
-#define CharsetRecog_sbcs U_ICU_ENTRY_POINT_RENAME(CharsetRecog_sbcs)
-#define CharsetRecog_sjis U_ICU_ENTRY_POINT_RENAME(CharsetRecog_sjis)
-#define CharsetRecog_windows_1251 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_windows_1251)
-#define CharsetRecog_windows_1256 U_ICU_ENTRY_POINT_RENAME(CharsetRecog_windows_1256)
-#define CharsetRecognizer U_ICU_ENTRY_POINT_RENAME(CharsetRecognizer)
-#define CheckedArrayByteSink U_ICU_ENTRY_POINT_RENAME(CheckedArrayByteSink)
-#define ChineseCalendar U_ICU_ENTRY_POINT_RENAME(ChineseCalendar)
-#define ChoiceFormat U_ICU_ENTRY_POINT_RENAME(ChoiceFormat)
-#define ClassDefFormat1Table U_ICU_ENTRY_POINT_RENAME(ClassDefFormat1Table)
-#define ClassDefFormat2Table U_ICU_ENTRY_POINT_RENAME(ClassDefFormat2Table)
-#define ClassDefinitionTable U_ICU_ENTRY_POINT_RENAME(ClassDefinitionTable)
-#define ClockMath U_ICU_ENTRY_POINT_RENAME(ClockMath)
-#define CollData U_ICU_ENTRY_POINT_RENAME(CollData)
-#define CollDataCache U_ICU_ENTRY_POINT_RENAME(CollDataCache)
-#define CollDataCacheEntry U_ICU_ENTRY_POINT_RENAME(CollDataCacheEntry)
-#define CollationElementIterator U_ICU_ENTRY_POINT_RENAME(CollationElementIterator)
-#define CollationKey U_ICU_ENTRY_POINT_RENAME(CollationKey)
-#define CollationLocaleListEnumeration U_ICU_ENTRY_POINT_RENAME(CollationLocaleListEnumeration)
-#define Collator U_ICU_ENTRY_POINT_RENAME(Collator)
-#define CollatorFactory U_ICU_ENTRY_POINT_RENAME(CollatorFactory)
-#define CompactTrieDictionary U_ICU_ENTRY_POINT_RENAME(CompactTrieDictionary)
-#define CompactTrieEnumeration U_ICU_ENTRY_POINT_RENAME(CompactTrieEnumeration)
-#define ComposeNormalizer2 U_ICU_ENTRY_POINT_RENAME(ComposeNormalizer2)
-#define CompoundTransliterator U_ICU_ENTRY_POINT_RENAME(CompoundTransliterator)
-#define ConfusabledataBuilder U_ICU_ENTRY_POINT_RENAME(ConfusabledataBuilder)
-#define ContextualGlyphSubstitutionProcessor U_ICU_ENTRY_POINT_RENAME(ContextualGlyphSubstitutionProcessor)
-#define ContextualSubstitutionBase U_ICU_ENTRY_POINT_RENAME(ContextualSubstitutionBase)
-#define ContextualSubstitutionFormat1Subtable U_ICU_ENTRY_POINT_RENAME(ContextualSubstitutionFormat1Subtable)
-#define ContextualSubstitutionFormat2Subtable U_ICU_ENTRY_POINT_RENAME(ContextualSubstitutionFormat2Subtable)
-#define ContextualSubstitutionFormat3Subtable U_ICU_ENTRY_POINT_RENAME(ContextualSubstitutionFormat3Subtable)
-#define ContextualSubstitutionSubtable U_ICU_ENTRY_POINT_RENAME(ContextualSubstitutionSubtable)
-#define CopticCalendar U_ICU_ENTRY_POINT_RENAME(CopticCalendar)
-#define CoverageFormat1Table U_ICU_ENTRY_POINT_RENAME(CoverageFormat1Table)
-#define CoverageFormat2Table U_ICU_ENTRY_POINT_RENAME(CoverageFormat2Table)
-#define CoverageTable U_ICU_ENTRY_POINT_RENAME(CoverageTable)
-#define CurrencyAmount U_ICU_ENTRY_POINT_RENAME(CurrencyAmount)
-#define CurrencyFormat U_ICU_ENTRY_POINT_RENAME(CurrencyFormat)
-#define CurrencyPluralInfo U_ICU_ENTRY_POINT_RENAME(CurrencyPluralInfo)
-#define CurrencyUnit U_ICU_ENTRY_POINT_RENAME(CurrencyUnit)
-#define CursiveAttachmentSubtable U_ICU_ENTRY_POINT_RENAME(CursiveAttachmentSubtable)
-#define DTRedundantEnumeration U_ICU_ENTRY_POINT_RENAME(DTRedundantEnumeration)
-#define DTSkeletonEnumeration U_ICU_ENTRY_POINT_RENAME(DTSkeletonEnumeration)
-#define DateFormat U_ICU_ENTRY_POINT_RENAME(DateFormat)
-#define DateFormatSymbols U_ICU_ENTRY_POINT_RENAME(DateFormatSymbols)
-#define DateInterval U_ICU_ENTRY_POINT_RENAME(DateInterval)
-#define DateIntervalFormat U_ICU_ENTRY_POINT_RENAME(DateIntervalFormat)
-#define DateIntervalInfo U_ICU_ENTRY_POINT_RENAME(DateIntervalInfo)
-#define DateTimeMatcher U_ICU_ENTRY_POINT_RENAME(DateTimeMatcher)
-#define DateTimePatternGenerator U_ICU_ENTRY_POINT_RENAME(DateTimePatternGenerator)
-#define DateTimeRule U_ICU_ENTRY_POINT_RENAME(DateTimeRule)
-#define DecimalFormat U_ICU_ENTRY_POINT_RENAME(DecimalFormat)
-#define DecimalFormatSymbols U_ICU_ENTRY_POINT_RENAME(DecimalFormatSymbols)
-#define DecomposeNormalizer2 U_ICU_ENTRY_POINT_RENAME(DecomposeNormalizer2)
-#define DefaultCalendarFactory U_ICU_ENTRY_POINT_RENAME(DefaultCalendarFactory)
-#define DefaultCharMapper U_ICU_ENTRY_POINT_RENAME(DefaultCharMapper)
-#define DeviceTable U_ICU_ENTRY_POINT_RENAME(DeviceTable)
-#define DictionaryBreakEngine U_ICU_ENTRY_POINT_RENAME(DictionaryBreakEngine)
-#define DigitList U_ICU_ENTRY_POINT_RENAME(DigitList)
-#define DistanceInfo U_ICU_ENTRY_POINT_RENAME(DistanceInfo)
-#define EnumToOffset U_ICU_ENTRY_POINT_RENAME(EnumToOffset)
-#define ErrorCode U_ICU_ENTRY_POINT_RENAME(ErrorCode)
-#define EscapeTransliterator U_ICU_ENTRY_POINT_RENAME(EscapeTransliterator)
-#define EthiopicCalendar U_ICU_ENTRY_POINT_RENAME(EthiopicCalendar)
-#define EventListener U_ICU_ENTRY_POINT_RENAME(EventListener)
-#define ExtensionSubtable U_ICU_ENTRY_POINT_RENAME(ExtensionSubtable)
-#define FCDNormalizer2 U_ICU_ENTRY_POINT_RENAME(FCDNormalizer2)
-#define FCDTrieSingleton U_ICU_ENTRY_POINT_RENAME(FCDTrieSingleton)
-#define FeatureListTable U_ICU_ENTRY_POINT_RENAME(FeatureListTable)
-#define FieldPosition U_ICU_ENTRY_POINT_RENAME(FieldPosition)
-#define FieldPositionHandler U_ICU_ENTRY_POINT_RENAME(FieldPositionHandler)
-#define FieldPositionIterator U_ICU_ENTRY_POINT_RENAME(FieldPositionIterator)
-#define FieldPositionIteratorHandler U_ICU_ENTRY_POINT_RENAME(FieldPositionIteratorHandler)
-#define FieldPositionOnlyHandler U_ICU_ENTRY_POINT_RENAME(FieldPositionOnlyHandler)
-#define FilteredNormalizer2 U_ICU_ENTRY_POINT_RENAME(FilteredNormalizer2)
-#define FontRuns U_ICU_ENTRY_POINT_RENAME(FontRuns)
-#define Format U_ICU_ENTRY_POINT_RENAME(Format)
-#define Format1AnchorTable U_ICU_ENTRY_POINT_RENAME(Format1AnchorTable)
-#define Format2AnchorTable U_ICU_ENTRY_POINT_RENAME(Format2AnchorTable)
-#define Format3AnchorTable U_ICU_ENTRY_POINT_RENAME(Format3AnchorTable)
-#define FormatNameEnumeration U_ICU_ENTRY_POINT_RENAME(FormatNameEnumeration)
-#define FormatParser U_ICU_ENTRY_POINT_RENAME(FormatParser)
-#define Formattable U_ICU_ENTRY_POINT_RENAME(Formattable)
-#define ForwardCharacterIterator U_ICU_ENTRY_POINT_RENAME(ForwardCharacterIterator)
-#define ForwardUTrie2StringIterator U_ICU_ENTRY_POINT_RENAME(ForwardUTrie2StringIterator)
-#define FractionalPartSubstitution U_ICU_ENTRY_POINT_RENAME(FractionalPartSubstitution)
-#define FunctionReplacer U_ICU_ENTRY_POINT_RENAME(FunctionReplacer)
-#define GDEFMarkFilter U_ICU_ENTRY_POINT_RENAME(GDEFMarkFilter)
-#define GXLayoutEngine U_ICU_ENTRY_POINT_RENAME(GXLayoutEngine)
-#define GlyphDefinitionTableHeader U_ICU_ENTRY_POINT_RENAME(GlyphDefinitionTableHeader)
-#define GlyphIterator U_ICU_ENTRY_POINT_RENAME(GlyphIterator)
-#define GlyphLookupTableHeader U_ICU_ENTRY_POINT_RENAME(GlyphLookupTableHeader)
-#define GlyphPositionAdjustments U_ICU_ENTRY_POINT_RENAME(GlyphPositionAdjustments)
-#define GlyphPositioningLookupProcessor U_ICU_ENTRY_POINT_RENAME(GlyphPositioningLookupProcessor)
-#define GlyphPositioningTableHeader U_ICU_ENTRY_POINT_RENAME(GlyphPositioningTableHeader)
-#define GlyphSubstitutionLookupProcessor U_ICU_ENTRY_POINT_RENAME(GlyphSubstitutionLookupProcessor)
-#define GlyphSubstitutionTableHeader U_ICU_ENTRY_POINT_RENAME(GlyphSubstitutionTableHeader)
-#define GoodSuffixTable U_ICU_ENTRY_POINT_RENAME(GoodSuffixTable)
-#define Grego U_ICU_ENTRY_POINT_RENAME(Grego)
-#define GregorianCalendar U_ICU_ENTRY_POINT_RENAME(GregorianCalendar)
-#define HanOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(HanOpenTypeLayoutEngine)
-#define HangulOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(HangulOpenTypeLayoutEngine)
-#define HebrewCalendar U_ICU_ENTRY_POINT_RENAME(HebrewCalendar)
-#define ICUBreakIteratorFactory U_ICU_ENTRY_POINT_RENAME(ICUBreakIteratorFactory)
-#define ICUBreakIteratorService U_ICU_ENTRY_POINT_RENAME(ICUBreakIteratorService)
-#define ICUCollatorFactory U_ICU_ENTRY_POINT_RENAME(ICUCollatorFactory)
-#define ICUCollatorService U_ICU_ENTRY_POINT_RENAME(ICUCollatorService)
-#define ICUDataTable U_ICU_ENTRY_POINT_RENAME(ICUDataTable)
-#define ICULanguageBreakFactory U_ICU_ENTRY_POINT_RENAME(ICULanguageBreakFactory)
-#define ICULocaleService U_ICU_ENTRY_POINT_RENAME(ICULocaleService)
-#define ICUNotifier U_ICU_ENTRY_POINT_RENAME(ICUNotifier)
-#define ICUNumberFormatFactory U_ICU_ENTRY_POINT_RENAME(ICUNumberFormatFactory)
-#define ICUNumberFormatService U_ICU_ENTRY_POINT_RENAME(ICUNumberFormatService)
-#define ICUResourceBundleFactory U_ICU_ENTRY_POINT_RENAME(ICUResourceBundleFactory)
-#define ICUService U_ICU_ENTRY_POINT_RENAME(ICUService)
-#define ICUServiceFactory U_ICU_ENTRY_POINT_RENAME(ICUServiceFactory)
-#define ICUServiceKey U_ICU_ENTRY_POINT_RENAME(ICUServiceKey)
-#define ICU_Utility U_ICU_ENTRY_POINT_RENAME(ICU_Utility)
-#define IDNA U_ICU_ENTRY_POINT_RENAME(IDNA)
-#define IndianCalendar U_ICU_ENTRY_POINT_RENAME(IndianCalendar)
-#define IndicClassTable U_ICU_ENTRY_POINT_RENAME(IndicClassTable)
-#define IndicOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(IndicOpenTypeLayoutEngine)
-#define IndicRearrangementProcessor U_ICU_ENTRY_POINT_RENAME(IndicRearrangementProcessor)
-#define IndicReordering U_ICU_ENTRY_POINT_RENAME(IndicReordering)
-#define InitialTimeZoneRule U_ICU_ENTRY_POINT_RENAME(InitialTimeZoneRule)
-#define InputText U_ICU_ENTRY_POINT_RENAME(InputText)
-#define IntegralPartSubstitution U_ICU_ENTRY_POINT_RENAME(IntegralPartSubstitution)
-#define IslamicCalendar U_ICU_ENTRY_POINT_RENAME(IslamicCalendar)
-#define IteratedChar U_ICU_ENTRY_POINT_RENAME(IteratedChar)
-#define JapaneseCalendar U_ICU_ENTRY_POINT_RENAME(JapaneseCalendar)
-#define KernTable U_ICU_ENTRY_POINT_RENAME(KernTable)
-#define KeywordEnumeration U_ICU_ENTRY_POINT_RENAME(KeywordEnumeration)
-#define KhmerClassTable U_ICU_ENTRY_POINT_RENAME(KhmerClassTable)
-#define KhmerOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(KhmerOpenTypeLayoutEngine)
-#define KhmerReordering U_ICU_ENTRY_POINT_RENAME(KhmerReordering)
-#define LECharMapper U_ICU_ENTRY_POINT_RENAME(LECharMapper)
-#define LEFontInstance U_ICU_ENTRY_POINT_RENAME(LEFontInstance)
-#define LEGlyphFilter U_ICU_ENTRY_POINT_RENAME(LEGlyphFilter)
-#define LEGlyphStorage U_ICU_ENTRY_POINT_RENAME(LEGlyphStorage)
-#define LEInsertionCallback U_ICU_ENTRY_POINT_RENAME(LEInsertionCallback)
-#define LEInsertionList U_ICU_ENTRY_POINT_RENAME(LEInsertionList)
-#define LXUtilities U_ICU_ENTRY_POINT_RENAME(LXUtilities)
-#define LanguageBreakEngine U_ICU_ENTRY_POINT_RENAME(LanguageBreakEngine)
-#define LanguageBreakFactory U_ICU_ENTRY_POINT_RENAME(LanguageBreakFactory)
-#define LayoutEngine U_ICU_ENTRY_POINT_RENAME(LayoutEngine)
-#define LigatureSubstitutionProcessor U_ICU_ENTRY_POINT_RENAME(LigatureSubstitutionProcessor)
-#define LigatureSubstitutionSubtable U_ICU_ENTRY_POINT_RENAME(LigatureSubstitutionSubtable)
-#define LocDataParser U_ICU_ENTRY_POINT_RENAME(LocDataParser)
-#define Locale U_ICU_ENTRY_POINT_RENAME(Locale)
-#define LocaleBased U_ICU_ENTRY_POINT_RENAME(LocaleBased)
-#define LocaleDisplayNames U_ICU_ENTRY_POINT_RENAME(LocaleDisplayNames)
-#define LocaleDisplayNamesImpl U_ICU_ENTRY_POINT_RENAME(LocaleDisplayNamesImpl)
-#define LocaleKey U_ICU_ENTRY_POINT_RENAME(LocaleKey)
-#define LocaleKeyFactory U_ICU_ENTRY_POINT_RENAME(LocaleKeyFactory)
-#define LocaleRuns U_ICU_ENTRY_POINT_RENAME(LocaleRuns)
-#define LocaleUtility U_ICU_ENTRY_POINT_RENAME(LocaleUtility)
-#define LocalizationInfo U_ICU_ENTRY_POINT_RENAME(LocalizationInfo)
-#define LookupListTable U_ICU_ENTRY_POINT_RENAME(LookupListTable)
-#define LookupProcessor U_ICU_ENTRY_POINT_RENAME(LookupProcessor)
-#define LookupSubtable U_ICU_ENTRY_POINT_RENAME(LookupSubtable)
-#define LookupTable U_ICU_ENTRY_POINT_RENAME(LookupTable)
-#define LowercaseTransliterator U_ICU_ENTRY_POINT_RENAME(LowercaseTransliterator)
-#define MPreFixups U_ICU_ENTRY_POINT_RENAME(MPreFixups)
-#define MarkArray U_ICU_ENTRY_POINT_RENAME(MarkArray)
-#define MarkToBasePositioningSubtable U_ICU_ENTRY_POINT_RENAME(MarkToBasePositioningSubtable)
-#define MarkToLigaturePositioningSubtable U_ICU_ENTRY_POINT_RENAME(MarkToLigaturePositioningSubtable)
-#define MarkToMarkPositioningSubtable U_ICU_ENTRY_POINT_RENAME(MarkToMarkPositioningSubtable)
-#define Measure U_ICU_ENTRY_POINT_RENAME(Measure)
-#define MeasureFormat U_ICU_ENTRY_POINT_RENAME(MeasureFormat)
-#define MeasureUnit U_ICU_ENTRY_POINT_RENAME(MeasureUnit)
-#define MessageFormat U_ICU_ENTRY_POINT_RENAME(MessageFormat)
-#define MessageFormatAdapter U_ICU_ENTRY_POINT_RENAME(MessageFormatAdapter)
-#define ModulusSubstitution U_ICU_ENTRY_POINT_RENAME(ModulusSubstitution)
-#define MoonRiseSetCoordFunc U_ICU_ENTRY_POINT_RENAME(MoonRiseSetCoordFunc)
-#define MoonTimeAngleFunc U_ICU_ENTRY_POINT_RENAME(MoonTimeAngleFunc)
-#define MorphSubtableHeader U_ICU_ENTRY_POINT_RENAME(MorphSubtableHeader)
-#define MorphTableHeader U_ICU_ENTRY_POINT_RENAME(MorphTableHeader)
-#define MultipleSubstitutionSubtable U_ICU_ENTRY_POINT_RENAME(MultipleSubstitutionSubtable)
-#define MultiplierSubstitution U_ICU_ENTRY_POINT_RENAME(MultiplierSubstitution)
-#define MutableTrieDictionary U_ICU_ENTRY_POINT_RENAME(MutableTrieDictionary)
-#define MutableTrieEnumeration U_ICU_ENTRY_POINT_RENAME(MutableTrieEnumeration)
-#define NFFactory U_ICU_ENTRY_POINT_RENAME(NFFactory)
-#define NFKDBuffer U_ICU_ENTRY_POINT_RENAME(NFKDBuffer)
-#define NFRule U_ICU_ENTRY_POINT_RENAME(NFRule)
-#define NFRuleSet U_ICU_ENTRY_POINT_RENAME(NFRuleSet)
-#define NFSubstitution U_ICU_ENTRY_POINT_RENAME(NFSubstitution)
-#define NGramParser U_ICU_ENTRY_POINT_RENAME(NGramParser)
-#define NameToEnum U_ICU_ENTRY_POINT_RENAME(NameToEnum)
-#define NameUnicodeTransliterator U_ICU_ENTRY_POINT_RENAME(NameUnicodeTransliterator)
-#define NonContextualGlyphSubstitutionProcessor U_ICU_ENTRY_POINT_RENAME(NonContextualGlyphSubstitutionProcessor)
-#define NonContiguousEnumToOffset U_ICU_ENTRY_POINT_RENAME(NonContiguousEnumToOffset)
-#define NoopNormalizer2 U_ICU_ENTRY_POINT_RENAME(NoopNormalizer2)
-#define Norm2AllModes U_ICU_ENTRY_POINT_RENAME(Norm2AllModes)
-#define NormalizationTransliterator U_ICU_ENTRY_POINT_RENAME(NormalizationTransliterator)
-#define Normalizer U_ICU_ENTRY_POINT_RENAME(Normalizer)
-#define Normalizer2 U_ICU_ENTRY_POINT_RENAME(Normalizer2)
-#define Normalizer2Factory U_ICU_ENTRY_POINT_RENAME(Normalizer2Factory)
-#define Normalizer2Impl U_ICU_ENTRY_POINT_RENAME(Normalizer2Impl)
-#define Normalizer2WithImpl U_ICU_ENTRY_POINT_RENAME(Normalizer2WithImpl)
-#define NullSubstitution U_ICU_ENTRY_POINT_RENAME(NullSubstitution)
-#define NullTransliterator U_ICU_ENTRY_POINT_RENAME(NullTransliterator)
-#define NumberFormat U_ICU_ENTRY_POINT_RENAME(NumberFormat)
-#define NumberFormatFactory U_ICU_ENTRY_POINT_RENAME(NumberFormatFactory)
-#define NumberingSystem U_ICU_ENTRY_POINT_RENAME(NumberingSystem)
-#define NumeratorSubstitution U_ICU_ENTRY_POINT_RENAME(NumeratorSubstitution)
-#define OlsonTimeZone U_ICU_ENTRY_POINT_RENAME(OlsonTimeZone)
-#define OpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(OpenTypeLayoutEngine)
-#define OpenTypeUtilities U_ICU_ENTRY_POINT_RENAME(OpenTypeUtilities)
-#define OrConstraint U_ICU_ENTRY_POINT_RENAME(OrConstraint)
-#define PCEBuffer U_ICU_ENTRY_POINT_RENAME(PCEBuffer)
-#define PairPositioningFormat1Subtable U_ICU_ENTRY_POINT_RENAME(PairPositioningFormat1Subtable)
-#define PairPositioningFormat2Subtable U_ICU_ENTRY_POINT_RENAME(PairPositioningFormat2Subtable)
-#define PairPositioningSubtable U_ICU_ENTRY_POINT_RENAME(PairPositioningSubtable)
-#define ParagraphLayout U_ICU_ENTRY_POINT_RENAME(ParagraphLayout)
-#define ParseData U_ICU_ENTRY_POINT_RENAME(ParseData)
-#define ParsePosition U_ICU_ENTRY_POINT_RENAME(ParsePosition)
-#define PatternMap U_ICU_ENTRY_POINT_RENAME(PatternMap)
-#define PatternMapIterator U_ICU_ENTRY_POINT_RENAME(PatternMapIterator)
-#define PersianCalendar U_ICU_ENTRY_POINT_RENAME(PersianCalendar)
-#define PluralFormat U_ICU_ENTRY_POINT_RENAME(PluralFormat)
-#define PluralKeywordEnumeration U_ICU_ENTRY_POINT_RENAME(PluralKeywordEnumeration)
-#define PluralRules U_ICU_ENTRY_POINT_RENAME(PluralRules)
-#define PropertyAliases U_ICU_ENTRY_POINT_RENAME(PropertyAliases)
-#define PtnElem U_ICU_ENTRY_POINT_RENAME(PtnElem)
-#define PtnSkeleton U_ICU_ENTRY_POINT_RENAME(PtnSkeleton)
-#define Quantifier U_ICU_ENTRY_POINT_RENAME(Quantifier)
-#define RBBIDataWrapper U_ICU_ENTRY_POINT_RENAME(RBBIDataWrapper)
-#define RBBINode U_ICU_ENTRY_POINT_RENAME(RBBINode)
-#define RBBIRuleBuilder U_ICU_ENTRY_POINT_RENAME(RBBIRuleBuilder)
-#define RBBIRuleScanner U_ICU_ENTRY_POINT_RENAME(RBBIRuleScanner)
-#define RBBISetBuilder U_ICU_ENTRY_POINT_RENAME(RBBISetBuilder)
-#define RBBIStateDescriptor U_ICU_ENTRY_POINT_RENAME(RBBIStateDescriptor)
-#define RBBISymbolTable U_ICU_ENTRY_POINT_RENAME(RBBISymbolTable)
-#define RBBISymbolTableEntry U_ICU_ENTRY_POINT_RENAME(RBBISymbolTableEntry)
-#define RBBITableBuilder U_ICU_ENTRY_POINT_RENAME(RBBITableBuilder)
-#define RCEBuffer U_ICU_ENTRY_POINT_RENAME(RCEBuffer)
-#define RangeDescriptor U_ICU_ENTRY_POINT_RENAME(RangeDescriptor)
-#define RegexCompile U_ICU_ENTRY_POINT_RENAME(RegexCompile)
-#define RegexMatcher U_ICU_ENTRY_POINT_RENAME(RegexMatcher)
-#define RegexPattern U_ICU_ENTRY_POINT_RENAME(RegexPattern)
-#define RegexStaticSets U_ICU_ENTRY_POINT_RENAME(RegexStaticSets)
-#define RegularExpression U_ICU_ENTRY_POINT_RENAME(RegularExpression)
-#define RelativeDateFormat U_ICU_ENTRY_POINT_RENAME(RelativeDateFormat)
-#define RemoveTransliterator U_ICU_ENTRY_POINT_RENAME(RemoveTransliterator)
-#define ReorderingBuffer U_ICU_ENTRY_POINT_RENAME(ReorderingBuffer)
-#define Replaceable U_ICU_ENTRY_POINT_RENAME(Replaceable)
-#define ReplaceableGlue U_ICU_ENTRY_POINT_RENAME(ReplaceableGlue)
-#define ResourceBundle U_ICU_ENTRY_POINT_RENAME(ResourceBundle)
-#define RiseSetCoordFunc U_ICU_ENTRY_POINT_RENAME(RiseSetCoordFunc)
-#define RuleBasedBreakIterator U_ICU_ENTRY_POINT_RENAME(RuleBasedBreakIterator)
-#define RuleBasedCollator U_ICU_ENTRY_POINT_RENAME(RuleBasedCollator)
-#define RuleBasedNumberFormat U_ICU_ENTRY_POINT_RENAME(RuleBasedNumberFormat)
-#define RuleBasedTimeZone U_ICU_ENTRY_POINT_RENAME(RuleBasedTimeZone)
-#define RuleBasedTransliterator U_ICU_ENTRY_POINT_RENAME(RuleBasedTransliterator)
-#define RuleChain U_ICU_ENTRY_POINT_RENAME(RuleChain)
-#define RuleCharacterIterator U_ICU_ENTRY_POINT_RENAME(RuleCharacterIterator)
-#define RuleHalf U_ICU_ENTRY_POINT_RENAME(RuleHalf)
-#define RuleParser U_ICU_ENTRY_POINT_RENAME(RuleParser)
-#define RunArray U_ICU_ENTRY_POINT_RENAME(RunArray)
-#define SPUString U_ICU_ENTRY_POINT_RENAME(SPUString)
-#define SPUStringPool U_ICU_ENTRY_POINT_RENAME(SPUStringPool)
-#define SafeZoneStringFormatPtr U_ICU_ENTRY_POINT_RENAME(SafeZoneStringFormatPtr)
-#define SameValueSubstitution U_ICU_ENTRY_POINT_RENAME(SameValueSubstitution)
-#define ScriptListTable U_ICU_ENTRY_POINT_RENAME(ScriptListTable)
-#define ScriptRunIterator U_ICU_ENTRY_POINT_RENAME(ScriptRunIterator)
-#define ScriptSet U_ICU_ENTRY_POINT_RENAME(ScriptSet)
-#define ScriptTable U_ICU_ENTRY_POINT_RENAME(ScriptTable)
-#define SearchIterator U_ICU_ENTRY_POINT_RENAME(SearchIterator)
-#define SegmentArrayProcessor U_ICU_ENTRY_POINT_RENAME(SegmentArrayProcessor)
-#define SegmentSingleProcessor U_ICU_ENTRY_POINT_RENAME(SegmentSingleProcessor)
-#define SelectFormat U_ICU_ENTRY_POINT_RENAME(SelectFormat)
-#define ServiceEnumeration U_ICU_ENTRY_POINT_RENAME(ServiceEnumeration)
-#define ServiceListener U_ICU_ENTRY_POINT_RENAME(ServiceListener)
-#define SimpleArrayProcessor U_ICU_ENTRY_POINT_RENAME(SimpleArrayProcessor)
-#define SimpleDateFormat U_ICU_ENTRY_POINT_RENAME(SimpleDateFormat)
-#define SimpleFactory U_ICU_ENTRY_POINT_RENAME(SimpleFactory)
-#define SimpleLocaleKeyFactory U_ICU_ENTRY_POINT_RENAME(SimpleLocaleKeyFactory)
-#define SimpleNumberFormatFactory U_ICU_ENTRY_POINT_RENAME(SimpleNumberFormatFactory)
-#define SimpleSingleton U_ICU_ENTRY_POINT_RENAME(SimpleSingleton)
-#define SimpleTimeZone U_ICU_ENTRY_POINT_RENAME(SimpleTimeZone)
-#define SinglePositioningFormat1Subtable U_ICU_ENTRY_POINT_RENAME(SinglePositioningFormat1Subtable)
-#define SinglePositioningFormat2Subtable U_ICU_ENTRY_POINT_RENAME(SinglePositioningFormat2Subtable)
-#define SinglePositioningSubtable U_ICU_ENTRY_POINT_RENAME(SinglePositioningSubtable)
-#define SingleSubstitutionFormat1Subtable U_ICU_ENTRY_POINT_RENAME(SingleSubstitutionFormat1Subtable)
-#define SingleSubstitutionFormat2Subtable U_ICU_ENTRY_POINT_RENAME(SingleSubstitutionFormat2Subtable)
-#define SingleSubstitutionSubtable U_ICU_ENTRY_POINT_RENAME(SingleSubstitutionSubtable)
-#define SingleTableProcessor U_ICU_ENTRY_POINT_RENAME(SingleTableProcessor)
-#define SpoofData U_ICU_ENTRY_POINT_RENAME(SpoofData)
-#define SpoofImpl U_ICU_ENTRY_POINT_RENAME(SpoofImpl)
-#define StateTableProcessor U_ICU_ENTRY_POINT_RENAME(StateTableProcessor)
-#define StringCharacterIterator U_ICU_ENTRY_POINT_RENAME(StringCharacterIterator)
-#define StringEnumeration U_ICU_ENTRY_POINT_RENAME(StringEnumeration)
-#define StringList U_ICU_ENTRY_POINT_RENAME(StringList)
-#define StringLocalizationInfo U_ICU_ENTRY_POINT_RENAME(StringLocalizationInfo)
-#define StringMatcher U_ICU_ENTRY_POINT_RENAME(StringMatcher)
-#define StringPair U_ICU_ENTRY_POINT_RENAME(StringPair)
-#define StringPiece U_ICU_ENTRY_POINT_RENAME(StringPiece)
-#define StringReplacer U_ICU_ENTRY_POINT_RENAME(StringReplacer)
-#define StringSearch U_ICU_ENTRY_POINT_RENAME(StringSearch)
-#define StringToCEsMap U_ICU_ENTRY_POINT_RENAME(StringToCEsMap)
-#define StyleRuns U_ICU_ENTRY_POINT_RENAME(StyleRuns)
-#define SubstitutionLookup U_ICU_ENTRY_POINT_RENAME(SubstitutionLookup)
-#define SubtableProcessor U_ICU_ENTRY_POINT_RENAME(SubtableProcessor)
-#define SunTimeAngleFunc U_ICU_ENTRY_POINT_RENAME(SunTimeAngleFunc)
-#define SymbolTable U_ICU_ENTRY_POINT_RENAME(SymbolTable)
-#define TZEnumeration U_ICU_ENTRY_POINT_RENAME(TZEnumeration)
-#define TaiwanCalendar U_ICU_ENTRY_POINT_RENAME(TaiwanCalendar)
-#define Target U_ICU_ENTRY_POINT_RENAME(Target)
-#define TernaryNode U_ICU_ENTRY_POINT_RENAME(TernaryNode)
-#define TextTrieMap U_ICU_ENTRY_POINT_RENAME(TextTrieMap)
-#define TextTrieMapSearchResultHandler U_ICU_ENTRY_POINT_RENAME(TextTrieMapSearchResultHandler)
-#define ThaiBreakEngine U_ICU_ENTRY_POINT_RENAME(ThaiBreakEngine)
-#define ThaiLayoutEngine U_ICU_ENTRY_POINT_RENAME(ThaiLayoutEngine)
-#define ThaiShaping U_ICU_ENTRY_POINT_RENAME(ThaiShaping)
-#define TibetanClassTable U_ICU_ENTRY_POINT_RENAME(TibetanClassTable)
-#define TibetanOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(TibetanOpenTypeLayoutEngine)
-#define TibetanReordering U_ICU_ENTRY_POINT_RENAME(TibetanReordering)
-#define TimeArrayTimeZoneRule U_ICU_ENTRY_POINT_RENAME(TimeArrayTimeZoneRule)
-#define TimeUnit U_ICU_ENTRY_POINT_RENAME(TimeUnit)
-#define TimeUnitAmount U_ICU_ENTRY_POINT_RENAME(TimeUnitAmount)
-#define TimeUnitFormat U_ICU_ENTRY_POINT_RENAME(TimeUnitFormat)
-#define TimeZone U_ICU_ENTRY_POINT_RENAME(TimeZone)
-#define TimeZoneRule U_ICU_ENTRY_POINT_RENAME(TimeZoneRule)
-#define TimeZoneTransition U_ICU_ENTRY_POINT_RENAME(TimeZoneTransition)
-#define TitlecaseTransliterator U_ICU_ENTRY_POINT_RENAME(TitlecaseTransliterator)
-#define TransliterationRule U_ICU_ENTRY_POINT_RENAME(TransliterationRule)
-#define TransliterationRuleData U_ICU_ENTRY_POINT_RENAME(TransliterationRuleData)
-#define TransliterationRuleSet U_ICU_ENTRY_POINT_RENAME(TransliterationRuleSet)
-#define Transliterator U_ICU_ENTRY_POINT_RENAME(Transliterator)
-#define TransliteratorAlias U_ICU_ENTRY_POINT_RENAME(TransliteratorAlias)
-#define TransliteratorEntry U_ICU_ENTRY_POINT_RENAME(TransliteratorEntry)
-#define TransliteratorIDParser U_ICU_ENTRY_POINT_RENAME(TransliteratorIDParser)
-#define TransliteratorParser U_ICU_ENTRY_POINT_RENAME(TransliteratorParser)
-#define TransliteratorRegistry U_ICU_ENTRY_POINT_RENAME(TransliteratorRegistry)
-#define TransliteratorSpec U_ICU_ENTRY_POINT_RENAME(TransliteratorSpec)
-#define TriStateSingleton U_ICU_ENTRY_POINT_RENAME(TriStateSingleton)
-#define TrieWordDictionary U_ICU_ENTRY_POINT_RENAME(TrieWordDictionary)
-#define TrimmedArrayProcessor U_ICU_ENTRY_POINT_RENAME(TrimmedArrayProcessor)
-#define UCharCharacterIterator U_ICU_ENTRY_POINT_RENAME(UCharCharacterIterator)
-#define UCollationPCE U_ICU_ENTRY_POINT_RENAME(UCollationPCE)
-#define UDataPathIterator U_ICU_ENTRY_POINT_RENAME(UDataPathIterator)
-#define ULocRuns U_ICU_ENTRY_POINT_RENAME(ULocRuns)
-#define UMemory U_ICU_ENTRY_POINT_RENAME(UMemory)
-#define UObject U_ICU_ENTRY_POINT_RENAME(UObject)
-#define UStack U_ICU_ENTRY_POINT_RENAME(UStack)
-#define UStringEnumeration U_ICU_ENTRY_POINT_RENAME(UStringEnumeration)
-#define UTS46 U_ICU_ENTRY_POINT_RENAME(UTS46)
-#define UTrie2Singleton U_ICU_ENTRY_POINT_RENAME(UTrie2Singleton)
-#define UVector U_ICU_ENTRY_POINT_RENAME(UVector)
-#define UVector32 U_ICU_ENTRY_POINT_RENAME(UVector32)
-#define UVector64 U_ICU_ENTRY_POINT_RENAME(UVector64)
-#define UnescapeTransliterator U_ICU_ENTRY_POINT_RENAME(UnescapeTransliterator)
-#define UnhandledEngine U_ICU_ENTRY_POINT_RENAME(UnhandledEngine)
-#define UnicodeArabicOpenTypeLayoutEngine U_ICU_ENTRY_POINT_RENAME(UnicodeArabicOpenTypeLayoutEngine)
-#define UnicodeFilter U_ICU_ENTRY_POINT_RENAME(UnicodeFilter)
-#define UnicodeFunctor U_ICU_ENTRY_POINT_RENAME(UnicodeFunctor)
-#define UnicodeMatcher U_ICU_ENTRY_POINT_RENAME(UnicodeMatcher)
-#define UnicodeNameTransliterator U_ICU_ENTRY_POINT_RENAME(UnicodeNameTransliterator)
-#define UnicodeReplacer U_ICU_ENTRY_POINT_RENAME(UnicodeReplacer)
-#define UnicodeSet U_ICU_ENTRY_POINT_RENAME(UnicodeSet)
-#define UnicodeSetIterator U_ICU_ENTRY_POINT_RENAME(UnicodeSetIterator)
-#define UnicodeSetStringSpan U_ICU_ENTRY_POINT_RENAME(UnicodeSetStringSpan)
-#define UnicodeString U_ICU_ENTRY_POINT_RENAME(UnicodeString)
-#define UppercaseTransliterator U_ICU_ENTRY_POINT_RENAME(UppercaseTransliterator)
-#define VTZReader U_ICU_ENTRY_POINT_RENAME(VTZReader)
-#define VTZWriter U_ICU_ENTRY_POINT_RENAME(VTZWriter)
-#define VTimeZone U_ICU_ENTRY_POINT_RENAME(VTimeZone)
-#define ValueRecord U_ICU_ENTRY_POINT_RENAME(ValueRecord)
-#define ValueRuns U_ICU_ENTRY_POINT_RENAME(ValueRuns)
-#define ZSFCache U_ICU_ENTRY_POINT_RENAME(ZSFCache)
-#define ZSFCacheEntry U_ICU_ENTRY_POINT_RENAME(ZSFCacheEntry)
-#define ZSFStringPool U_ICU_ENTRY_POINT_RENAME(ZSFStringPool)
-#define ZSFStringPoolChunk U_ICU_ENTRY_POINT_RENAME(ZSFStringPoolChunk)
-#define ZoneMeta U_ICU_ENTRY_POINT_RENAME(ZoneMeta)
-#define ZoneStringFormat U_ICU_ENTRY_POINT_RENAME(ZoneStringFormat)
-#define ZoneStringInfo U_ICU_ENTRY_POINT_RENAME(ZoneStringInfo)
-#define ZoneStringSearchResultHandler U_ICU_ENTRY_POINT_RENAME(ZoneStringSearchResultHandler)
-#define ZoneStrings U_ICU_ENTRY_POINT_RENAME(ZoneStrings)
-#define collIterate U_ICU_ENTRY_POINT_RENAME(collIterate)
-#define locale_set_default_internal U_ICU_ENTRY_POINT_RENAME(locale_set_default_internal)
-#define util64_fromDouble U_ICU_ENTRY_POINT_RENAME(util64_fromDouble)
-#define util64_pow U_ICU_ENTRY_POINT_RENAME(util64_pow)
-#define util64_tou U_ICU_ENTRY_POINT_RENAME(util64_tou)
-
-#endif
-#endif
-
-#endif
-
-#endif
diff --git a/source/common/unicode/urep.h b/source/common/unicode/urep.h
deleted file mode 100644
index c7b9947..0000000
--- a/source/common/unicode/urep.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-******************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-******************************************************************************
-*   Date        Name        Description
-*   06/23/00    aliu        Creation.
-******************************************************************************
-*/
-
-#ifndef __UREP_H
-#define __UREP_H
-
-#include "unicode/utypes.h"
-
-U_CDECL_BEGIN
-
-/********************************************************************
- * General Notes
- ********************************************************************
- * TODO
- * Add usage scenario
- * Add test code
- * Talk about pinning
- * Talk about "can truncate result if out of memory"
- */
-
-/********************************************************************
- * Data Structures
- ********************************************************************/
-/**
- * \file
- * \brief C API: Callbacks for UReplaceable
- */
-/**
- * An opaque replaceable text object.  This will be manipulated only
- * through the caller-supplied UReplaceableFunctor struct.  Related
- * to the C++ class Replaceable.
- * This is currently only used in the Transliterator C API, see utrans.h .
- * @stable ICU 2.0
- */
-typedef void* UReplaceable;
-
-/**
- * A set of function pointers that transliterators use to manipulate a
- * UReplaceable.  The caller should supply the required functions to
- * manipulate their text appropriately.  Related to the C++ class
- * Replaceable.
- * @stable ICU 2.0
- */
-typedef struct UReplaceableCallbacks {
-
-    /**
-     * Function pointer that returns the number of UChar code units in
-     * this text.
-     *
-     * @param rep A pointer to "this" UReplaceable object.
-     * @return The length of the text.
-     * @stable ICU 2.0
-     */
-    int32_t (*length)(const UReplaceable* rep);
-
-    /**
-     * Function pointer that returns a UChar code units at the given
-     * offset into this text; 0 <= offset < n, where n is the value
-     * returned by (*length)(rep).  See unistr.h for a description of
-     * charAt() vs. char32At().
-     *
-     * @param rep A pointer to "this" UReplaceable object.
-     * @param offset The index at which to fetch the UChar (code unit).
-     * @return The UChar (code unit) at offset, or U+FFFF if the offset is out of bounds.
-     * @stable ICU 2.0
-     */
-    UChar   (*charAt)(const UReplaceable* rep,
-                      int32_t offset);
-
-    /**
-     * Function pointer that returns a UChar32 code point at the given
-     * offset into this text.  See unistr.h for a description of
-     * charAt() vs. char32At().
-     *
-     * @param rep A pointer to "this" UReplaceable object.
-     * @param offset The index at which to fetch the UChar32 (code point).
-     * @return The UChar32 (code point) at offset, or U+FFFF if the offset is out of bounds.
-     * @stable ICU 2.0
-     */
-    UChar32 (*char32At)(const UReplaceable* rep,
-                        int32_t offset);
-    
-    /**
-     * Function pointer that replaces text between start and limit in
-     * this text with the given text.  Attributes (out of band info)
-     * should be retained.
-     *
-     * @param rep A pointer to "this" UReplaceable object.
-     * @param start the starting index of the text to be replaced,
-     * inclusive.
-     * @param limit the ending index of the text to be replaced,
-     * exclusive.
-     * @param text the new text to replace the UChars from
-     * start..limit-1.
-     * @param textLength the number of UChars at text, or -1 if text
-     * is null-terminated.
-     * @stable ICU 2.0
-     */
-    void    (*replace)(UReplaceable* rep,
-                       int32_t start,
-                       int32_t limit,
-                       const UChar* text,
-                       int32_t textLength);
-    
-    /**
-     * Function pointer that copies the characters in the range
-     * [<tt>start</tt>, <tt>limit</tt>) into the array <tt>dst</tt>.
-     *
-     * @param rep A pointer to "this" UReplaceable object.
-     * @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>(limit - start)</tt>.
-     * @stable ICU 2.1
-     */
-    void    (*extract)(UReplaceable* rep,
-                       int32_t start,
-                       int32_t limit,
-                       UChar* dst);
-
-    /**
-     * Function pointer that copies text between start and limit in
-     * this text to another index in the text.  Attributes (out of
-     * band info) should be retained.  After this call, there will be
-     * (at least) two copies of the characters originally located at
-     * start..limit-1.
-     *
-     * @param rep A pointer to "this" UReplaceable object.
-     * @param start the starting index of the text to be copied,
-     * inclusive.
-     * @param limit the ending index of the text to be copied,
-     * exclusive.
-     * @param dest the index at which the copy of the UChars should be
-     * inserted.
-     * @stable ICU 2.0
-     */
-    void    (*copy)(UReplaceable* rep,
-                    int32_t start,
-                    int32_t limit,
-                    int32_t dest);    
-
-} UReplaceableCallbacks;
-
-U_CDECL_END
-
-#endif
diff --git a/source/common/unicode/ures.h b/source/common/unicode/ures.h
deleted file mode 100644
index 38bdfb2..0000000
--- a/source/common/unicode/ures.h
+++ /dev/null
@@ -1,879 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*
-* File URES.H (formerly CRESBUND.H)
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   04/01/97    aliu        Creation.
-*   02/22/99    damiba      overhaul.
-*   04/04/99    helena      Fixed internal header inclusion.
-*   04/15/99    Madhu       Updated Javadoc  
-*   06/14/99    stephen     Removed functions taking a filename suffix.
-*   07/20/99    stephen     Language-independent ypedef to void*
-*   11/09/99    weiv        Added ures_getLocale()
-*   06/24/02    weiv        Added support for resource sharing
-******************************************************************************
-*/
-
-#ifndef URES_H
-#define URES_H
-
-#include "unicode/utypes.h"
-#include "unicode/uloc.h"
-#include "unicode/localpointer.h"
-
-/**
- * \file
- * \brief C API: Resource Bundle 
- *
- * <h2>C API: Resource Bundle</h2>
- *
- * C API representing a collection of resource information pertaining to a given
- * locale. A resource bundle provides a way of accessing locale- specific information in
- * a data file. You create a resource bundle that manages the resources for a given
- * locale and then ask it for individual resources.
- * <P>
- * Resource bundles in ICU4C are currently defined using text files which conform to the following
- * <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt">BNF definition</a>.
- * More on resource bundle concepts and syntax can be found in the 
- * <a href="http://icu-project.org/userguide/ResourceManagement.html">Users Guide</a>.
- * <P>
- */
-
-/**
- * UResourceBundle is an opaque type for handles for resource bundles in C APIs.
- * @stable ICU 2.0
- */
-struct UResourceBundle;
-
-/**
- * @stable ICU 2.0
- */
-typedef struct UResourceBundle UResourceBundle;
-
-/**
- * Numeric constants for types of resource items.
- * @see ures_getType
- * @stable ICU 2.0
- */
-typedef enum {
-    /** Resource type constant for "no resource". @stable ICU 2.6 */
-    URES_NONE=-1,
-
-    /** Resource type constant for 16-bit Unicode strings. @stable ICU 2.6 */
-    URES_STRING=0,
-
-    /** Resource type constant for binary data. @stable ICU 2.6 */
-    URES_BINARY=1,
-
-    /** Resource type constant for tables of key-value pairs. @stable ICU 2.6 */
-    URES_TABLE=2,
-
-    /**
-     * Resource type constant for aliases;
-     * internally stores a string which identifies the actual resource
-     * storing the data (can be in a different resource bundle).
-     * Resolved internally before delivering the actual resource through the API.
-     * @stable ICU 2.6
-     */
-    URES_ALIAS=3,
-
-    /**
-     * Resource type constant for a single 28-bit integer, interpreted as
-     * signed or unsigned by the ures_getInt() or ures_getUInt() function.
-     * @see ures_getInt
-     * @see ures_getUInt
-     * @stable ICU 2.6
-     */
-    URES_INT=7,
-
-    /** Resource type constant for arrays of resources. @stable ICU 2.6 */
-    URES_ARRAY=8,
-
-    /**
-     * Resource type constant for vectors of 32-bit integers.
-     * @see ures_getIntVector
-     * @stable ICU 2.6
-     */
-    URES_INT_VECTOR = 14,
-#ifndef U_HIDE_DEPRECATED_API
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_NONE=URES_NONE,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_STRING=URES_STRING,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_BINARY=URES_BINARY,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_TABLE=URES_TABLE,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_ALIAS=URES_ALIAS,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_INT=URES_INT,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_ARRAY=URES_ARRAY,
-    /** @deprecated ICU 2.6 Use the URES_ constant instead. */
-    RES_INT_VECTOR=URES_INT_VECTOR,
-    /** @deprecated ICU 2.6 Not used. */
-    RES_RESERVED=15, 
-#endif /* U_HIDE_DEPRECATED_API */
-
-    URES_LIMIT = 16
-} UResType;
-
-/*
- * Functions to create and destroy resource bundles.
- */
-
-/**
- * Opens a UResourceBundle, from which users can extract strings by using
- * their corresponding keys.
- * Note that the caller is responsible of calling <TT>ures_close</TT> on each succesfully
- * opened resource bundle.
- * @param packageName   The packageName and locale together point to an ICU udata object, 
- *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
- *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
- *                      a package registered with udata_setAppData(). Using a full file or directory
- *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
- * @param locale  specifies the locale for which we want to open the resource
- *                if NULL, the default locale will be used. If strlen(locale) == 0
- *                root locale will be used.
- *                
- * @param status  fills in the outgoing error code.
- * 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 status 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 or root locale data was used; neither the requested locale 
- * nor any of its fall back locales could be found. Please see the users guide for more 
- * information on this topic.
- * @return      a newly allocated resource bundle.
- * @see ures_close
- * @stable ICU 2.0
- */
-U_STABLE UResourceBundle*  U_EXPORT2 
-ures_open(const char*    packageName,
-          const char*  locale, 
-          UErrorCode*     status);
-
-
-/** This function does not care what kind of localeID is passed in. It simply opens a bundle with 
- *  that name. Fallback mechanism is disabled for the new bundle. If the requested bundle contains
- *  an %%ALIAS directive, the results are undefined.
- * @param packageName   The packageName and locale together point to an ICU udata object, 
- *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
- *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
- *                      a package registered with udata_setAppData(). Using a full file or directory
- *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
- * @param locale  specifies the locale for which we want to open the resource
- *                if NULL, the default locale will be used. If strlen(locale) == 0
- *                root locale will be used.
- *                
- * @param status fills in the outgoing error code. Either U_ZERO_ERROR or U_MISSING_RESOURCE_ERROR
- * @return      a newly allocated resource bundle or NULL if it doesn't exist.
- * @see ures_close
- * @stable ICU 2.0
- */
-U_STABLE UResourceBundle* U_EXPORT2 
-ures_openDirect(const char* packageName, 
-                const char* locale, 
-                UErrorCode* status);
-
-/**
- * Same as ures_open() but takes a const UChar *path.
- * This path will be converted to char * using the default converter,
- * then ures_open() is called.
- *
- * @param packageName   The packageName and locale together point to an ICU udata object, 
- *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
- *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
- *                      a package registered with udata_setAppData(). Using a full file or directory
- *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
- * @param locale  specifies the locale for which we want to open the resource
- *                if NULL, the default locale will be used. If strlen(locale) == 0
- *                root locale will be used.
- * @param status  fills in the outgoing error code.
- * @return      a newly allocated resource bundle.
- * @see ures_open
- * @stable ICU 2.0
- */
-U_STABLE UResourceBundle* U_EXPORT2 
-ures_openU(const UChar* packageName, 
-           const char* locale, 
-           UErrorCode* status);
-
-/**
- * Returns the number of strings/arrays in resource bundles.
- * Better to use ures_getSize, as this function will be deprecated. 
- *
- *@param resourceBundle resource bundle containing the desired strings
- *@param resourceKey key tagging the resource
- *@param err fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_FALLBACK_WARNING </TT>
- *@return: for    <STRONG>Arrays</STRONG>: returns the number of resources in the array
- *                <STRONG>Tables</STRONG>: returns the number of resources in the table
- *                <STRONG>single string</STRONG>: returns 1
- *@see ures_getSize
- * @deprecated ICU 2.8 User ures_getSize instead
- */
-U_DEPRECATED int32_t U_EXPORT2 
-ures_countArrayItems(const UResourceBundle* resourceBundle,
-                     const char* resourceKey,
-                     UErrorCode* err);
-/**
- * Close a resource bundle, all pointers returned from the various ures_getXXX calls
- * on this particular bundle should be considered invalid henceforth.
- *
- * @param resourceBundle a pointer to a resourceBundle struct. Can be NULL.
- * @see ures_open
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ures_close(UResourceBundle* resourceBundle);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUResourceBundlePointer
- * "Smart pointer" class, closes a UResourceBundle via ures_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUResourceBundlePointer, UResourceBundle, ures_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Return the version number associated with this ResourceBundle as a string. Please
- * use ures_getVersion as this function is going to be deprecated.
- *
- * @param resourceBundle The resource bundle for which the version is checked.
- * @return  A version number string as specified in the resource bundle or its parent.
- *          The caller does not own this string.
- * @see ures_getVersion
- * @deprecated ICU 2.8 Use ures_getVersion instead.
- */
-U_DEPRECATED const char* U_EXPORT2 
-ures_getVersionNumber(const UResourceBundle*   resourceBundle);
-
-/**
- * Return the version number associated with this ResourceBundle as an 
- * UVersionInfo array.
- *
- * @param resB The resource bundle for which the version is checked.
- * @param versionInfo A UVersionInfo array that is filled with the version number
- *                    as specified in the resource bundle or its parent.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ures_getVersion(const UResourceBundle* resB, 
-                UVersionInfo versionInfo);
-
-/**
- * Return the name of the Locale associated with this ResourceBundle. This API allows
- * you to query for the real locale of the resource. For example, if you requested 
- * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. 
- * For subresources, the locale where this resource comes from will be returned.
- * If fallback has occured, getLocale will reflect this.
- *
- * @param resourceBundle resource bundle in question
- * @param status just for catching illegal arguments
- * @return  A Locale name
- * @deprecated ICU 2.8 Use ures_getLocaleByType instead.
- */
-U_DEPRECATED const char* U_EXPORT2 
-ures_getLocale(const UResourceBundle* resourceBundle, 
-               UErrorCode* status);
-
-
-/**
- * Return the name of the Locale associated with this ResourceBundle. 
- * You can choose between requested, valid and real locale.
- *
- * @param resourceBundle resource bundle in question
- * @param type You can choose between requested, valid and actual
- *             locale. For description see the definition of
- *             ULocDataLocaleType in uloc.h
- * @param status just for catching illegal arguments
- * @return  A Locale name
- * @stable ICU 2.8
- */
-U_STABLE const char* U_EXPORT2 
-ures_getLocaleByType(const UResourceBundle* resourceBundle, 
-                     ULocDataLocaleType type, 
-                     UErrorCode* status);
-
-
-/**
- * Same as ures_open() but uses the fill-in parameter instead of allocating
- * a bundle, if r!=NULL.
- * TODO need to revisit usefulness of this function
- *      and usage model for fillIn parameters without knowing sizeof(UResourceBundle)
- * @param r The resourcebundle to open
- * @param packageName   The packageName and locale together point to an ICU udata object, 
- *                      as defined by <code> udata_open( packageName, "res", locale, err) </code> 
- *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
- *                      a package registered with udata_setAppData(). Using a full file or directory
- *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
- * @param localeID specifies the locale for which we want to open the resource
- * @param status The error code
- * @return a newly allocated resource bundle or NULL if it doesn't exist.
- * @internal
- */
-U_INTERNAL void U_EXPORT2 
-ures_openFillIn(UResourceBundle *r, 
-                const char* packageName,
-                const char* localeID, 
-                UErrorCode* status);
-
-/**
- * Returns a string from a string resource type
- *
- * @param resourceBundle a string resource
- * @param len    fills in the length of resulting string
- * @param status fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                Always check the value of status. Don't count on returning NULL.
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
- * @see ures_getBinary
- * @see ures_getIntVector
- * @see ures_getInt
- * @see ures_getUInt
- * @stable ICU 2.0
- */
-U_STABLE const UChar* U_EXPORT2 
-ures_getString(const UResourceBundle* resourceBundle, 
-               int32_t* len, 
-               UErrorCode* status);
-
-/**
- * Returns a UTF-8 string from a string resource.
- * The UTF-8 string may be returnable directly as a pointer, or
- * it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
- * or equivalent.
- *
- * If forceCopy==TRUE, then the string is always written to the dest buffer
- * and dest is returned.
- *
- * If forceCopy==FALSE, then the string is returned as a pointer if possible,
- * without needing a dest buffer (it can be NULL). If the string needs to be
- * copied or transformed, then it may be placed into dest at an arbitrary offset.
- *
- * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and
- * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual.
- *
- * If the string is transformed from UTF-16, then a conversion error may occur
- * if an unpaired surrogate is encountered. If the function is successful, then
- * the output UTF-8 string is always well-formed.
- *
- * @param resB Resource bundle.
- * @param dest Destination buffer. Can be NULL only if capacity=*length==0.
- * @param length Input: Capacity of destination buffer.
- *               Output: Actual length of the UTF-8 string, not counting the
- *               terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
- *               Can be NULL, meaning capacity=0 and the string length is not
- *               returned to the caller.
- * @param forceCopy If TRUE, then the output string will always be written to
- *                  dest, with U_BUFFER_OVERFLOW_ERROR and
- *                  U_STRING_NOT_TERMINATED_WARNING set if appropriate.
- *                  If FALSE, then the dest buffer may or may not contain a
- *                  copy of the string. dest may or may not be modified.
- *                  If a copy needs to be written, then the UErrorCode parameter
- *                  indicates overflow etc. as usual.
- * @param status 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 pointer to the UTF-8 string. It may be dest, or at some offset
- *         from dest (only if !forceCopy), or in unrelated memory.
- *         Always NUL-terminated unless the string was written to dest and
- *         length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set).
- *
- * @see ures_getString
- * @see u_strToUTF8
- * @stable ICU 3.6
- */
-U_STABLE const char * U_EXPORT2
-ures_getUTF8String(const UResourceBundle *resB,
-                   char *dest, int32_t *length,
-                   UBool forceCopy,
-                   UErrorCode *status);
-
-/**
- * Returns a binary data from a binary resource. 
- *
- * @param resourceBundle a string resource
- * @param len    fills in the length of resulting byte chunk
- * @param status fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                Always check the value of status. Don't count on returning NULL.
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file.
- * @see ures_getString
- * @see ures_getIntVector
- * @see ures_getInt
- * @see ures_getUInt
- * @stable ICU 2.0
- */
-U_STABLE const uint8_t* U_EXPORT2 
-ures_getBinary(const UResourceBundle* resourceBundle, 
-               int32_t* len, 
-               UErrorCode* status);
-
-/**
- * Returns a 32 bit integer array from a resource. 
- *
- * @param resourceBundle an int vector resource
- * @param len    fills in the length of resulting byte chunk
- * @param status fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                Always check the value of status. Don't count on returning NULL.
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return a pointer to a chunk of integers which live in a memory mapped/DLL file.
- * @see ures_getBinary
- * @see ures_getString
- * @see ures_getInt
- * @see ures_getUInt
- * @stable ICU 2.0
- */
-U_STABLE const int32_t* U_EXPORT2 
-ures_getIntVector(const UResourceBundle* resourceBundle, 
-                  int32_t* len, 
-                  UErrorCode* status);
-
-/**
- * Returns an unsigned integer from a resource. 
- * This integer is originally 28 bits.
- *
- * @param resourceBundle a string resource
- * @param status fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return an integer value
- * @see ures_getInt
- * @see ures_getIntVector
- * @see ures_getBinary
- * @see ures_getString
- * @stable ICU 2.0
- */
-U_STABLE uint32_t U_EXPORT2 
-ures_getUInt(const UResourceBundle* resourceBundle, 
-             UErrorCode *status);
-
-/**
- * Returns a signed integer from a resource. 
- * This integer is originally 28 bit and the sign gets propagated.
- *
- * @param resourceBundle a string resource
- * @param status  fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return an integer value
- * @see ures_getUInt
- * @see ures_getIntVector
- * @see ures_getBinary
- * @see ures_getString
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ures_getInt(const UResourceBundle* resourceBundle, 
-            UErrorCode *status);
-
-/**
- * Returns the size of a resource. Size for scalar types is always 1, 
- * and for vector/table types is the number of child resources.
- * @warning Integer array is treated as a scalar type. There are no 
- *          APIs to access individual members of an integer array. It
- *          is always returned as a whole.
- * @param resourceBundle a resource
- * @return number of resources in a given resource.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ures_getSize(const UResourceBundle *resourceBundle);
-
-/**
- * Returns the type of a resource. Available types are defined in enum UResType
- *
- * @param resourceBundle a resource
- * @return type of the given resource.
- * @see UResType
- * @stable ICU 2.0
- */
-U_STABLE UResType U_EXPORT2 
-ures_getType(const UResourceBundle *resourceBundle);
-
-/**
- * Returns the key associated with a given resource. Not all the resources have a key - only 
- * those that are members of a table.
- *
- * @param resourceBundle a resource
- * @return a key associated to this resource, or NULL if it doesn't have a key
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2 
-ures_getKey(const UResourceBundle *resourceBundle);
-
-/* ITERATION API 
-    This API provides means for iterating through a resource
-*/
-
-/**
- * Resets the internal context of a resource so that iteration starts from the first element.
- *
- * @param resourceBundle a resource
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ures_resetIterator(UResourceBundle *resourceBundle);
-
-/**
- * Checks whether the given resource has another element to iterate over.
- *
- * @param resourceBundle a resource
- * @return TRUE if there are more elements, FALSE if there is no more elements
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2 
-ures_hasNext(const UResourceBundle *resourceBundle);
-
-/**
- * Returns the next resource in a given resource or NULL if there are no more resources 
- * to iterate over. Features a fill-in parameter. 
- *
- * @param resourceBundle    a resource
- * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be closed by the caller.
- *                          Alternatively, you can supply a struct to be filled by this function.
- * @param status            fills in the outgoing error code. You may still get a non NULL result even if an
- *                          error occured. Check status instead.
- * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
- * @stable ICU 2.0
- */
-U_STABLE UResourceBundle* U_EXPORT2 
-ures_getNextResource(UResourceBundle *resourceBundle, 
-                     UResourceBundle *fillIn, 
-                     UErrorCode *status);
-
-/**
- * Returns the next string in a given resource or NULL if there are no more resources 
- * to iterate over. 
- *
- * @param resourceBundle    a resource
- * @param len               fill in length of the string
- * @param key               fill in for key associated with this string. NULL if no key
- * @param status            fills in the outgoing error code. If an error occured, we may return NULL, but don't
- *                          count on it. Check status instead!
- * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
- * @stable ICU 2.0
- */
-U_STABLE const UChar* U_EXPORT2 
-ures_getNextString(UResourceBundle *resourceBundle, 
-                   int32_t* len, 
-                   const char ** key, 
-                   UErrorCode *status);
-
-/**
- * Returns the resource in a given resource at the specified index. Features a fill-in parameter. 
- *
- * @param resourceBundle    the resource bundle from which to get a sub-resource
- * @param indexR            an index to the wanted resource.
- * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be closed by the caller.
- *                          Alternatively, you can supply a struct to be filled by this function.
- * @param status            fills in the outgoing error code. Don't count on NULL being returned if an error has
- *                          occured. Check status instead.
- * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
- * @stable ICU 2.0
- */
-U_STABLE UResourceBundle* U_EXPORT2 
-ures_getByIndex(const UResourceBundle *resourceBundle, 
-                int32_t indexR, 
-                UResourceBundle *fillIn, 
-                UErrorCode *status);
-
-/**
- * Returns the string in a given resource at the specified index.
- *
- * @param resourceBundle    a resource
- * @param indexS            an index to the wanted string.
- * @param len               fill in length of the string
- * @param status            fills in the outgoing error code. If an error occured, we may return NULL, but don't
- *                          count on it. Check status instead!
- * @return                  a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
- * @stable ICU 2.0
- */
-U_STABLE const UChar* U_EXPORT2 
-ures_getStringByIndex(const UResourceBundle *resourceBundle, 
-                      int32_t indexS, 
-                      int32_t* len, 
-                      UErrorCode *status);
-
-/**
- * Returns a UTF-8 string from a resource at the specified index.
- * The UTF-8 string may be returnable directly as a pointer, or
- * it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
- * or equivalent.
- *
- * If forceCopy==TRUE, then the string is always written to the dest buffer
- * and dest is returned.
- *
- * If forceCopy==FALSE, then the string is returned as a pointer if possible,
- * without needing a dest buffer (it can be NULL). If the string needs to be
- * copied or transformed, then it may be placed into dest at an arbitrary offset.
- *
- * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and
- * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual.
- *
- * If the string is transformed from UTF-16, then a conversion error may occur
- * if an unpaired surrogate is encountered. If the function is successful, then
- * the output UTF-8 string is always well-formed.
- *
- * @param resB Resource bundle.
- * @param stringIndex An index to the wanted string.
- * @param dest Destination buffer. Can be NULL only if capacity=*length==0.
- * @param pLength Input: Capacity of destination buffer.
- *               Output: Actual length of the UTF-8 string, not counting the
- *               terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
- *               Can be NULL, meaning capacity=0 and the string length is not
- *               returned to the caller.
- * @param forceCopy If TRUE, then the output string will always be written to
- *                  dest, with U_BUFFER_OVERFLOW_ERROR and
- *                  U_STRING_NOT_TERMINATED_WARNING set if appropriate.
- *                  If FALSE, then the dest buffer may or may not contain a
- *                  copy of the string. dest may or may not be modified.
- *                  If a copy needs to be written, then the UErrorCode parameter
- *                  indicates overflow etc. as usual.
- * @param status 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 pointer to the UTF-8 string. It may be dest, or at some offset
- *         from dest (only if !forceCopy), or in unrelated memory.
- *         Always NUL-terminated unless the string was written to dest and
- *         length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set).
- *
- * @see ures_getStringByIndex
- * @see u_strToUTF8
- * @stable ICU 3.6
- */
-U_STABLE const char * U_EXPORT2
-ures_getUTF8StringByIndex(const UResourceBundle *resB,
-                          int32_t stringIndex,
-                          char *dest, int32_t *pLength,
-                          UBool forceCopy,
-                          UErrorCode *status);
-
-/**
- * Returns a resource in a given resource that has a given key. This procedure works only with table
- * resources. Features a fill-in parameter. 
- *
- * @param resourceBundle    a resource
- * @param key               a key associated with the wanted resource
- * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be closed by the caller.
- *                          Alternatively, you can supply a struct to be filled by this function.
- * @param status            fills in the outgoing error code.
- * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
- * @stable ICU 2.0
- */
-U_STABLE UResourceBundle* U_EXPORT2 
-ures_getByKey(const UResourceBundle *resourceBundle, 
-              const char* key, 
-              UResourceBundle *fillIn, 
-              UErrorCode *status);
-
-/**
- * Returns a string in a given resource that has a given key. This procedure works only with table
- * resources. 
- *
- * @param resB              a resource
- * @param key               a key associated with the wanted string
- * @param len               fill in length of the string
- * @param status            fills in the outgoing error code. If an error occured, we may return NULL, but don't
- *                          count on it. Check status instead!
- * @return                  a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
- * @stable ICU 2.0
- */
-U_STABLE const UChar* U_EXPORT2 
-ures_getStringByKey(const UResourceBundle *resB, 
-                    const char* key, 
-                    int32_t* len, 
-                    UErrorCode *status);
-
-/**
- * Returns a UTF-8 string from a resource and a key.
- * This function works only with table resources.
- *
- * The UTF-8 string may be returnable directly as a pointer, or
- * it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
- * or equivalent.
- *
- * If forceCopy==TRUE, then the string is always written to the dest buffer
- * and dest is returned.
- *
- * If forceCopy==FALSE, then the string is returned as a pointer if possible,
- * without needing a dest buffer (it can be NULL). If the string needs to be
- * copied or transformed, then it may be placed into dest at an arbitrary offset.
- *
- * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and
- * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual.
- *
- * If the string is transformed from UTF-16, then a conversion error may occur
- * if an unpaired surrogate is encountered. If the function is successful, then
- * the output UTF-8 string is always well-formed.
- *
- * @param resB Resource bundle.
- * @param key  A key associated with the wanted resource
- * @param dest Destination buffer. Can be NULL only if capacity=*length==0.
- * @param pLength Input: Capacity of destination buffer.
- *               Output: Actual length of the UTF-8 string, not counting the
- *               terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
- *               Can be NULL, meaning capacity=0 and the string length is not
- *               returned to the caller.
- * @param forceCopy If TRUE, then the output string will always be written to
- *                  dest, with U_BUFFER_OVERFLOW_ERROR and
- *                  U_STRING_NOT_TERMINATED_WARNING set if appropriate.
- *                  If FALSE, then the dest buffer may or may not contain a
- *                  copy of the string. dest may or may not be modified.
- *                  If a copy needs to be written, then the UErrorCode parameter
- *                  indicates overflow etc. as usual.
- * @param status 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 pointer to the UTF-8 string. It may be dest, or at some offset
- *         from dest (only if !forceCopy), or in unrelated memory.
- *         Always NUL-terminated unless the string was written to dest and
- *         length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set).
- *
- * @see ures_getStringByKey
- * @see u_strToUTF8
- * @stable ICU 3.6
- */
-U_STABLE const char * U_EXPORT2
-ures_getUTF8StringByKey(const UResourceBundle *resB,
-                        const char *key,
-                        char *dest, int32_t *pLength,
-                        UBool forceCopy,
-                        UErrorCode *status);
-
-#if U_SHOW_CPLUSPLUS_API
-#include "unicode/unistr.h"
-
-U_NAMESPACE_BEGIN
-/**
- * returns a string from a string resource type
- *
- * @param resB    a resource
- * @param status: fills in the outgoing error code
- *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
- *                could be a non-failing error 
- *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return        a UnicodeString object. If there is an error, string is bogus
- * @stable ICU 2.0
- */
-inline UnicodeString 
-ures_getUnicodeString(const UResourceBundle *resB, 
-                      UErrorCode* status) 
-{
-    int32_t len = 0;
-    const UChar *r = ures_getString(resB, &len, status);
-    return UnicodeString(TRUE, r, len);
-}
-
-/**
- * Returns the next string in a resource or NULL if there are no more resources 
- * to iterate over. 
- *
- * @param resB              a resource
- * @param key               fill in for key associated with this string
- * @param status            fills in the outgoing error code
- * @return an UnicodeString object.
- * @stable ICU 2.0
- */
-inline UnicodeString 
-ures_getNextUnicodeString(UResourceBundle *resB, 
-                          const char ** key, 
-                          UErrorCode* status) 
-{
-    int32_t len = 0;
-    const UChar* r = ures_getNextString(resB, &len, key, status);
-    return UnicodeString(TRUE, r, len);
-}
-
-/**
- * Returns the string in a given resource at the specified index.
- *
- * @param resB              a resource
- * @param index             an index to the wanted string.
- * @param status            fills in the outgoing error code
- * @return                  an UnicodeString object. If there is an error, string is bogus
- * @stable ICU 2.0
- */
-inline UnicodeString 
-ures_getUnicodeStringByIndex(const UResourceBundle *resB, 
-                             int32_t indexS, 
-                             UErrorCode* status) 
-{
-    int32_t len = 0;
-    const UChar* r = ures_getStringByIndex(resB, indexS, &len, status);
-    return UnicodeString(TRUE, r, len);
-}
-
-/**
- * Returns a string in a resource that has a given key. This procedure works only with table
- * resources. 
- *
- * @param resB              a resource
- * @param key               a key associated with the wanted string
- * @param status            fills in the outgoing error code
- * @return                  an UnicodeString object. If there is an error, string is bogus
- * @stable ICU 2.0
- */
-inline UnicodeString 
-ures_getUnicodeStringByKey(const UResourceBundle *resB, 
-                           const char* key, 
-                           UErrorCode* status) 
-{
-    int32_t len = 0;
-    const UChar* r = ures_getStringByKey(resB, key, &len, status);
-    return UnicodeString(TRUE, r, len);
-}
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Create a string enumerator, owned by the caller, of all locales located within 
- * the specified resource tree.
- * @param packageName name of the tree, such as (NULL) or U_ICUDATA_ALIAS or  or "ICUDATA-coll"
- * This call is similar to uloc_getAvailable().
- * @param status error code
- * @stable ICU 3.2
- */
-U_STABLE UEnumeration* U_EXPORT2
-ures_openAvailableLocales(const char *packageName, UErrorCode *status);
-
-
-#endif /*_URES*/
-/*eof*/
diff --git a/source/common/unicode/uscript.h b/source/common/unicode/uscript.h
deleted file mode 100644
index ee21c74..0000000
--- a/source/common/unicode/uscript.h
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- **********************************************************************
- *   Copyright (C) 1997-2010, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- *
- * File USCRIPT.H
- *
- * Modification History:
- *
- *   Date        Name        Description
- *   07/06/2001    Ram         Creation.
- ******************************************************************************
- */
-
-#ifndef USCRIPT_H
-#define USCRIPT_H
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C API: Unicode Script Information
- */
- 
-/**
- * Constants for ISO 15924 script codes.
- *
- * Many of these script codes - those from Unicode's ScriptNames.txt -
- * are character property values for Unicode's Script property.
- * See UAX #24 Script Names (http://www.unicode.org/reports/tr24/).
- *
- * Starting with ICU 3.6, constants for most ISO 15924 script codes
- * are included (currently excluding private-use codes Qaaa..Qabx).
- * For scripts for which there are codes in ISO 15924 but which are not
- * used in the Unicode Character Database (UCD), there are no Unicode characters
- * associated with those scripts.
- *
- * For example, there are no characters that have a UCD script code of
- * Hans or Hant. All Han ideographs have the Hani script code.
- * The Hans and Hant script codes are used with CLDR data.
- *
- * ISO 15924 script codes are included for use with CLDR and similar.
- *
- * @stable ICU 2.2
- */
-typedef enum UScriptCode {
-      USCRIPT_INVALID_CODE = -1,
-      USCRIPT_COMMON       =  0,  /* Zyyy */
-      USCRIPT_INHERITED    =  1,  /* Zinh */ /* "Code for inherited script", for non-spacing combining marks; also Qaai */
-      USCRIPT_ARABIC       =  2,  /* Arab */
-      USCRIPT_ARMENIAN     =  3,  /* Armn */
-      USCRIPT_BENGALI      =  4,  /* Beng */
-      USCRIPT_BOPOMOFO     =  5,  /* Bopo */
-      USCRIPT_CHEROKEE     =  6,  /* Cher */
-      USCRIPT_COPTIC       =  7,  /* Copt */
-      USCRIPT_CYRILLIC     =  8,  /* Cyrl */
-      USCRIPT_DESERET      =  9,  /* Dsrt */
-      USCRIPT_DEVANAGARI   = 10,  /* Deva */
-      USCRIPT_ETHIOPIC     = 11,  /* Ethi */
-      USCRIPT_GEORGIAN     = 12,  /* Geor */
-      USCRIPT_GOTHIC       = 13,  /* Goth */
-      USCRIPT_GREEK        = 14,  /* Grek */
-      USCRIPT_GUJARATI     = 15,  /* Gujr */
-      USCRIPT_GURMUKHI     = 16,  /* Guru */
-      USCRIPT_HAN          = 17,  /* Hani */
-      USCRIPT_HANGUL       = 18,  /* Hang */
-      USCRIPT_HEBREW       = 19,  /* Hebr */
-      USCRIPT_HIRAGANA     = 20,  /* Hira */
-      USCRIPT_KANNADA      = 21,  /* Knda */
-      USCRIPT_KATAKANA     = 22,  /* Kana */
-      USCRIPT_KHMER        = 23,  /* Khmr */
-      USCRIPT_LAO          = 24,  /* Laoo */
-      USCRIPT_LATIN        = 25,  /* Latn */
-      USCRIPT_MALAYALAM    = 26,  /* Mlym */
-      USCRIPT_MONGOLIAN    = 27,  /* Mong */
-      USCRIPT_MYANMAR      = 28,  /* Mymr */
-      USCRIPT_OGHAM        = 29,  /* Ogam */
-      USCRIPT_OLD_ITALIC   = 30,  /* Ital */
-      USCRIPT_ORIYA        = 31,  /* Orya */
-      USCRIPT_RUNIC        = 32,  /* Runr */
-      USCRIPT_SINHALA      = 33,  /* Sinh */
-      USCRIPT_SYRIAC       = 34,  /* Syrc */
-      USCRIPT_TAMIL        = 35,  /* Taml */
-      USCRIPT_TELUGU       = 36,  /* Telu */
-      USCRIPT_THAANA       = 37,  /* Thaa */
-      USCRIPT_THAI         = 38,  /* Thai */
-      USCRIPT_TIBETAN      = 39,  /* Tibt */
-      /** Canadian_Aboriginal script. @stable ICU 2.6 */
-      USCRIPT_CANADIAN_ABORIGINAL = 40,  /* Cans */
-      /** Canadian_Aboriginal script (alias). @stable ICU 2.2 */
-      USCRIPT_UCAS         = USCRIPT_CANADIAN_ABORIGINAL,
-      USCRIPT_YI           = 41,  /* Yiii */
-      USCRIPT_TAGALOG      = 42,  /* Tglg */
-      USCRIPT_HANUNOO      = 43,  /* Hano */
-      USCRIPT_BUHID        = 44,  /* Buhd */
-      USCRIPT_TAGBANWA     = 45,  /* Tagb */
-
-      /* New scripts in Unicode 4 @stable ICU 2.6 */
-      USCRIPT_BRAILLE      = 46,  /* Brai */
-      USCRIPT_CYPRIOT      = 47,  /* Cprt */
-      USCRIPT_LIMBU        = 48,  /* Limb */
-      USCRIPT_LINEAR_B     = 49,  /* Linb */
-      USCRIPT_OSMANYA      = 50,  /* Osma */
-      USCRIPT_SHAVIAN      = 51,  /* Shaw */
-      USCRIPT_TAI_LE       = 52,  /* Tale */
-      USCRIPT_UGARITIC     = 53,  /* Ugar */
-
-      /** New script code in Unicode 4.0.1 @stable ICU 3.0 */
-      USCRIPT_KATAKANA_OR_HIRAGANA = 54,/*Hrkt */
-
-      /* New scripts in Unicode 4.1 @stable ICU 3.4 */
-      USCRIPT_BUGINESE      = 55, /* Bugi */
-      USCRIPT_GLAGOLITIC    = 56, /* Glag */
-      USCRIPT_KHAROSHTHI    = 57, /* Khar */
-      USCRIPT_SYLOTI_NAGRI  = 58, /* Sylo */
-      USCRIPT_NEW_TAI_LUE   = 59, /* Talu */
-      USCRIPT_TIFINAGH      = 60, /* Tfng */
-      USCRIPT_OLD_PERSIAN   = 61, /* Xpeo */
-
-      /* New script codes from ISO 15924 @stable ICU 3.6 */
-      USCRIPT_BALINESE                      = 62, /* Bali */
-      USCRIPT_BATAK                         = 63, /* Batk */
-      USCRIPT_BLISSYMBOLS                   = 64, /* Blis */
-      USCRIPT_BRAHMI                        = 65, /* Brah */
-      USCRIPT_CHAM                          = 66, /* Cham */
-      USCRIPT_CIRTH                         = 67, /* Cirt */
-      USCRIPT_OLD_CHURCH_SLAVONIC_CYRILLIC  = 68, /* Cyrs */
-      USCRIPT_DEMOTIC_EGYPTIAN              = 69, /* Egyd */
-      USCRIPT_HIERATIC_EGYPTIAN             = 70, /* Egyh */
-      USCRIPT_EGYPTIAN_HIEROGLYPHS          = 71, /* Egyp */
-      USCRIPT_KHUTSURI                      = 72, /* Geok */
-      USCRIPT_SIMPLIFIED_HAN                = 73, /* Hans */
-      USCRIPT_TRADITIONAL_HAN               = 74, /* Hant */
-      USCRIPT_PAHAWH_HMONG                  = 75, /* Hmng */
-      USCRIPT_OLD_HUNGARIAN                 = 76, /* Hung */
-      USCRIPT_HARAPPAN_INDUS                = 77, /* Inds */
-      USCRIPT_JAVANESE                      = 78, /* Java */
-      USCRIPT_KAYAH_LI                      = 79, /* Kali */
-      USCRIPT_LATIN_FRAKTUR                 = 80, /* Latf */
-      USCRIPT_LATIN_GAELIC                  = 81, /* Latg */
-      USCRIPT_LEPCHA                        = 82, /* Lepc */
-      USCRIPT_LINEAR_A                      = 83, /* Lina */
-      /** @stable ICU 4.6 */
-      USCRIPT_MANDAIC                       = 84, /* Mand */
-      /** @stable ICU 3.6 */
-      USCRIPT_MANDAEAN                      = USCRIPT_MANDAIC,
-      USCRIPT_MAYAN_HIEROGLYPHS             = 85, /* Maya */
-      /** @stable ICU 4.6 */
-      USCRIPT_MEROITIC_HIEROGLYPHS          = 86, /* Mero */
-      /** @stable ICU 3.6 */
-      USCRIPT_MEROITIC                      = USCRIPT_MEROITIC_HIEROGLYPHS,
-      USCRIPT_NKO                           = 87, /* Nkoo */
-      USCRIPT_ORKHON                        = 88, /* Orkh */
-      USCRIPT_OLD_PERMIC                    = 89, /* Perm */
-      USCRIPT_PHAGS_PA                      = 90, /* Phag */
-      USCRIPT_PHOENICIAN                    = 91, /* Phnx */
-      USCRIPT_PHONETIC_POLLARD              = 92, /* Plrd */
-      USCRIPT_RONGORONGO                    = 93, /* Roro */
-      USCRIPT_SARATI                        = 94, /* Sara */
-      USCRIPT_ESTRANGELO_SYRIAC             = 95, /* Syre */
-      USCRIPT_WESTERN_SYRIAC                = 96, /* Syrj */
-      USCRIPT_EASTERN_SYRIAC                = 97, /* Syrn */
-      USCRIPT_TENGWAR                       = 98, /* Teng */
-      USCRIPT_VAI                           = 99, /* Vaii */
-      USCRIPT_VISIBLE_SPEECH                = 100,/* Visp */
-      USCRIPT_CUNEIFORM                     = 101,/* Xsux */
-      USCRIPT_UNWRITTEN_LANGUAGES           = 102,/* Zxxx */
-      USCRIPT_UNKNOWN                       = 103,/* Zzzz */ /* Unknown="Code for uncoded script", for unassigned code points */
-
-      /* New script codes from ISO 15924 @stable ICU 3.8 */
-      USCRIPT_CARIAN                        = 104,/* Cari */
-      USCRIPT_JAPANESE                      = 105,/* Jpan */
-      USCRIPT_LANNA                         = 106,/* Lana */
-      USCRIPT_LYCIAN                        = 107,/* Lyci */
-      USCRIPT_LYDIAN                        = 108,/* Lydi */
-      USCRIPT_OL_CHIKI                      = 109,/* Olck */
-      USCRIPT_REJANG                        = 110,/* Rjng */
-      USCRIPT_SAURASHTRA                    = 111,/* Saur */
-      USCRIPT_SIGN_WRITING                  = 112,/* Sgnw */
-      USCRIPT_SUNDANESE                     = 113,/* Sund */
-      USCRIPT_MOON                          = 114,/* Moon */
-      USCRIPT_MEITEI_MAYEK                  = 115,/* Mtei */
-
-      /* New script codes from ISO 15924 @stable ICU 4.0 */
-      USCRIPT_IMPERIAL_ARAMAIC              = 116,/* Armi */
-      USCRIPT_AVESTAN                       = 117,/* Avst */
-      USCRIPT_CHAKMA                        = 118,/* Cakm */
-      USCRIPT_KOREAN                        = 119,/* Kore */
-      USCRIPT_KAITHI                        = 120,/* Kthi */
-      USCRIPT_MANICHAEAN                    = 121,/* Mani */
-      USCRIPT_INSCRIPTIONAL_PAHLAVI         = 122,/* Phli */
-      USCRIPT_PSALTER_PAHLAVI               = 123,/* Phlp */
-      USCRIPT_BOOK_PAHLAVI                  = 124,/* Phlv */
-      USCRIPT_INSCRIPTIONAL_PARTHIAN        = 125,/* Prti */
-      USCRIPT_SAMARITAN                     = 126,/* Samr */
-      USCRIPT_TAI_VIET                      = 127,/* Tavt */
-      USCRIPT_MATHEMATICAL_NOTATION         = 128,/* Zmth */
-      USCRIPT_SYMBOLS                       = 129,/* Zsym */
-
-      /* New script codes from ISO 15924 @stable ICU 4.4 */
-      USCRIPT_BAMUM                         = 130,/* Bamu */
-      USCRIPT_LISU                          = 131,/* Lisu */
-      USCRIPT_NAKHI_GEBA                    = 132,/* Nkgb */
-      USCRIPT_OLD_SOUTH_ARABIAN             = 133,/* Sarb */
-
-      /* New script codes from ISO 15924 @stable ICU 4.6 */
-      USCRIPT_BASSA_VAH                     = 134,/* Bass */
-      USCRIPT_DUPLOYAN_SHORTAND             = 135,/* Dupl */
-      USCRIPT_ELBASAN                       = 136,/* Elba */
-      USCRIPT_GRANTHA                       = 137,/* Gran */
-      USCRIPT_KPELLE                        = 138,/* Kpel */
-      USCRIPT_LOMA                          = 139,/* Loma */
-      USCRIPT_MENDE                         = 140,/* Mend */
-      USCRIPT_MEROITIC_CURSIVE              = 141,/* Merc */
-      USCRIPT_OLD_NORTH_ARABIAN             = 142,/* Narb */
-      USCRIPT_NABATAEAN                     = 143,/* Nbat */
-      USCRIPT_PALMYRENE                     = 144,/* Palm */
-      USCRIPT_SINDHI                        = 145,/* Sind */
-      USCRIPT_WARANG_CITI                   = 146,/* Wara */
-
-      /* Private use codes from Qaaa - Qabx are not supported */
-      USCRIPT_CODE_LIMIT    = 147
-} UScriptCode;
-
-/**
- * Gets script codes associated with the given locale or ISO 15924 abbreviation or name. 
- * Fills in USCRIPT_MALAYALAM given "Malayam" OR "Mlym".
- * Fills in USCRIPT_LATIN given "en" OR "en_US" 
- * If required capacity is greater than capacity of the destination buffer then the error code
- * is set to U_BUFFER_OVERFLOW_ERROR and the required capacity is returned
- *
- * <p>Note: To search by short or long script alias only, use
- * u_getPropertyValueEnum(UCHAR_SCRIPT, alias) instead.  This does
- * a fast lookup with no access of the locale data.
- * @param nameOrAbbrOrLocale name of the script, as given in
- * PropertyValueAliases.txt, or ISO 15924 code or locale
- * @param fillIn the UScriptCode buffer to fill in the script code
- * @param capacity the capacity (size) fo UScriptCode buffer passed in.
- * @param err the error status code.
- * @return The number of script codes filled in the buffer passed in 
- * @stable ICU 2.4
- */
-U_STABLE int32_t  U_EXPORT2 
-uscript_getCode(const char* nameOrAbbrOrLocale,UScriptCode* fillIn,int32_t capacity,UErrorCode *err);
-
-/**
- * Gets a script name associated with the given script code. 
- * Returns  "Malayam" given USCRIPT_MALAYALAM
- * @param scriptCode UScriptCode enum
- * @return script long name as given in
- * PropertyValueAliases.txt, or NULL if scriptCode is invalid
- * @stable ICU 2.4
- */
-U_STABLE const char*  U_EXPORT2 
-uscript_getName(UScriptCode scriptCode);
-
-/**
- * Gets a script name associated with the given script code. 
- * Returns  "Mlym" given USCRIPT_MALAYALAM
- * @param scriptCode UScriptCode enum
- * @return script abbreviated name as given in
- * PropertyValueAliases.txt, or NULL if scriptCode is invalid
- * @stable ICU 2.4
- */
-U_STABLE const char*  U_EXPORT2 
-uscript_getShortName(UScriptCode scriptCode);
-
-/**
- * Gets the script code associated with the given codepoint.
- * Returns USCRIPT_MALAYALAM given 0x0D02 
- * @param codepoint UChar32 codepoint
- * @param err the error status code.
- * @return The UScriptCode, or 0 if codepoint is invalid 
- * @stable ICU 2.4
- */
-U_STABLE UScriptCode  U_EXPORT2 
-uscript_getScript(UChar32 codepoint, UErrorCode *err);
-
-/**
- * Is code point c used in script sc?
- * That is, does code point c have the Script property value sc,
- * or do code point c's Script_Extensions include script code sc?
- *
- * Some characters are commonly used in multiple scripts.
- * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
- *
- * The Script_Extensions property is provisional. It may be modified or removed
- * in future versions of the Unicode Standard, and thus in ICU.
- * @param c code point
- * @param sc script code
- * @return TRUE if Script(c)==sc or sc is in Script_Extensions(c)
- * @draft ICU 4.6
- */
-U_DRAFT UBool U_EXPORT2
-uscript_hasScript(UChar32 c, UScriptCode sc);
-
-/**
- * Writes code point c's Script_Extensions as a list of UScriptCode values
- * to the output scripts array.
- *
- * Some characters are commonly used in multiple scripts.
- * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
- *
- * If there are more than capacity script codes to be written, then
- * U_BUFFER_OVERFLOW_ERROR is set and the number of Script_Extensions is returned.
- * (Usual ICU buffer handling behavior.)
- *
- * The Script_Extensions property is provisional. It may be modified or removed
- * in future versions of the Unicode Standard, and thus in ICU.
- * @param c code point
- * @param scripts output script code array
- * @param capacity capacity of the scripts array
- * @param errorCode 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 number of script codes in c's Script_Extensions,
- *         written to scripts unless U_BUFFER_OVERFLOW_ERROR indicates insufficient capacity
- * @draft ICU 4.6
- */
-U_DRAFT int32_t U_EXPORT2
-uscript_getScriptExtensions(UChar32 c,
-                            UScriptCode *scripts, int32_t capacity,
-                            UErrorCode *pErrorCode);
-
-#endif
diff --git a/source/common/unicode/uset.h b/source/common/unicode/uset.h
deleted file mode 100644
index 77ab063..0000000
--- a/source/common/unicode/uset.h
+++ /dev/null
@@ -1,1120 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  uset.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002mar07
-*   created by: Markus W. Scherer
-*
-*   C version of UnicodeSet.
-*/
-
-
-/**
- * \file
- * \brief C API: Unicode Set
- *
- * <p>This is a C wrapper around the C++ UnicodeSet class.</p>
- */
-
-#ifndef __USET_H__
-#define __USET_H__
-
-#include "unicode/utypes.h"
-#include "unicode/uchar.h"
-#include "unicode/localpointer.h"
-
-#ifndef UCNV_H
-struct USet;
-/**
- * A UnicodeSet.  Use the uset_* API to manipulate.  Create with
- * uset_open*, and destroy with uset_close.
- * @stable ICU 2.4
- */
-typedef struct USet USet;
-#endif
-
-/**
- * Bitmask values to be passed to uset_openPatternOptions() or
- * uset_applyPattern() taking an option parameter.
- * @stable ICU 2.4
- */
-enum {
-    /**
-     * Ignore white space within patterns unless quoted or escaped.
-     * @stable ICU 2.4
-     */
-    USET_IGNORE_SPACE = 1,  
-
-    /**
-     * Enable case insensitive matching.  E.g., "[ab]" with this flag
-     * will match 'a', 'A', 'b', and 'B'.  "[^ab]" with this flag will
-     * match all except 'a', 'A', 'b', and 'B'. This performs a full
-     * closure over case mappings, e.g. U+017F for s.
-     *
-     * The resulting set is a superset of the input for the code points but
-     * not for the strings.
-     * It performs a case mapping closure of the code points and adds
-     * full case folding strings for the code points, and reduces strings of
-     * the original set to their full case folding equivalents.
-     *
-     * This is designed for case-insensitive matches, for example
-     * in regular expressions. The full code point case closure allows checking of
-     * an input character directly against the closure set.
-     * Strings are matched by comparing the case-folded form from the closure
-     * set with an incremental case folding of the string in question.
-     *
-     * The closure set will also contain single code points if the original
-     * set contained case-equivalent strings (like U+00DF for "ss" or "Ss" etc.).
-     * This is not necessary (that is, redundant) for the above matching method
-     * but results in the same closure sets regardless of whether the original
-     * set contained the code point or a string.
-     *
-     * @stable ICU 2.4
-     */
-    USET_CASE_INSENSITIVE = 2,  
-
-    /**
-     * Enable case insensitive matching.  E.g., "[ab]" with this flag
-     * will match 'a', 'A', 'b', and 'B'.  "[^ab]" with this flag will
-     * match all except 'a', 'A', 'b', and 'B'. This adds the lower-,
-     * title-, and uppercase mappings as well as the case folding
-     * of each existing element in the set.
-     * @stable ICU 3.2
-     */
-    USET_ADD_CASE_MAPPINGS = 4,
-    
-    /**
-     * Enough for any single-code point set
-     * @internal
-     */
-    USET_SERIALIZED_STATIC_ARRAY_CAPACITY=8
-};
-
-/**
- * Argument values for whether span() and similar functions continue while
- * the current character is contained vs. not contained in the set.
- *
- * The functionality is straightforward for sets with only single code points,
- * without strings (which is the common case):
- * - USET_SPAN_CONTAINED and USET_SPAN_SIMPLE
- *   work the same.
- * - span() and spanBack() partition any string the same way when
- *   alternating between span(USET_SPAN_NOT_CONTAINED) and
- *   span(either "contained" condition).
- * - Using a complemented (inverted) set and the opposite span conditions
- *   yields the same results.
- *
- * When a set contains multi-code point strings, then these statements may not
- * be true, depending on the strings in the set (for example, whether they
- * overlap with each other) and the string that is processed.
- * For a set with strings:
- * - The complement of the set contains the opposite set of code points,
- *   but the same set of strings.
- *   Therefore, complementing both the set and the span conditions
- *   may yield different results.
- * - When starting spans at different positions in a string
- *   (span(s, ...) vs. span(s+1, ...)) the ends of the spans may be different
- *   because a set string may start before the later position.
- * - span(USET_SPAN_SIMPLE) may be shorter than
- *   span(USET_SPAN_CONTAINED) because it will not recursively try
- *   all possible paths.
- *   For example, with a set which contains the three strings "xy", "xya" and "ax",
- *   span("xyax", USET_SPAN_CONTAINED) will return 4 but
- *   span("xyax", USET_SPAN_SIMPLE) will return 3.
- *   span(USET_SPAN_SIMPLE) will never be longer than
- *   span(USET_SPAN_CONTAINED).
- * - With either "contained" condition, span() and spanBack() may partition
- *   a string in different ways.
- *   For example, with a set which contains the two strings "ab" and "ba",
- *   and when processing the string "aba",
- *   span() will yield contained/not-contained boundaries of { 0, 2, 3 }
- *   while spanBack() will yield boundaries of { 0, 1, 3 }.
- *
- * Note: If it is important to get the same boundaries whether iterating forward
- * or backward through a string, then either only span() should be used and
- * the boundaries cached for backward operation, or an ICU BreakIterator
- * could be used.
- *
- * Note: Unpaired surrogates are treated like surrogate code points.
- * Similarly, set strings match only on code point boundaries,
- * never in the middle of a surrogate pair.
- * Illegal UTF-8 sequences are treated like U+FFFD.
- * When processing UTF-8 strings, malformed set strings
- * (strings with unpaired surrogates which cannot be converted to UTF-8)
- * are ignored.
- *
- * @stable ICU 3.8
- */
-typedef enum USetSpanCondition {
-    /**
-     * Continue a span() while there is no set element at the current position.
-     * Stops before the first set element (character or string).
-     * (For code points only, this is like while contains(current)==FALSE).
-     *
-     * When span() returns, the substring between where it started and the position
-     * it returned consists only of characters that are not in the set,
-     * and none of its strings overlap with the span.
-     *
-     * @stable ICU 3.8
-     */
-    USET_SPAN_NOT_CONTAINED = 0,
-    /**
-     * Continue a span() while there is a set element at the current position.
-     * (For characters only, this is like while contains(current)==TRUE).
-     *
-     * When span() returns, the substring between where it started and the position
-     * it returned consists only of set elements (characters or strings) that are in the set.
-     *
-     * If a set contains strings, then the span will be the longest substring
-     * matching any of the possible concatenations of set elements (characters or strings).
-     * (There must be a single, non-overlapping concatenation of characters or strings.)
-     * This is equivalent to a POSIX regular expression for (OR of each set element)*.
-     *
-     * @stable ICU 3.8
-     */
-    USET_SPAN_CONTAINED = 1,
-    /**
-     * Continue a span() while there is a set element at the current position.
-     * (For characters only, this is like while contains(current)==TRUE).
-     *
-     * When span() returns, the substring between where it started and the position
-     * it returned consists only of set elements (characters or strings) that are in the set.
-     *
-     * If a set only contains single characters, then this is the same
-     * as USET_SPAN_CONTAINED.
-     *
-     * If a set contains strings, then the span will be the longest substring
-     * with a match at each position with the longest single set element (character or string).
-     *
-     * Use this span condition together with other longest-match algorithms,
-     * such as ICU converters (ucnv_getUnicodeSet()).
-     *
-     * @stable ICU 3.8
-     */
-    USET_SPAN_SIMPLE = 2,
-    /**
-     * One more than the last span condition.
-     * @stable ICU 3.8
-     */
-    USET_SPAN_CONDITION_COUNT
-} USetSpanCondition;
-
-/**
- * A serialized form of a Unicode set.  Limited manipulations are
- * possible directly on a serialized set.  See below.
- * @stable ICU 2.4
- */
-typedef struct USerializedSet {
-    /**
-     * The serialized Unicode Set.
-     * @stable ICU 2.4
-     */
-    const uint16_t *array;
-    /**
-     * The length of the array that contains BMP characters.
-     * @stable ICU 2.4
-     */
-    int32_t bmpLength;
-    /**
-     * The total length of the array.
-     * @stable ICU 2.4
-     */
-    int32_t length;
-    /**
-     * A small buffer for the array to reduce memory allocations.
-     * @stable ICU 2.4
-     */
-    uint16_t staticArray[USET_SERIALIZED_STATIC_ARRAY_CAPACITY];
-} USerializedSet;
-
-/*********************************************************************
- * USet API
- *********************************************************************/
-
-/**
- * Create an empty USet object.
- * Equivalent to uset_open(1, 0).
- * @return a newly created USet.  The caller must call uset_close() on
- * it when done.
- * @stable ICU 4.2
- */
-U_STABLE USet* U_EXPORT2
-uset_openEmpty();
-
-/**
- * Creates a USet object that contains the range of characters
- * start..end, inclusive.  If <code>start > end</code> 
- * then an empty set is created (same as using uset_openEmpty()).
- * @param start first character of the range, inclusive
- * @param end last character of the range, inclusive
- * @return a newly created USet.  The caller must call uset_close() on
- * it when done.
- * @stable ICU 2.4
- */
-U_STABLE USet* U_EXPORT2
-uset_open(UChar32 start, UChar32 end);
-
-/**
- * Creates a set from the given pattern.  See the UnicodeSet class
- * description for the syntax of the pattern language.
- * @param pattern a string specifying what characters are in the set
- * @param patternLength the length of the pattern, or -1 if null
- * terminated
- * @param ec the error code
- * @stable ICU 2.4
- */
-U_STABLE USet* U_EXPORT2
-uset_openPattern(const UChar* pattern, int32_t patternLength,
-                 UErrorCode* ec);
-
-/**
- * Creates a set from the given pattern.  See the UnicodeSet class
- * description for the syntax of the pattern language.
- * @param pattern a string specifying what characters are in the set
- * @param patternLength the length of the pattern, or -1 if null
- * terminated
- * @param options bitmask for options to apply to the pattern.
- * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
- * @param ec the error code
- * @stable ICU 2.4
- */
-U_STABLE USet* U_EXPORT2
-uset_openPatternOptions(const UChar* pattern, int32_t patternLength,
-                 uint32_t options,
-                 UErrorCode* ec);
-
-/**
- * Disposes of the storage used by a USet object.  This function should
- * be called exactly once for objects returned by uset_open().
- * @param set the object to dispose of
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_close(USet* set);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUSetPointer
- * "Smart pointer" class, closes a USet via uset_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUSetPointer, USet, uset_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Returns a copy of this object.
- * If this set is frozen, then the clone will be frozen as well.
- * Use uset_cloneAsThawed() for a mutable clone of a frozen set.
- * @param set the original set
- * @return the newly allocated copy of the set
- * @see uset_cloneAsThawed
- * @stable ICU 3.8
- */
-U_STABLE USet * U_EXPORT2
-uset_clone(const USet *set);
-
-/**
- * Determines whether the set has been frozen (made immutable) or not.
- * See the ICU4J Freezable interface for details.
- * @param set the set
- * @return TRUE/FALSE for whether the set has been frozen
- * @see uset_freeze
- * @see uset_cloneAsThawed
- * @stable ICU 3.8
- */
-U_STABLE UBool U_EXPORT2
-uset_isFrozen(const USet *set);
-
-/**
- * Freeze the set (make it immutable).
- * Once frozen, it cannot be unfrozen and is therefore thread-safe
- * until it is deleted.
- * See the ICU4J Freezable interface for details.
- * Freezing the set may also make some operations faster, for example
- * uset_contains() and uset_span().
- * A frozen set will not be modified. (It remains frozen.)
- * @param set the set
- * @return the same set, now frozen
- * @see uset_isFrozen
- * @see uset_cloneAsThawed
- * @stable ICU 3.8
- */
-U_STABLE void U_EXPORT2
-uset_freeze(USet *set);
-
-/**
- * Clone the set and make the clone mutable.
- * See the ICU4J Freezable interface for details.
- * @param set the set
- * @return the mutable clone
- * @see uset_freeze
- * @see uset_isFrozen
- * @see uset_clone
- * @stable ICU 3.8
- */
-U_STABLE USet * U_EXPORT2
-uset_cloneAsThawed(const USet *set);
-
-/**
- * Causes the USet object to represent the range <code>start - end</code>.
- * If <code>start > end</code> then this USet is set to an empty range.
- * A frozen set will not be modified.
- * @param set the object to set to the given range
- * @param start first character in the set, inclusive
- * @param end last character in the set, inclusive
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_set(USet* set,
-         UChar32 start, UChar32 end);
-
-/**
- * Modifies the set to represent the set specified by the given
- * pattern. See the UnicodeSet class description for the syntax of 
- * the pattern language. See also the User Guide chapter about UnicodeSet.
- * <em>Empties the set passed before applying the pattern.</em>
- * A frozen set will not be modified.
- * @param set               The set to which the pattern is to be applied. 
- * @param pattern           A pointer to UChar string specifying what characters are in the set.
- *                          The character at pattern[0] must be a '['.
- * @param patternLength     The length of the UChar string. -1 if NUL terminated.
- * @param options           A bitmask for options to apply to the pattern.
- *                          Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
- * @param status            Returns an error if the pattern cannot be parsed.
- * @return                  Upon successful parse, the value is either
- *                          the index of the character after the closing ']' 
- *                          of the parsed pattern.
- *                          If the status code indicates failure, then the return value 
- *                          is the index of the error in the source.
- *
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2 
-uset_applyPattern(USet *set,
-                  const UChar *pattern, int32_t patternLength,
-                  uint32_t options,
-                  UErrorCode *status);
-
-/**
- * Modifies the set to contain those code points which have the given value
- * for the given binary or enumerated property, as returned by
- * u_getIntPropertyValue.  Prior contents of this set are lost.
- * A frozen set will not be modified.
- *
- * @param set the object to contain the code points defined by the property
- *
- * @param prop a property in the range UCHAR_BIN_START..UCHAR_BIN_LIMIT-1
- * or UCHAR_INT_START..UCHAR_INT_LIMIT-1
- * or UCHAR_MASK_START..UCHAR_MASK_LIMIT-1.
- *
- * @param value a value in the range u_getIntPropertyMinValue(prop)..
- * u_getIntPropertyMaxValue(prop), with one exception.  If prop is
- * UCHAR_GENERAL_CATEGORY_MASK, then value should not be a UCharCategory, but
- * rather a mask value produced by U_GET_GC_MASK().  This allows grouped
- * categories such as [:L:] to be represented.
- *
- * @param ec error code input/output parameter
- *
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_applyIntPropertyValue(USet* set,
-                           UProperty prop, int32_t value, UErrorCode* ec);
-
-/**
- * Modifies the set to contain those code points which have the
- * given value for the given property.  Prior contents of this
- * set are lost.
- * A frozen set will not be modified.
- *
- * @param set the object to contain the code points defined by the given
- * property and value alias
- *
- * @param prop a string specifying a property alias, either short or long.
- * The name is matched loosely.  See PropertyAliases.txt for names and a
- * description of loose matching.  If the value string is empty, then this
- * string is interpreted as either a General_Category value alias, a Script
- * value alias, a binary property alias, or a special ID.  Special IDs are
- * matched loosely and correspond to the following sets:
- *
- * "ANY" = [\\u0000-\\U0010FFFF],
- * "ASCII" = [\\u0000-\\u007F],
- * "Assigned" = [:^Cn:].
- *
- * @param propLength the length of the prop, or -1 if NULL
- *
- * @param value a string specifying a value alias, either short or long.
- * The name is matched loosely.  See PropertyValueAliases.txt for names
- * and a description of loose matching.  In addition to aliases listed,
- * numeric values and canonical combining classes may be expressed
- * numerically, e.g., ("nv", "0.5") or ("ccc", "220").  The value string
- * may also be empty.
- *
- * @param valueLength the length of the value, or -1 if NULL
- *
- * @param ec error code input/output parameter
- *
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_applyPropertyAlias(USet* set,
-                        const UChar *prop, int32_t propLength,
-                        const UChar *value, int32_t valueLength,
-                        UErrorCode* ec);
-
-/**
- * Return true if the given position, in the given pattern, appears
- * to be the start of a UnicodeSet pattern.
- *
- * @param pattern a string specifying the pattern
- * @param patternLength the length of the pattern, or -1 if NULL
- * @param pos the given position
- * @stable ICU 3.2
- */
-U_STABLE UBool U_EXPORT2
-uset_resemblesPattern(const UChar *pattern, int32_t patternLength,
-                      int32_t pos);
-
-/**
- * Returns a string representation of this set.  If the result of
- * calling this function is passed to a uset_openPattern(), it
- * will produce another set that is equal to this one.
- * @param set the set
- * @param result the string to receive the rules, may be NULL
- * @param resultCapacity the capacity of result, may be 0 if result is NULL
- * @param escapeUnprintable if TRUE then convert unprintable
- * character to their hex escape representations, \\uxxxx or
- * \\Uxxxxxxxx.  Unprintable characters are those other than
- * U+000A, U+0020..U+007E.
- * @param ec error code.
- * @return length of string, possibly larger than resultCapacity
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-uset_toPattern(const USet* set,
-               UChar* result, int32_t resultCapacity,
-               UBool escapeUnprintable,
-               UErrorCode* ec);
-
-/**
- * Adds the given character to the given USet.  After this call,
- * uset_contains(set, c) will return TRUE.
- * A frozen set will not be modified.
- * @param set the object to which to add the character
- * @param c the character to add
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_add(USet* set, UChar32 c);
-
-/**
- * Adds all of the elements in the specified set to this set if
- * they're not already present.  This operation effectively
- * modifies this set so that its value is the <i>union</i> of the two
- * sets.  The behavior of this operation is unspecified if the specified
- * collection is modified while the operation is in progress.
- * A frozen set will not be modified.
- *
- * @param set the object to which to add the set
- * @param additionalSet the source set whose elements are to be added to this set.
- * @stable ICU 2.6
- */
-U_STABLE void U_EXPORT2
-uset_addAll(USet* set, const USet *additionalSet);
-
-/**
- * Adds the given range of characters to the given USet.  After this call,
- * uset_contains(set, start, end) will return TRUE.
- * A frozen set will not be modified.
- * @param set the object to which to add the character
- * @param start the first character of the range to add, inclusive
- * @param end the last character of the range to add, inclusive
- * @stable ICU 2.2
- */
-U_STABLE void U_EXPORT2
-uset_addRange(USet* set, UChar32 start, UChar32 end);
-
-/**
- * Adds the given string to the given USet.  After this call,
- * uset_containsString(set, str, strLen) will return TRUE.
- * A frozen set will not be modified.
- * @param set the object to which to add the character
- * @param str the string to add
- * @param strLen the length of the string or -1 if null terminated.
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_addString(USet* set, const UChar* str, int32_t strLen);
-
-/**
- * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"}
- * If this set already any particular character, it has no effect on that character.
- * A frozen set will not be modified.
- * @param set the object to which to add the character
- * @param str the source string
- * @param strLen the length of the string or -1 if null terminated.
- * @stable ICU 3.4
- */
-U_STABLE void U_EXPORT2
-uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen);
-
-/**
- * Removes the given character from the given USet.  After this call,
- * uset_contains(set, c) will return FALSE.
- * A frozen set will not be modified.
- * @param set the object from which to remove the character
- * @param c the character to remove
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_remove(USet* set, UChar32 c);
-
-/**
- * Removes the given range of characters from the given USet.  After this call,
- * uset_contains(set, start, end) will return FALSE.
- * A frozen set will not be modified.
- * @param set the object to which to add the character
- * @param start the first character of the range to remove, inclusive
- * @param end the last character of the range to remove, inclusive
- * @stable ICU 2.2
- */
-U_STABLE void U_EXPORT2
-uset_removeRange(USet* set, UChar32 start, UChar32 end);
-
-/**
- * Removes the given string to the given USet.  After this call,
- * uset_containsString(set, str, strLen) will return FALSE.
- * A frozen set will not be modified.
- * @param set the object to which to add the character
- * @param str the string to remove
- * @param strLen the length of the string or -1 if null terminated.
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_removeString(USet* set, const UChar* str, int32_t strLen);
-
-/**
- * Removes from this set all of its elements that are contained in the
- * specified set.  This operation effectively modifies this
- * set so that its value is the <i>asymmetric set difference</i> of
- * the two sets.
- * A frozen set will not be modified.
- * @param set the object from which the elements are to be removed
- * @param removeSet the object that defines which elements will be
- * removed from this set
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_removeAll(USet* set, const USet* removeSet);
-
-/**
- * Retain only the elements in this set that are contained in the
- * specified range.  If <code>start > end</code> then an empty range is
- * retained, leaving the set empty.  This is equivalent to
- * a boolean logic AND, or a set INTERSECTION.
- * A frozen set will not be modified.
- *
- * @param set the object for which to retain only the specified range
- * @param start first character, inclusive, of range to be retained
- * to this set.
- * @param end last character, inclusive, of range to be retained
- * to this set.
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_retain(USet* set, UChar32 start, UChar32 end);
-
-/**
- * Retains only the elements in this set that are contained in the
- * specified set.  In other words, removes from this set all of
- * its elements that are not contained in the specified set.  This
- * operation effectively modifies this set so that its value is
- * the <i>intersection</i> of the two sets.
- * A frozen set will not be modified.
- *
- * @param set the object on which to perform the retain
- * @param retain set that defines which elements this set will retain
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_retainAll(USet* set, const USet* retain);
-
-/**
- * Reallocate this objects internal structures to take up the least
- * possible space, without changing this object's value.
- * A frozen set will not be modified.
- *
- * @param set the object on which to perfrom the compact
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_compact(USet* set);
-
-/**
- * Inverts this set.  This operation modifies this set so that
- * its value is its complement.  This operation does not affect
- * the multicharacter strings, if any.
- * A frozen set will not be modified.
- * @param set the set
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_complement(USet* set);
-
-/**
- * Complements in this set all elements contained in the specified
- * set.  Any character in the other set will be removed if it is
- * in this set, or will be added if it is not in this set.
- * A frozen set will not be modified.
- *
- * @param set the set with which to complement
- * @param complement set that defines which elements will be xor'ed
- * from this set.
- * @stable ICU 3.2
- */
-U_STABLE void U_EXPORT2
-uset_complementAll(USet* set, const USet* complement);
-
-/**
- * Removes all of the elements from this set.  This set will be
- * empty after this call returns.
- * A frozen set will not be modified.
- * @param set the set
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_clear(USet* set);
-
-/**
- * Close this set over the given attribute.  For the attribute
- * USET_CASE, the result is to modify this set so that:
- *
- * 1. For each character or string 'a' in this set, all strings or
- * characters 'b' such that foldCase(a) == foldCase(b) are added
- * to this set.
- *
- * 2. For each string 'e' in the resulting set, if e !=
- * foldCase(e), 'e' will be removed.
- *
- * Example: [aq\\u00DF{Bc}{bC}{Fi}] => [aAqQ\\u00DF\\uFB01{ss}{bc}{fi}]
- *
- * (Here foldCase(x) refers to the operation u_strFoldCase, and a
- * == b denotes that the contents are the same, not pointer
- * comparison.)
- *
- * A frozen set will not be modified.
- *
- * @param set the set
- *
- * @param attributes bitmask for attributes to close over.
- * Currently only the USET_CASE bit is supported.  Any undefined bits
- * are ignored.
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-uset_closeOver(USet* set, int32_t attributes);
-
-/**
- * Remove all strings from this set.
- *
- * @param set the set
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-uset_removeAllStrings(USet* set);
-
-/**
- * Returns TRUE if the given USet contains no characters and no
- * strings.
- * @param set the set
- * @return true if set is empty
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-uset_isEmpty(const USet* set);
-
-/**
- * Returns TRUE if the given USet contains the given character.
- * This function works faster with a frozen set.
- * @param set the set
- * @param c The codepoint to check for within the set
- * @return true if set contains c
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-uset_contains(const USet* set, UChar32 c);
-
-/**
- * Returns TRUE if the given USet contains all characters c
- * where start <= c && c <= end.
- * @param set the set
- * @param start the first character of the range to test, inclusive
- * @param end the last character of the range to test, inclusive
- * @return TRUE if set contains the range
- * @stable ICU 2.2
- */
-U_STABLE UBool U_EXPORT2
-uset_containsRange(const USet* set, UChar32 start, UChar32 end);
-
-/**
- * Returns TRUE if the given USet contains the given string.
- * @param set the set
- * @param str the string
- * @param strLen the length of the string or -1 if null terminated.
- * @return true if set contains str
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-uset_containsString(const USet* set, const UChar* str, int32_t strLen);
-
-/**
- * Returns the index of the given character within this set, where
- * the set is ordered by ascending code point.  If the character
- * is not in this set, return -1.  The inverse of this method is
- * <code>charAt()</code>.
- * @param set the set
- * @param c the character to obtain the index for
- * @return an index from 0..size()-1, or -1
- * @stable ICU 3.2
- */
-U_STABLE int32_t U_EXPORT2
-uset_indexOf(const USet* set, UChar32 c);
-
-/**
- * Returns the character at the given index within this set, where
- * the set is ordered by ascending code point.  If the index is
- * out of range, return (UChar32)-1.  The inverse of this method is
- * <code>indexOf()</code>.
- * @param set the set
- * @param charIndex an index from 0..size()-1 to obtain the char for
- * @return the character at the given index, or (UChar32)-1.
- * @stable ICU 3.2
- */
-U_STABLE UChar32 U_EXPORT2
-uset_charAt(const USet* set, int32_t charIndex);
-
-/**
- * Returns the number of characters and strings contained in the given
- * USet.
- * @param set the set
- * @return a non-negative integer counting the characters and strings
- * contained in set
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-uset_size(const USet* set);
-
-/**
- * Returns the number of items in this set.  An item is either a range
- * of characters or a single multicharacter string.
- * @param set the set
- * @return a non-negative integer counting the character ranges
- * and/or strings contained in set
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-uset_getItemCount(const USet* set);
-
-/**
- * Returns an item of this set.  An item is either a range of
- * characters or a single multicharacter string.
- * @param set the set
- * @param itemIndex a non-negative integer in the range 0..
- * uset_getItemCount(set)-1
- * @param start pointer to variable to receive first character
- * in range, inclusive
- * @param end pointer to variable to receive last character in range,
- * inclusive
- * @param str buffer to receive the string, may be NULL
- * @param strCapacity capacity of str, or 0 if str is NULL
- * @param ec error code
- * @return the length of the string (>= 2), or 0 if the item is a
- * range, in which case it is the range *start..*end, or -1 if
- * itemIndex is out of range
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-uset_getItem(const USet* set, int32_t itemIndex,
-             UChar32* start, UChar32* end,
-             UChar* str, int32_t strCapacity,
-             UErrorCode* ec);
-
-/**
- * Returns true if set1 contains all the characters and strings
- * of set2. It answers the question, 'Is set1 a superset of set2?'
- * @param set1 set to be checked for containment
- * @param set2 set to be checked for containment
- * @return true if the test condition is met
- * @stable ICU 3.2
- */
-U_STABLE UBool U_EXPORT2
-uset_containsAll(const USet* set1, const USet* set2);
-
-/**
- * Returns true if this set contains all the characters
- * of the given string. This is does not check containment of grapheme
- * clusters, like uset_containsString.
- * @param set set of characters to be checked for containment
- * @param str string containing codepoints to be checked for containment
- * @param strLen the length of the string or -1 if null terminated.
- * @return true if the test condition is met
- * @stable ICU 3.4
- */
-U_STABLE UBool U_EXPORT2
-uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen);
-
-/**
- * Returns true if set1 contains none of the characters and strings
- * of set2. It answers the question, 'Is set1 a disjoint set of set2?'
- * @param set1 set to be checked for containment
- * @param set2 set to be checked for containment
- * @return true if the test condition is met
- * @stable ICU 3.2
- */
-U_STABLE UBool U_EXPORT2
-uset_containsNone(const USet* set1, const USet* set2);
-
-/**
- * Returns true if set1 contains some of the characters and strings
- * of set2. It answers the question, 'Does set1 and set2 have an intersection?'
- * @param set1 set to be checked for containment
- * @param set2 set to be checked for containment
- * @return true if the test condition is met
- * @stable ICU 3.2
- */
-U_STABLE UBool U_EXPORT2
-uset_containsSome(const USet* set1, const USet* set2);
-
-/**
- * Returns the length of the initial substring of the input string which
- * consists only of characters and strings that are contained in this set
- * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
- * or only of characters and strings that are not contained
- * in this set (USET_SPAN_NOT_CONTAINED).
- * See USetSpanCondition for details.
- * Similar to the strspn() C library function.
- * Unpaired surrogates are treated according to contains() of their surrogate code points.
- * This function works faster with a frozen set and with a non-negative string length argument.
- * @param set the set
- * @param s start of the string
- * @param length of the string; can be -1 for NUL-terminated
- * @param spanCondition specifies the containment condition
- * @return the length of the initial substring according to the spanCondition;
- *         0 if the start of the string does not fit the spanCondition
- * @stable ICU 3.8
- * @see USetSpanCondition
- */
-U_STABLE int32_t U_EXPORT2
-uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition);
-
-/**
- * Returns the start of the trailing substring of the input string which
- * consists only of characters and strings that are contained in this set
- * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
- * or only of characters and strings that are not contained
- * in this set (USET_SPAN_NOT_CONTAINED).
- * See USetSpanCondition for details.
- * Unpaired surrogates are treated according to contains() of their surrogate code points.
- * This function works faster with a frozen set and with a non-negative string length argument.
- * @param set the set
- * @param s start of the string
- * @param length of the string; can be -1 for NUL-terminated
- * @param spanCondition specifies the containment condition
- * @return the start of the trailing substring according to the spanCondition;
- *         the string length if the end of the string does not fit the spanCondition
- * @stable ICU 3.8
- * @see USetSpanCondition
- */
-U_STABLE int32_t U_EXPORT2
-uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition);
-
-/**
- * Returns the length of the initial substring of the input string which
- * consists only of characters and strings that are contained in this set
- * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
- * or only of characters and strings that are not contained
- * in this set (USET_SPAN_NOT_CONTAINED).
- * See USetSpanCondition for details.
- * Similar to the strspn() C library function.
- * Malformed byte sequences are treated according to contains(0xfffd).
- * This function works faster with a frozen set and with a non-negative string length argument.
- * @param set the set
- * @param s start of the string (UTF-8)
- * @param length of the string; can be -1 for NUL-terminated
- * @param spanCondition specifies the containment condition
- * @return the length of the initial substring according to the spanCondition;
- *         0 if the start of the string does not fit the spanCondition
- * @stable ICU 3.8
- * @see USetSpanCondition
- */
-U_STABLE int32_t U_EXPORT2
-uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition);
-
-/**
- * Returns the start of the trailing substring of the input string which
- * consists only of characters and strings that are contained in this set
- * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
- * or only of characters and strings that are not contained
- * in this set (USET_SPAN_NOT_CONTAINED).
- * See USetSpanCondition for details.
- * Malformed byte sequences are treated according to contains(0xfffd).
- * This function works faster with a frozen set and with a non-negative string length argument.
- * @param set the set
- * @param s start of the string (UTF-8)
- * @param length of the string; can be -1 for NUL-terminated
- * @param spanCondition specifies the containment condition
- * @return the start of the trailing substring according to the spanCondition;
- *         the string length if the end of the string does not fit the spanCondition
- * @stable ICU 3.8
- * @see USetSpanCondition
- */
-U_STABLE int32_t U_EXPORT2
-uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition);
-
-/**
- * Returns true if set1 contains all of the characters and strings
- * of set2, and vis versa. It answers the question, 'Is set1 equal to set2?'
- * @param set1 set to be checked for containment
- * @param set2 set to be checked for containment
- * @return true if the test condition is met
- * @stable ICU 3.2
- */
-U_STABLE UBool U_EXPORT2
-uset_equals(const USet* set1, const USet* set2);
-
-/*********************************************************************
- * Serialized set API
- *********************************************************************/
-
-/**
- * Serializes this set into an array of 16-bit integers.  Serialization
- * (currently) only records the characters in the set; multicharacter
- * strings are ignored.
- *
- * The array
- * has following format (each line is one 16-bit integer):
- *
- *  length     = (n+2*m) | (m!=0?0x8000:0)
- *  bmpLength  = n; present if m!=0
- *  bmp[0]
- *  bmp[1]
- *  ...
- *  bmp[n-1]
- *  supp-high[0]
- *  supp-low[0]
- *  supp-high[1]
- *  supp-low[1]
- *  ...
- *  supp-high[m-1]
- *  supp-low[m-1]
- *
- * The array starts with a header.  After the header are n bmp
- * code points, then m supplementary code points.  Either n or m
- * or both may be zero.  n+2*m is always <= 0x7FFF.
- *
- * If there are no supplementary characters (if m==0) then the
- * header is one 16-bit integer, 'length', with value n.
- *
- * If there are supplementary characters (if m!=0) then the header
- * is two 16-bit integers.  The first, 'length', has value
- * (n+2*m)|0x8000.  The second, 'bmpLength', has value n.
- *
- * After the header the code points are stored in ascending order.
- * Supplementary code points are stored as most significant 16
- * bits followed by least significant 16 bits.
- *
- * @param set the set
- * @param dest pointer to buffer of destCapacity 16-bit integers.
- * May be NULL only if destCapacity is zero.
- * @param destCapacity size of dest, or zero.  Must not be negative.
- * @param pErrorCode pointer to the error code.  Will be set to
- * U_INDEX_OUTOFBOUNDS_ERROR if n+2*m > 0x7FFF.  Will be set to
- * U_BUFFER_OVERFLOW_ERROR if n+2*m+(m!=0?2:1) > destCapacity.
- * @return the total length of the serialized format, including
- * the header, that is, n+2*m+(m!=0?2:1), or 0 on error other
- * than U_BUFFER_OVERFLOW_ERROR.
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode* pErrorCode);
-
-/**
- * Given a serialized array, fill in the given serialized set object.
- * @param fillSet pointer to result
- * @param src pointer to start of array
- * @param srcLength length of array
- * @return true if the given array is valid, otherwise false
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-uset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcLength);
-
-/**
- * Set the USerializedSet to contain the given character (and nothing
- * else).
- * @param fillSet pointer to result
- * @param c The codepoint to set
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-uset_setSerializedToOne(USerializedSet* fillSet, UChar32 c);
-
-/**
- * Returns TRUE if the given USerializedSet contains the given
- * character.
- * @param set the serialized set
- * @param c The codepoint to check for within the set
- * @return true if set contains c
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-uset_serializedContains(const USerializedSet* set, UChar32 c);
-
-/**
- * Returns the number of disjoint ranges of characters contained in
- * the given serialized set.  Ignores any strings contained in the
- * set.
- * @param set the serialized set
- * @return a non-negative integer counting the character ranges
- * contained in set
- * @stable ICU 2.4
- */
-U_STABLE int32_t U_EXPORT2
-uset_getSerializedRangeCount(const USerializedSet* set);
-
-/**
- * Returns a range of characters contained in the given serialized
- * set.
- * @param set the serialized set
- * @param rangeIndex a non-negative integer in the range 0..
- * uset_getSerializedRangeCount(set)-1
- * @param pStart pointer to variable to receive first character
- * in range, inclusive
- * @param pEnd pointer to variable to receive last character in range,
- * inclusive
- * @return true if rangeIndex is valid, otherwise false
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex,
-                        UChar32* pStart, UChar32* pEnd);
-
-#endif
diff --git a/source/common/unicode/usetiter.h b/source/common/unicode/usetiter.h
deleted file mode 100644
index 43374b2..0000000
--- a/source/common/unicode/usetiter.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2002-2008, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-#ifndef USETITER_H
-#define USETITER_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-
-/**
- * \file 
- * \brief C++ API: UnicodeSetIterator iterates over the contents of a UnicodeSet.
- */
-
-U_NAMESPACE_BEGIN
-
-class UnicodeSet;
-class UnicodeString;
-
-/**
- *
- * UnicodeSetIterator iterates over the contents of a UnicodeSet.  It
- * iterates over either code points or code point ranges.  After all
- * code points or ranges have been returned, it returns the
- * multicharacter strings of the UnicodeSet, if any.
- *
- * This class is not intended to be subclassed.  Consider any fields
- *  or methods declared as "protected" to be private.  The use of
- *  protected in this class is an artifact of history.
- *
- * <p>To iterate over code points and strings, use a loop like this:
- * <pre>
- * UnicodeSetIterator it(set);
- * while (it.next()) {
- *     processItem(it.getString());
- * }
- * </pre>
- * <p>Each item in the set is accessed as a string.  Set elements
- *    consisting of single code points are returned as strings containing
- *    just the one code point.
- *
- * <p>To iterate over code point ranges, instead of individual code points,
- *    use a loop like this:
- * <pre>
- * UnicodeSetIterator it(set);
- * while (it.nextRange()) {
- *   if (it.isString()) {
- *     processString(it.getString());
- *   } else {
- *     processCodepointRange(it.getCodepoint(), it.getCodepointEnd());
- *   }
- * }
- * </pre>
- * @author M. Davis
- * @stable ICU 2.4
- */
-class U_COMMON_API UnicodeSetIterator : public UObject {
-
- protected:
-
-    /**
-     * Value of <tt>codepoint</tt> if the iterator points to a string.
-     * If <tt>codepoint == IS_STRING</tt>, then examine
-     * <tt>string</tt> for the current iteration result.
-     * @stable ICU 2.4
-     */
-    enum { IS_STRING = -1 };
-
-    /**
-     * Current code point, or the special value <tt>IS_STRING</tt>, if
-     * the iterator points to a string.
-     * @stable ICU 2.4
-     */
-    UChar32 codepoint;
-
-    /**
-     * When iterating over ranges using <tt>nextRange()</tt>,
-     * <tt>codepointEnd</tt> contains the inclusive end of the
-     * iteration range, if <tt>codepoint != IS_STRING</tt>.  If
-     * iterating over code points using <tt>next()</tt>, or if
-     * <tt>codepoint == IS_STRING</tt>, then the value of
-     * <tt>codepointEnd</tt> is undefined.
-     * @stable ICU 2.4
-     */
-    UChar32 codepointEnd;
-
-    /**
-     * If <tt>codepoint == IS_STRING</tt>, then <tt>string</tt> points
-     * to the current string.  If <tt>codepoint != IS_STRING</tt>, the
-     * value of <tt>string</tt> is undefined.
-     * @stable ICU 2.4
-     */
-    const UnicodeString* string;
-
- public:
-
-    /**
-     * Create an iterator over the given set.  The iterator is valid
-     * only so long as <tt>set</tt> is valid.
-     * @param set set to iterate over
-     * @stable ICU 2.4
-     */
-    UnicodeSetIterator(const UnicodeSet& set);
-
-    /**
-     * Create an iterator over nothing.  <tt>next()</tt> and
-     * <tt>nextRange()</tt> return false. This is a convenience
-     * constructor allowing the target to be set later.
-     * @stable ICU 2.4
-     */
-    UnicodeSetIterator();
-
-    /**
-     * Destructor.
-     * @stable ICU 2.4
-     */
-    virtual ~UnicodeSetIterator();
-
-    /**
-     * Returns true if the current element is a string.  If so, the
-     * caller can retrieve it with <tt>getString()</tt>.  If this
-     * method returns false, the current element is a code point or
-     * code point range, depending on whether <tt>next()</tt> or
-     * <tt>nextRange()</tt> was called.
-     * Elements of types string and codepoint can both be retrieved
-     * with the function <tt>getString()</tt>.
-     * Elements of type codepoint can also be retrieved with
-     * <tt>getCodepoint()</tt>.
-     * For ranges, <tt>getCodepoint()</tt> returns the starting codepoint
-     * of the range, and <tt>getCodepointEnd()</tt> returns the end
-     * of the range.
-     * @stable ICU 2.4
-     */
-    inline UBool isString() const;
-
-    /**
-     * Returns the current code point, if <tt>isString()</tt> returned
-     * false.  Otherwise returns an undefined result.
-     * @stable ICU 2.4
-     */
-    inline UChar32 getCodepoint() const;
-
-    /**
-     * Returns the end of the current code point range, if
-     * <tt>isString()</tt> returned false and <tt>nextRange()</tt> was
-     * called.  Otherwise returns an undefined result.
-     * @stable ICU 2.4
-     */
-    inline UChar32 getCodepointEnd() const;
-
-    /**
-     * Returns the current string, if <tt>isString()</tt> returned
-     * true.  If the current iteration item is a code point, a UnicodeString
-     * containing that single code point is returned.
-     *
-     * Ownership of the returned string remains with the iterator.
-     * The string is guaranteed to remain valid only until the iterator is
-     *   advanced to the next item, or until the iterator is deleted.
-     * 
-     * @stable ICU 2.4
-     */
-    const UnicodeString& getString();
-
-    /**
-     * Advances the iteration position to the next element in the set, 
-     * which can be either a single code point or a string.  
-     * If there are no more elements in the set, return false.
-     *
-     * <p>
-     * If <tt>isString() == TRUE</tt>, the value is a
-     * string, otherwise the value is a
-     * single code point.  Elements of either type can be retrieved
-     * with the function <tt>getString()</tt>, while elements of
-     * consisting of a single code point can be retrieved with
-     * <tt>getCodepoint()</tt>
-     *
-     * <p>The order of iteration is all code points in sorted order,
-     * followed by all strings sorted order.    Do not mix
-     * calls to <tt>next()</tt> and <tt>nextRange()</tt> without
-     * calling <tt>reset()</tt> between them.  The results of doing so
-     * are undefined.
-     *
-     * @return true if there was another element in the set.
-     * @stable ICU 2.4
-     */
-    UBool next();
-
-    /**
-     * Returns the next element in the set, either a code point range
-     * or a string.  If there are no more elements in the set, return
-     * false.  If <tt>isString() == TRUE</tt>, the value is a
-     * string and can be accessed with <tt>getString()</tt>.  Otherwise the value is a
-     * range of one or more code points from <tt>getCodepoint()</tt> to
-     * <tt>getCodepointeEnd()</tt> inclusive.
-     *
-     * <p>The order of iteration is all code points ranges in sorted
-     * order, followed by all strings sorted order.  Ranges are
-     * disjoint and non-contiguous.  The value returned from <tt>getString()</tt>
-     * is undefined unless <tt>isString() == TRUE</tt>.  Do not mix calls to
-     * <tt>next()</tt> and <tt>nextRange()</tt> without calling
-     * <tt>reset()</tt> between them.  The results of doing so are
-     * undefined.
-     *
-     * @return true if there was another element in the set.
-     * @stable ICU 2.4
-     */
-    UBool nextRange();
-
-    /**
-     * Sets this iterator to visit the elements of the given set and
-     * resets it to the start of that set.  The iterator is valid only
-     * so long as <tt>set</tt> is valid.
-     * @param set the set to iterate over.
-     * @stable ICU 2.4
-     */
-    void reset(const UnicodeSet& set);
-
-    /**
-     * Resets this iterator to the start of the set.
-     * @stable ICU 2.4
-     */
-    void reset();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.4
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.4
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    // ======================= PRIVATES ===========================
-
- protected:
-
-    // endElement and nextElements are really UChar32's, but we keep
-    // them as signed int32_t's so we can do comparisons with
-    // endElement set to -1.  Leave them as int32_t's.
-    /** The set
-     * @stable ICU 2.4
-     */
-    const UnicodeSet* set;
-    /** End range
-     * @stable ICU 2.4
-     */
-    int32_t endRange;
-    /** Range
-     * @stable ICU 2.4
-     */
-    int32_t range;
-    /** End element
-     * @stable ICU 2.4
-     */
-    int32_t endElement;
-    /** Next element
-     * @stable ICU 2.4
-     */
-    int32_t nextElement;
-    //UBool abbreviated;
-    /** Next string
-     * @stable ICU 2.4
-     */
-    int32_t nextString;
-    /** String count
-     * @stable ICU 2.4
-     */
-    int32_t stringCount;
-
-    /**
-     *  Points to the string to use when the caller asks for a
-     *  string and the current iteration item is a code point, not a string.
-     *  @internal
-     */
-    UnicodeString *cpString;
-
-    /** Copy constructor. Disallowed.
-     * @stable ICU 2.4
-     */
-    UnicodeSetIterator(const UnicodeSetIterator&); // disallow
-
-    /** Assignment operator. Disallowed.
-     * @stable ICU 2.4
-     */
-    UnicodeSetIterator& operator=(const UnicodeSetIterator&); // disallow
-
-    /** Load range
-     * @stable ICU 2.4
-     */
-    virtual void loadRange(int32_t range);
-
-};
-
-inline UBool UnicodeSetIterator::isString() const {
-    return codepoint == (UChar32)IS_STRING;
-}
-
-inline UChar32 UnicodeSetIterator::getCodepoint() const {
-    return codepoint;
-}
-
-inline UChar32 UnicodeSetIterator::getCodepointEnd() const {
-    return codepointEnd;
-}
-
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/common/unicode/ushape.h b/source/common/unicode/ushape.h
deleted file mode 100644
index 6c3655f..0000000
--- a/source/common/unicode/ushape.h
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
-******************************************************************************
-*
-*   Copyright (C) 2000-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  ushape.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2000jun29
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __USHAPE_H__
-#define __USHAPE_H__
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C API:  Arabic shaping
- * 
- */
-
-/**
- * Shape Arabic text on a character basis.
- *
- * <p>This function performs basic operations for "shaping" Arabic text. It is most
- * useful for use with legacy data formats and legacy display technology
- * (simple terminals). All operations are performed on Unicode characters.</p>
- *
- * <p>Text-based shaping means that some character code points in the text are
- * replaced by others depending on the context. It transforms one kind of text
- * into another. In comparison, modern displays for Arabic text select
- * appropriate, context-dependent font glyphs for each text element, which means
- * that they transform text into a glyph vector.</p>
- *
- * <p>Text transformations are necessary when modern display technology is not
- * available or when text needs to be transformed to or from legacy formats that
- * use "shaped" characters. Since the Arabic script is cursive, connecting
- * adjacent letters to each other, computers select images for each letter based
- * on the surrounding letters. This usually results in four images per Arabic
- * letter: initial, middle, final, and isolated forms. In Unicode, on the other
- * hand, letters are normally stored abstract, and a display system is expected
- * to select the necessary glyphs. (This makes searching and other text
- * processing easier because the same letter has only one code.) It is possible
- * to mimic this with text transformations because there are characters in
- * Unicode that are rendered as letters with a specific shape
- * (or cursive connectivity). They were included for interoperability with
- * legacy systems and codepages, and for unsophisticated display systems.</p>
- *
- * <p>A second kind of text transformations is supported for Arabic digits:
- * For compatibility with legacy codepages that only include European digits,
- * it is possible to replace one set of digits by another, changing the
- * character code points. These operations can be performed for either
- * Arabic-Indic Digits (U+0660...U+0669) or Eastern (Extended) Arabic-Indic
- * digits (U+06f0...U+06f9).</p>
- *
- * <p>Some replacements may result in more or fewer characters (code points).
- * By default, this means that the destination buffer may receive text with a
- * length different from the source length. Some legacy systems rely on the
- * length of the text to be constant. They expect extra spaces to be added
- * or consumed either next to the affected character or at the end of the
- * text.</p>
- *
- * <p>For details about the available operations, see the description of the
- * <code>U_SHAPE_...</code> options.</p>
- *
- * @param source The input text.
- *
- * @param sourceLength The number of UChars in <code>source</code>.
- *
- * @param dest The destination buffer that will receive the results of the
- *             requested operations. It may be <code>NULL</code> only if
- *             <code>destSize</code> is 0. The source and destination must not
- *             overlap.
- *
- * @param destSize The size (capacity) of the destination buffer in UChars.
- *                 If <code>destSize</code> is 0, then no output is produced,
- *                 but the necessary buffer size is returned ("preflighting").
- *
- * @param options This is a 32-bit set of flags that specify the operations
- *                that are performed on the input text. If no error occurs,
- *                then the result will always be written to the destination
- *                buffer.
- *
- * @param pErrorCode must be a valid pointer to an error code value,
- *        which must not indicate a failure before the function call.
- *
- * @return The number of UChars written to the destination buffer.
- *         If an error occured, then no output was written, or it may be
- *         incomplete. If <code>U_BUFFER_OVERFLOW_ERROR</code> is set, then
- *         the return value indicates the necessary destination buffer size.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_shapeArabic(const UChar *source, int32_t sourceLength,
-              UChar *dest, int32_t destSize,
-              uint32_t options,
-              UErrorCode *pErrorCode);
-
-/**
- * Memory option: allow the result to have a different length than the source.
- * Affects: LamAlef options
- * @stable ICU 2.0
- */
-#define U_SHAPE_LENGTH_GROW_SHRINK              0
-
-/**
- * Memory option: allow the result to have a different length than the source.
- * Affects: LamAlef options
- * This option is an alias to U_SHAPE_LENGTH_GROW_SHRINK
- * @stable ICU 4.2
- */
-#define U_SHAPE_LAMALEF_RESIZE                  0 
-
-/**
- * Memory option: the result must have the same length as the source.
- * If more room is necessary, then try to consume spaces next to modified characters.
- * @stable ICU 2.0
- */
-#define U_SHAPE_LENGTH_FIXED_SPACES_NEAR        1
-
-/**
- * Memory option: the result must have the same length as the source.
- * If more room is necessary, then try to consume spaces next to modified characters.
- * Affects: LamAlef options
- * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_NEAR
- * @stable ICU 4.2
- */
-#define U_SHAPE_LAMALEF_NEAR                    1 
-
-/**
- * Memory option: the result must have the same length as the source.
- * If more room is necessary, then try to consume spaces at the end of the text.
- * @stable ICU 2.0
- */
-#define U_SHAPE_LENGTH_FIXED_SPACES_AT_END      2
-
-/**
- * Memory option: the result must have the same length as the source.
- * If more room is necessary, then try to consume spaces at the end of the text.
- * Affects: LamAlef options
- * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_AT_END
- * @stable ICU 4.2
- */
-#define U_SHAPE_LAMALEF_END                     2 
-
-/**
- * Memory option: the result must have the same length as the source.
- * If more room is necessary, then try to consume spaces at the beginning of the text.
- * @stable ICU 2.0
- */
-#define U_SHAPE_LENGTH_FIXED_SPACES_AT_BEGINNING 3
-
-/**
- * Memory option: the result must have the same length as the source.
- * If more room is necessary, then try to consume spaces at the beginning of the text.
- * Affects: LamAlef options
- * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_AT_BEGINNING
- * @stable ICU 4.2
- */
-#define U_SHAPE_LAMALEF_BEGIN                    3 
-
-
-/**
- * Memory option: the result must have the same length as the source.
- * Shaping Mode: For each LAMALEF character found, expand LAMALEF using space at end.
- *               If there is no space at end, use spaces at beginning of the buffer. If there
- *               is no space at beginning of the buffer, use spaces at the near (i.e. the space
- *               after the LAMALEF character).
- *               If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) 
- *               will be set in pErrorCode
- *
- * Deshaping Mode: Perform the same function as the flag equals U_SHAPE_LAMALEF_END. 
- * Affects: LamAlef options
- * @stable ICU 4.2
- */
-#define U_SHAPE_LAMALEF_AUTO                     0x10000 
-
-/** Bit mask for memory options. @stable ICU 2.0 */
-#define U_SHAPE_LENGTH_MASK                      0x10003 /* Changed old value 3 */
-
-
-/**
- * Bit mask for LamAlef memory options.
- * @stable ICU 4.2
- */
-#define U_SHAPE_LAMALEF_MASK                     0x10003 /* updated */
-
-/** Direction indicator: the source is in logical (keyboard) order. @stable ICU 2.0 */
-#define U_SHAPE_TEXT_DIRECTION_LOGICAL          0
-
-/**
- * Direction indicator:
- * the source is in visual RTL order,
- * the rightmost displayed character stored first.
- * This option is an alias to U_SHAPE_TEXT_DIRECTION_LOGICAL
- * @stable ICU 4.2
- */
-#define U_SHAPE_TEXT_DIRECTION_VISUAL_RTL       0
-
-/**
- * Direction indicator:
- * the source is in visual LTR order,
- * the leftmost displayed character stored first.
- * @stable ICU 2.0
- */
-#define U_SHAPE_TEXT_DIRECTION_VISUAL_LTR       4
-
-/** Bit mask for direction indicators. @stable ICU 2.0 */
-#define U_SHAPE_TEXT_DIRECTION_MASK             4
-
-
-/** Letter shaping option: do not perform letter shaping. @stable ICU 2.0 */
-#define U_SHAPE_LETTERS_NOOP                    0
-
-/** Letter shaping option: replace abstract letter characters by "shaped" ones. @stable ICU 2.0 */
-#define U_SHAPE_LETTERS_SHAPE                   8
-
-/** Letter shaping option: replace "shaped" letter characters by abstract ones. @stable ICU 2.0 */
-#define U_SHAPE_LETTERS_UNSHAPE                 0x10
-
-/**
- * Letter shaping option: replace abstract letter characters by "shaped" ones.
- * The only difference with U_SHAPE_LETTERS_SHAPE is that Tashkeel letters
- * are always "shaped" into the isolated form instead of the medial form
- * (selecting code points from the Arabic Presentation Forms-B block).
- * @stable ICU 2.0
- */
-#define U_SHAPE_LETTERS_SHAPE_TASHKEEL_ISOLATED 0x18
-
-
-/** Bit mask for letter shaping options. @stable ICU 2.0 */
-#define U_SHAPE_LETTERS_MASK                        0x18
-
-
-/** Digit shaping option: do not perform digit shaping. @stable ICU 2.0 */
-#define U_SHAPE_DIGITS_NOOP                     0
-
-/**
- * Digit shaping option:
- * Replace European digits (U+0030...) by Arabic-Indic digits.
- * @stable ICU 2.0
- */
-#define U_SHAPE_DIGITS_EN2AN                    0x20
-
-/**
- * Digit shaping option:
- * Replace Arabic-Indic digits by European digits (U+0030...).
- * @stable ICU 2.0
- */
-#define U_SHAPE_DIGITS_AN2EN                    0x40
-
-/**
- * Digit shaping option:
- * Replace European digits (U+0030...) by Arabic-Indic digits if the most recent
- * strongly directional character is an Arabic letter
- * (<code>u_charDirection()</code> result <code>U_RIGHT_TO_LEFT_ARABIC</code> [AL]).<br>
- * The direction of "preceding" depends on the direction indicator option.
- * For the first characters, the preceding strongly directional character
- * (initial state) is assumed to be not an Arabic letter
- * (it is <code>U_LEFT_TO_RIGHT</code> [L] or <code>U_RIGHT_TO_LEFT</code> [R]).
- * @stable ICU 2.0
- */
-#define U_SHAPE_DIGITS_ALEN2AN_INIT_LR          0x60
-
-/**
- * Digit shaping option:
- * Replace European digits (U+0030...) by Arabic-Indic digits if the most recent
- * strongly directional character is an Arabic letter
- * (<code>u_charDirection()</code> result <code>U_RIGHT_TO_LEFT_ARABIC</code> [AL]).<br>
- * The direction of "preceding" depends on the direction indicator option.
- * For the first characters, the preceding strongly directional character
- * (initial state) is assumed to be an Arabic letter.
- * @stable ICU 2.0
- */
-#define U_SHAPE_DIGITS_ALEN2AN_INIT_AL          0x80
-
-/** Not a valid option value. May be replaced by a new option. @stable ICU 2.0 */
-#define U_SHAPE_DIGITS_RESERVED                 0xa0
-
-/** Bit mask for digit shaping options. @stable ICU 2.0 */
-#define U_SHAPE_DIGITS_MASK                     0xe0
-
-
-/** Digit type option: Use Arabic-Indic digits (U+0660...U+0669). @stable ICU 2.0 */
-#define U_SHAPE_DIGIT_TYPE_AN                   0
-
-/** Digit type option: Use Eastern (Extended) Arabic-Indic digits (U+06f0...U+06f9). @stable ICU 2.0 */
-#define U_SHAPE_DIGIT_TYPE_AN_EXTENDED          0x100
-
-/** Not a valid option value. May be replaced by a new option. @stable ICU 2.0 */
-#define U_SHAPE_DIGIT_TYPE_RESERVED             0x200
-
-/** Bit mask for digit type options. @stable ICU 2.0 */
-#define U_SHAPE_DIGIT_TYPE_MASK                 0x300 /* I need to change this from 0x3f00 to 0x300 */
-
-/** 
- * Tashkeel aggregation option:
- * Replaces any combination of U+0651 with one of
- * U+064C, U+064D, U+064E, U+064F, U+0650 with
- * U+FC5E, U+FC5F, U+FC60, U+FC61, U+FC62 consecutively.
- * @stable ICU 3.6
- */
-#define U_SHAPE_AGGREGATE_TASHKEEL              0x4000
-/** Tashkeel aggregation option: do not aggregate tashkeels. @stable ICU 3.6 */
-#define U_SHAPE_AGGREGATE_TASHKEEL_NOOP         0
-/** Bit mask for tashkeel aggregation. @stable ICU 3.6 */
-#define U_SHAPE_AGGREGATE_TASHKEEL_MASK         0x4000
-
-/** 
- * Presentation form option:
- * Don't replace Arabic Presentation Forms-A and Arabic Presentation Forms-B
- * characters with 0+06xx characters, before shaping.
- * @stable ICU 3.6
- */
-#define U_SHAPE_PRESERVE_PRESENTATION           0x8000
-/** Presentation form option: 
- * Replace Arabic Presentation Forms-A and Arabic Presentationo Forms-B with 
- * their unshaped correspondants in range 0+06xx, before shaping.
- * @stable ICU 3.6 
- */
-#define U_SHAPE_PRESERVE_PRESENTATION_NOOP      0
-/** Bit mask for preserve presentation form. @stable ICU 3.6 */
-#define U_SHAPE_PRESERVE_PRESENTATION_MASK      0x8000
-
-/* Seen Tail option */ 
-/**
- * Memory option: the result must have the same length as the source.
- * Shaping mode: The SEEN family character will expand into two characters using space near 
- *               the SEEN family character(i.e. the space after the character).
- *               If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) 
- *               will be set in pErrorCode
- *
- * De-shaping mode: Any Seen character followed by Tail character will be
- *                  replaced by one cell Seen and a space will replace the Tail.
- * Affects: Seen options
- * @stable ICU 4.2
- */
-#define U_SHAPE_SEEN_TWOCELL_NEAR     0x200000
-
-/**
- * Bit mask for Seen memory options. 
- * @stable ICU 4.2
- */
-#define U_SHAPE_SEEN_MASK             0x700000
-
-/* YehHamza option */ 
-/**
- * Memory option: the result must have the same length as the source.
- * Shaping mode: The YEHHAMZA character will expand into two characters using space near it 
- *              (i.e. the space after the character
- *               If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) 
- *               will be set in pErrorCode
- *
- * De-shaping mode: Any Yeh (final or isolated) character followed by Hamza character will be
- *                  replaced by one cell YehHamza and space will replace the Hamza.
- * Affects: YehHamza options
- * @stable ICU 4.2
- */
-#define U_SHAPE_YEHHAMZA_TWOCELL_NEAR      0x1000000
-
-
-/**
- * Bit mask for YehHamza memory options. 
- * @stable ICU 4.2
- */
-#define U_SHAPE_YEHHAMZA_MASK              0x3800000
-
-/* New Tashkeel options */ 
-/**
- * Memory option: the result must have the same length as the source.
- * Shaping mode: Tashkeel characters will be replaced by spaces. 
- *               Spaces will be placed at beginning of the buffer
- *
- * De-shaping mode: N/A
- * Affects: Tashkeel options
- * @stable ICU 4.2
- */
-#define U_SHAPE_TASHKEEL_BEGIN                      0x40000
-
-/**
- * Memory option: the result must have the same length as the source.
- * Shaping mode: Tashkeel characters will be replaced by spaces. 
- *               Spaces will be placed at end of the buffer
- *
- * De-shaping mode: N/A
- * Affects: Tashkeel options
- * @stable ICU 4.2
- */
-#define U_SHAPE_TASHKEEL_END                        0x60000
-
-/**
- * Memory option: allow the result to have a different length than the source.
- * Shaping mode: Tashkeel characters will be removed, buffer length will shrink. 
- * De-shaping mode: N/A 
- *
- * Affect: Tashkeel options
- * @stable ICU 4.2
- */
-#define U_SHAPE_TASHKEEL_RESIZE                     0x80000
-
-/**
- * Memory option: the result must have the same length as the source.
- * Shaping mode: Tashkeel characters will be replaced by Tatweel if it is connected to adjacent
- *               characters (i.e. shaped on Tatweel) or replaced by space if it is not connected.
- *
- * De-shaping mode: N/A
- * Affects: YehHamza options
- * @stable ICU 4.2
- */
-#define U_SHAPE_TASHKEEL_REPLACE_BY_TATWEEL         0xC0000
-
-/** 
- * Bit mask for Tashkeel replacement with Space or Tatweel memory options. 
- * @stable ICU 4.2
- */
-#define U_SHAPE_TASHKEEL_MASK                       0xE0000
-
-
-/* Space location Control options */ 
-/**
- * This option affect the meaning of BEGIN and END options. if this option is not used the default
- * for BEGIN and END will be as following: 
- * The Default (for both Visual LTR, Visual RTL and Logical Text)
- *           1. BEGIN always refers to the start address of physical memory.
- *           2. END always refers to the end address of physical memory.
- *
- * If this option is used it will swap the meaning of BEGIN and END only for Visual LTR text. 
- *
- * The effect on BEGIN and END Memory Options will be as following:
- *    A. BEGIN For Visual LTR text: This will be the beginning (right side) of the visual text(
- *       corresponding to the physical memory address end for Visual LTR text, Same as END in 
- *       default behavior)
- *    B. BEGIN For Logical text: Same as BEGIN in default behavior. 
- *    C. END For Visual LTR text: This will be the end (left side) of the visual text (corresponding
- *       to the physical memory address beginning for Visual LTR text, Same as BEGIN in default behavior.
- *    D. END For Logical text: Same as END in default behavior). 
- * Affects: All LamAlef BEGIN, END and AUTO options.
- * @stable ICU 4.2
- */
-#define U_SHAPE_SPACES_RELATIVE_TO_TEXT_BEGIN_END 0x4000000
-
-/**
- * Bit mask for swapping BEGIN and END for Visual LTR text 
- * @stable ICU 4.2
- */
-#define U_SHAPE_SPACES_RELATIVE_TO_TEXT_MASK      0x4000000
-
-/**
- * If this option is used, shaping will use the new Unicode code point for TAIL (i.e. 0xFE73). 
- * If this option is not specified (Default), old unofficial Unicode TAIL code point is used (i.e. 0x200B)
- * De-shaping will not use this option as it will always search for both the new Unicode code point for the 
- * TAIL (i.e. 0xFE73) or the old unofficial Unicode TAIL code point (i.e. 0x200B) and de-shape the
- * Seen-Family letter accordingly.
- *
- * Shaping Mode: Only shaping.
- * De-shaping Mode: N/A.
- * Affects: All Seen options
- * @draft ICU 4.2
- */
-#define SHAPE_TAIL_NEW_UNICODE        0x8000000
-
-/**
- * Bit mask for new Unicode Tail option 
- * @draft ICU 4.2
- */
-#define SHAPE_TAIL_TYPE_MASK          0x8000000
-
-#endif
diff --git a/source/common/unicode/usprep.h b/source/common/unicode/usprep.h
deleted file mode 100644
index 2a20dd7..0000000
--- a/source/common/unicode/usprep.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- *******************************************************************************
- *
- *   Copyright (C) 2003-2010, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  usprep.h
- *   encoding:   US-ASCII
- *   tab size:   8 (not used)
- *   indentation:4
- *
- *   created on: 2003jul2
- *   created by: Ram Viswanadha
- */
-
-#ifndef __USPREP_H__
-#define __USPREP_H__
-
-/**
- * \file 
- * \brief C API: Implements the StringPrep algorithm.
- */
-
-#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
-
-/**
- *
- * StringPrep API implements the StingPrep framework as described by RFC 3454.
- * StringPrep prepares Unicode strings for use in network protocols.
- * Profiles of StingPrep are set of rules and data according to with the
- * Unicode Strings are prepared. Each profiles contains tables which describe
- * how a code point should be treated. The tables are broadly classied into
- * <ul>
- *     <li> Unassinged Table: Contains code points that are unassigned 
- *          in the Unicode Version supported by StringPrep. Currently 
- *          RFC 3454 supports Unicode 3.2. </li>
- *     <li> Prohibited Table: Contains code points that are prohibted from
- *          the output of the StringPrep processing function. </li>
- *     <li> Mapping Table: Contains code ponts that are deleted from the output or case mapped. </li>
- * </ul>
- * 
- * The procedure for preparing Unicode strings:
- * <ol>
- *      <li> Map: For each character in the input, check if it has a mapping
- *           and, if so, replace it with its mapping. </li>
- *      <li> Normalize: Possibly normalize the result of step 1 using Unicode
- *           normalization. </li>
- *      <li> Prohibit: Check for any characters that are not allowed in the
- *        output.  If any are found, return an error.</li>
- *      <li> Check bidi: Possibly check for right-to-left characters, and if
- *           any are found, make sure that the whole string satisfies the
- *           requirements for bidirectional strings.  If the string does not
- *           satisfy the requirements for bidirectional strings, return an
- *           error.  </li>
- * </ol>
- * @author Ram Viswanadha
- */
-#if !UCONFIG_NO_IDNA
-
-#include "unicode/parseerr.h"
-
-/**
- * The StringPrep profile
- * @stable ICU 2.8
- */
-typedef struct UStringPrepProfile UStringPrepProfile;
-
-
-/** 
- * Option to prohibit processing of unassigned code points in the input
- * 
- * @see  usprep_prepare
- * @stable ICU 2.8
- */
-#define USPREP_DEFAULT 0x0000
-
-/** 
- * Option to allow processing of unassigned code points in the input
- * 
- * @see  usprep_prepare
- * @stable ICU 2.8
- */
-#define USPREP_ALLOW_UNASSIGNED 0x0001
-
-/**
- * enums for the standard stringprep profile types
- * supported by usprep_openByType.
- * @see usprep_openByType
- * @stable ICU 4.2
- */
-typedef enum UStringPrepProfileType {
-    /**
-     * RFC3491 Nameprep
-     * @stable ICU 4.2
-     */
-    USPREP_RFC3491_NAMEPREP,
-    /**
-     * RFC3530 nfs4_cs_prep
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3530_NFS4_CS_PREP,
-    /**
-     * RFC3530 nfs4_cs_prep with case insensitive option
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3530_NFS4_CS_PREP_CI,
-    /**
-     * RFC3530 nfs4_cis_prep
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3530_NFS4_CIS_PREP,
-    /**
-     * RFC3530 nfs4_mixed_prep for prefix
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3530_NFS4_MIXED_PREP_PREFIX,
-    /**
-     * RFC3530 nfs4_mixed_prep for suffix
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3530_NFS4_MIXED_PREP_SUFFIX,
-    /**
-     * RFC3722 iSCSI
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3722_ISCSI,
-    /**
-     * RFC3920 XMPP Nodeprep
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3920_NODEPREP,
-    /**
-     * RFC3920 XMPP Resourceprep
-     * @stable ICU 4.2
-     */
-	USPREP_RFC3920_RESOURCEPREP,
-    /**
-     * RFC4011 Policy MIB Stringprep
-     * @stable ICU 4.2
-     */
-	USPREP_RFC4011_MIB,
-    /**
-     * RFC4013 SASLprep
-     * @stable ICU 4.2
-     */
-    USPREP_RFC4013_SASLPREP,
-    /**
-     * RFC4505 trace
-     * @stable ICU 4.2
-     */
-	USPREP_RFC4505_TRACE,
-    /**
-     * RFC4518 LDAP
-     * @stable ICU 4.2
-     */
-	USPREP_RFC4518_LDAP,
-    /**
-     * RFC4518 LDAP for case ignore, numeric and stored prefix
-     * matching rules
-     * @stable ICU 4.2
-     */
-	USPREP_RFC4518_LDAP_CI
-} UStringPrepProfileType;
-
-/**
- * Creates a StringPrep profile from the data file.
- *
- * @param path      string containing the full path pointing to the directory
- *                  where the profile reside followed by the package name
- *                  e.g. "/usr/resource/my_app/profiles/mydata" on a Unix system.
- *                  if NULL, ICU default data files will be used.
- * @param fileName  name of the profile file to be opened
- * @param status    ICU error code in/out parameter. Must not be NULL.
- *                  Must fulfill U_SUCCESS before the function call.
- * @return Pointer to UStringPrepProfile that is opened. Should be closed by
- * calling usprep_close()
- * @see usprep_close()
- * @stable ICU 2.8
- */
-U_STABLE UStringPrepProfile* U_EXPORT2
-usprep_open(const char* path, 
-            const char* fileName,
-            UErrorCode* status);
-
-/**
- * Creates a StringPrep profile for the specified profile type.
- *
- * @param type		The profile type
- * @param status    ICU error code in/out parameter. Must not be NULL.
- *                  Must fulfill U_SUCCESS before the function call.
- * @return          Pointer to UStringPrepProfile that is opened. Should be closed by
- *                  calling usprep_close()
- * @see usprep_close()
- * @stable ICU 4.2
- */
-U_STABLE UStringPrepProfile* U_EXPORT2
-usprep_openByType(UStringPrepProfileType type,
-				  UErrorCode* status);
-
-/**
- * Closes the profile
- * @param profile The profile to close
- * @stable ICU 2.8
- */
-U_STABLE void U_EXPORT2
-usprep_close(UStringPrepProfile* profile);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUStringPrepProfilePointer
- * "Smart pointer" class, closes a UStringPrepProfile via usprep_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUStringPrepProfilePointer, UStringPrepProfile, usprep_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Prepare the input buffer for use in applications with the given profile. This operation maps, normalizes(NFKC),
- * checks for prohited and BiDi characters in the order defined by RFC 3454
- * depending on the options specified in the profile.
- *
- * @param prep          The profile to use 
- * @param src           Pointer to UChar buffer containing the string to prepare
- * @param srcLength     Number of characters in the source string
- * @param dest          Pointer to the destination buffer to receive the output
- * @param destCapacity  The capacity of destination array
- * @param options       A bit set of options:
- *
- *  - USPREP_NONE               Prohibit processing of unassigned code points in the input
- *
- *  - USPREP_ALLOW_UNASSIGNED   Treat the unassigned code points are in the input 
- *                              as normal Unicode code points.
- *
- * @param parseError        Pointer to UParseError struct to receive information on position 
- *                          of error if an error is encountered. Can be NULL.
- * @param status            ICU in/out error code parameter.
- *                          U_INVALID_CHAR_FOUND if src contains
- *                          unmatched single surrogates.
- *                          U_INDEX_OUTOFBOUNDS_ERROR if src contains
- *                          too many code points.
- *                          U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @return The number of UChars in the destination buffer
- * @stable ICU 2.8
- */
-
-U_STABLE int32_t U_EXPORT2
-usprep_prepare(   const UStringPrepProfile* prep,
-                  const UChar* src, int32_t srcLength, 
-                  UChar* dest, int32_t destCapacity,
-                  int32_t options,
-                  UParseError* parseError,
-                  UErrorCode* status );
-
-
-#endif /* #if !UCONFIG_NO_IDNA */
-
-#endif
diff --git a/source/common/unicode/ustring.h b/source/common/unicode/ustring.h
deleted file mode 100644
index 388bc74..0000000
--- a/source/common/unicode/ustring.h
+++ /dev/null
@@ -1,1696 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1998-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*
-* File ustring.h
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   12/07/98    bertrand    Creation.
-******************************************************************************
-*/
-
-#ifndef USTRING_H
-#define USTRING_H
-
-#include "unicode/utypes.h"
-#include "unicode/putil.h"
-#include "unicode/uiter.h"
-
-/** Simple declaration for u_strToTitle() to avoid including unicode/ubrk.h. @stable ICU 2.1*/
-#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR
-#   define UBRK_TYPEDEF_UBREAK_ITERATOR
-    typedef struct UBreakIterator UBreakIterator;
-#endif
-
-/**
- * \file
- * \brief C API: Unicode string handling functions
- *
- * These C API functions provide general Unicode string handling.
- *
- * Some functions are equivalent in name, signature, and behavior to the ANSI C <string.h>
- * functions. (For example, they do not check for bad arguments like NULL string pointers.)
- * In some cases, only the thread-safe variant of such a function is implemented here
- * (see u_strtok_r()).
- *
- * Other functions provide more Unicode-specific functionality like locale-specific
- * upper/lower-casing and string comparison in code point order.
- *
- * ICU uses 16-bit Unicode (UTF-16) in the form of arrays of UChar code units.
- * UTF-16 encodes each Unicode code point with either one or two UChar code units.
- * (This is the default form of Unicode, and a forward-compatible extension of the original,
- * fixed-width form that was known as UCS-2. UTF-16 superseded UCS-2 with Unicode 2.0
- * in 1996.)
- *
- * Some APIs accept a 32-bit UChar32 value for a single code point.
- *
- * ICU also handles 16-bit Unicode text with unpaired surrogates.
- * Such text is not well-formed UTF-16.
- * Code-point-related functions treat unpaired surrogates as surrogate code points,
- * i.e., as separate units.
- *
- * Although UTF-16 is a variable-width encoding form (like some legacy multi-byte encodings),
- * it is much more efficient even for random access because the code unit values
- * for single-unit characters vs. lead units vs. trail units are completely disjoint.
- * This means that it is easy to determine character (code point) boundaries from
- * random offsets in the string.
- *
- * Unicode (UTF-16) string processing is optimized for the single-unit case.
- * Although it is important to support supplementary characters
- * (which use pairs of lead/trail code units called "surrogates"),
- * their occurrence is rare. Almost all characters in modern use require only
- * a single UChar code unit (i.e., their code point values are <=0xffff).
- *
- * For more details see the User Guide Strings chapter (http://icu-project.org/userguide/strings.html).
- * For a discussion of the handling of unpaired surrogates see also
- * Jitterbug 2145 and its icu mailing list proposal on 2002-sep-18.
- */
-
-/**
- * \defgroup ustring_ustrlen String Length
- * \ingroup ustring_strlen
- */
-/*@{*/
-/**
- * Determine the length of an array of UChar.
- *
- * @param s The array of UChars, NULL (U+0000) terminated.
- * @return The number of UChars in <code>chars</code>, minus the terminator.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strlen(const UChar *s);
-/*@}*/
-
-/**
- * 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 the U16_FWD_N() macro (see utf.h).
- *
- * @param s The input string.
- * @param length The number of UChar code units to be checked, or -1 to count all
- *               code points before the first NUL (U+0000).
- * @return The number of code points in the specified code units.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_countChar32(const UChar *s, int32_t length);
-
-/**
- * Check if the string contains more Unicode code points than a certain number.
- * This is more efficient than counting all code points in the entire string
- * and comparing that number with a threshold.
- * This function may not need to scan the string at all if the length is known
- * (not -1 for NUL-termination) and falls within a certain range, and
- * never needs to count more than 'number+1' code points.
- * Logically equivalent to (u_countChar32(s, length)>number).
- * A Unicode code point may occupy either one or two UChar code units.
- *
- * @param s The input string.
- * @param length The length of the string, or -1 if it is NUL-terminated.
- * @param number The number of code points in the 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).
- * @stable ICU 2.4
- */
-U_STABLE UBool U_EXPORT2
-u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number);
-
-/**
- * Concatenate two ustrings.  Appends a copy of <code>src</code>,
- * including the null terminator, to <code>dst</code>. The initial copied
- * character from <code>src</code> overwrites the null terminator in <code>dst</code>.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_strcat(UChar     *dst, 
-    const UChar     *src);
-
-/**
- * Concatenate two ustrings.  
- * Appends at most <code>n</code> characters from <code>src</code> to <code>dst</code>.
- * Adds a terminating NUL.
- * If src is too long, then only <code>n-1</code> characters will be copied
- * before the terminating NUL.
- * If <code>n&lt;=0</code> then dst is not modified.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param n The maximum number of characters to append.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_strncat(UChar     *dst, 
-     const UChar     *src, 
-     int32_t     n);
-
-/**
- * Find the first occurrence of a substring in a string.
- * The substring is found at code point boundaries.
- * That means that if the substring begins with
- * a trail surrogate or ends with a lead surrogate,
- * then it is found only if these surrogates stand alone in the text.
- * Otherwise, the substring edge units would be matched against
- * halves of surrogate pairs.
- *
- * @param s The string to search (NUL-terminated).
- * @param substring The substring to find (NUL-terminated).
- * @return A pointer to the first occurrence of <code>substring</code> in <code>s</code>,
- *         or <code>s</code> itself if the <code>substring</code> is empty,
- *         or <code>NULL</code> if <code>substring</code> is not in <code>s</code>.
- * @stable ICU 2.0
- *
- * @see u_strrstr
- * @see u_strFindFirst
- * @see u_strFindLast
- */
-U_STABLE UChar * U_EXPORT2
-u_strstr(const UChar *s, const UChar *substring);
-
-/**
- * Find the first occurrence of a substring in a string.
- * The substring is found at code point boundaries.
- * That means that if the substring begins with
- * a trail surrogate or ends with a lead surrogate,
- * then it is found only if these surrogates stand alone in the text.
- * Otherwise, the substring edge units would be matched against
- * halves of surrogate pairs.
- *
- * @param s The string to search.
- * @param length The length of s (number of UChars), or -1 if it is NUL-terminated.
- * @param substring The substring to find (NUL-terminated).
- * @param subLength The length of substring (number of UChars), or -1 if it is NUL-terminated.
- * @return A pointer to the first occurrence of <code>substring</code> in <code>s</code>,
- *         or <code>s</code> itself if the <code>substring</code> is empty,
- *         or <code>NULL</code> if <code>substring</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strstr
- * @see u_strFindLast
- */
-U_STABLE UChar * U_EXPORT2
-u_strFindFirst(const UChar *s, int32_t length, const UChar *substring, int32_t subLength);
-
-/**
- * Find the first occurrence of a BMP code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (NUL-terminated).
- * @param c The BMP code point to find.
- * @return A pointer to the first occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.0
- *
- * @see u_strchr32
- * @see u_memchr
- * @see u_strstr
- * @see u_strFindFirst
- */
-U_STABLE UChar * U_EXPORT2
-u_strchr(const UChar *s, UChar c);
-
-/**
- * Find the first occurrence of a code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (NUL-terminated).
- * @param c The code point to find.
- * @return A pointer to the first occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.0
- *
- * @see u_strchr
- * @see u_memchr32
- * @see u_strstr
- * @see u_strFindFirst
- */
-U_STABLE UChar * U_EXPORT2
-u_strchr32(const UChar *s, UChar32 c);
-
-/**
- * Find the last occurrence of a substring in a string.
- * The substring is found at code point boundaries.
- * That means that if the substring begins with
- * a trail surrogate or ends with a lead surrogate,
- * then it is found only if these surrogates stand alone in the text.
- * Otherwise, the substring edge units would be matched against
- * halves of surrogate pairs.
- *
- * @param s The string to search (NUL-terminated).
- * @param substring The substring to find (NUL-terminated).
- * @return A pointer to the last occurrence of <code>substring</code> in <code>s</code>,
- *         or <code>s</code> itself if the <code>substring</code> is empty,
- *         or <code>NULL</code> if <code>substring</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strstr
- * @see u_strFindFirst
- * @see u_strFindLast
- */
-U_STABLE UChar * U_EXPORT2
-u_strrstr(const UChar *s, const UChar *substring);
-
-/**
- * Find the last occurrence of a substring in a string.
- * The substring is found at code point boundaries.
- * That means that if the substring begins with
- * a trail surrogate or ends with a lead surrogate,
- * then it is found only if these surrogates stand alone in the text.
- * Otherwise, the substring edge units would be matched against
- * halves of surrogate pairs.
- *
- * @param s The string to search.
- * @param length The length of s (number of UChars), or -1 if it is NUL-terminated.
- * @param substring The substring to find (NUL-terminated).
- * @param subLength The length of substring (number of UChars), or -1 if it is NUL-terminated.
- * @return A pointer to the last occurrence of <code>substring</code> in <code>s</code>,
- *         or <code>s</code> itself if the <code>substring</code> is empty,
- *         or <code>NULL</code> if <code>substring</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strstr
- * @see u_strFindLast
- */
-U_STABLE UChar * U_EXPORT2
-u_strFindLast(const UChar *s, int32_t length, const UChar *substring, int32_t subLength);
-
-/**
- * Find the last occurrence of a BMP code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (NUL-terminated).
- * @param c The BMP code point to find.
- * @return A pointer to the last occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strrchr32
- * @see u_memrchr
- * @see u_strrstr
- * @see u_strFindLast
- */
-U_STABLE UChar * U_EXPORT2
-u_strrchr(const UChar *s, UChar c);
-
-/**
- * Find the last occurrence of a code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (NUL-terminated).
- * @param c The code point to find.
- * @return A pointer to the last occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strrchr
- * @see u_memchr32
- * @see u_strrstr
- * @see u_strFindLast
- */
-U_STABLE UChar * U_EXPORT2
-u_strrchr32(const UChar *s, UChar32 c);
-
-/**
- * Locates the first occurrence in the string <code>string</code> of any of the characters
- * in the string <code>matchSet</code>.
- * Works just like C's strpbrk but with Unicode.
- *
- * @param string The string in which to search, NUL-terminated.
- * @param matchSet A NUL-terminated string defining a set of code points
- *                 for which to search in the text string.
- * @return A pointer to the  character in <code>string</code> that matches one of the
- *         characters in <code>matchSet</code>, or NULL if no such character is found.
- * @stable ICU 2.0
- */
-U_STABLE UChar * U_EXPORT2
-u_strpbrk(const UChar *string, const UChar *matchSet);
-
-/**
- * Returns the number of consecutive characters in <code>string</code>,
- * beginning with the first, that do not occur somewhere in <code>matchSet</code>.
- * Works just like C's strcspn but with Unicode.
- *
- * @param string The string in which to search, NUL-terminated.
- * @param matchSet A NUL-terminated string defining a set of code points
- *                 for which to search in the text string.
- * @return The number of initial characters in <code>string</code> that do not
- *         occur in <code>matchSet</code>.
- * @see u_strspn
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strcspn(const UChar *string, const UChar *matchSet);
-
-/**
- * Returns the number of consecutive characters in <code>string</code>,
- * beginning with the first, that occur somewhere in <code>matchSet</code>.
- * Works just like C's strspn but with Unicode.
- *
- * @param string The string in which to search, NUL-terminated.
- * @param matchSet A NUL-terminated string defining a set of code points
- *                 for which to search in the text string.
- * @return The number of initial characters in <code>string</code> that do
- *         occur in <code>matchSet</code>.
- * @see u_strcspn
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strspn(const UChar *string, const UChar *matchSet);
-
-/**
- * The string tokenizer API allows an application to break a string into
- * tokens. Unlike strtok(), the saveState (the current pointer within the
- * original string) is maintained in saveState. In the first call, the
- * argument src is a pointer to the string. In subsequent calls to
- * return successive tokens of that string, src must be specified as
- * NULL. The value saveState is set by this function to maintain the
- * function's position within the string, and on each subsequent call
- * you must give this argument the same variable. This function does
- * handle surrogate pairs. This function is similar to the strtok_r()
- * the POSIX Threads Extension (1003.1c-1995) version.
- *
- * @param src String containing token(s). This string will be modified.
- *            After the first call to u_strtok_r(), this argument must
- *            be NULL to get to the next token.
- * @param delim Set of delimiter characters (Unicode code points).
- * @param saveState The current pointer within the original string,
- *              which is set by this function. The saveState
- *              parameter should the address of a local variable of type
- *              UChar *. (i.e. defined "Uhar *myLocalSaveState" and use
- *              &myLocalSaveState for this parameter).
- * @return A pointer to the next token found in src, or NULL
- *         when there are no more tokens.
- * @stable ICU 2.0
- */
-U_STABLE UChar * U_EXPORT2
-u_strtok_r(UChar    *src, 
-     const UChar    *delim,
-           UChar   **saveState);
-
-/**
- * Compare two Unicode strings for bitwise equality (code unit order).
- *
- * @param s1 A string to compare.
- * @param s2 A string to compare.
- * @return 0 if <code>s1</code> and <code>s2</code> are bitwise equal; a negative
- * value if <code>s1</code> is bitwise less than <code>s2,</code>; a positive
- * value if <code>s1</code> is bitwise greater than <code>s2</code>.
- * @stable ICU 2.0
- */
-U_STABLE int32_t  U_EXPORT2
-u_strcmp(const UChar     *s1, 
-         const UChar     *s2);
-
-/**
- * Compare two Unicode strings in code point order.
- * See u_strCompare for details.
- *
- * @param s1 A string to compare.
- * @param s2 A string to compare.
- * @return a negative/zero/positive integer corresponding to whether
- * the first string is less than/equal to/greater than the second one
- * in code point order
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strcmpCodePointOrder(const UChar *s1, const UChar *s2);
-
-/**
- * Compare two Unicode strings (binary order).
- *
- * The comparison can be done in code unit order or in code point order.
- * They differ only in UTF-16 when
- * comparing supplementary code points (U+10000..U+10ffff)
- * to BMP code points near the end of the BMP (i.e., U+e000..U+ffff).
- * In code unit order, high BMP code points sort after supplementary code points
- * because they are stored as pairs of surrogates which are at U+d800..U+dfff.
- *
- * This functions works with strings of different explicitly specified lengths
- * unlike the ANSI C-like u_strcmp() and u_memcmp() etc.
- * NUL-terminated strings are possible with length arguments of -1.
- *
- * @param s1 First source string.
- * @param length1 Length of first source string, or -1 if NUL-terminated.
- *
- * @param s2 Second source string.
- * @param length2 Length of second source string, or -1 if NUL-terminated.
- *
- * @param codePointOrder Choose between code unit order (FALSE)
- *                       and code point order (TRUE).
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @stable ICU 2.2
- */
-U_STABLE int32_t U_EXPORT2
-u_strCompare(const UChar *s1, int32_t length1,
-             const UChar *s2, int32_t length2,
-             UBool codePointOrder);
-
-/**
- * Compare two Unicode strings (binary order)
- * as presented by UCharIterator objects.
- * Works otherwise just like u_strCompare().
- *
- * Both iterators are reset to their start positions.
- * When the function returns, it is undefined where the iterators
- * have stopped.
- *
- * @param iter1 First source string iterator.
- * @param iter2 Second source string iterator.
- * @param codePointOrder Choose between code unit order (FALSE)
- *                       and code point order (TRUE).
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @see u_strCompare
- *
- * @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2
-u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrder);
-
-#ifndef U_COMPARE_CODE_POINT_ORDER
-/* see also unistr.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
-
-/**
- * Compare two strings case-insensitively using full case folding.
- * This is equivalent to
- *   u_strCompare(u_strFoldCase(s1, options),
- *                u_strFoldCase(s2, options),
- *                (options&U_COMPARE_CODE_POINT_ORDER)!=0).
- *
- * The comparison can be done in UTF-16 code unit order or in code point order.
- * They differ only when comparing supplementary code points (U+10000..U+10ffff)
- * to BMP code points near the end of the BMP (i.e., U+e000..U+ffff).
- * In code unit order, high BMP code points sort after supplementary code points
- * because they are stored as pairs of surrogates which are at U+d800..U+dfff.
- *
- * This functions works with strings of different explicitly specified lengths
- * unlike the ANSI C-like u_strcmp() and u_memcmp() etc.
- * NUL-terminated strings are possible with length arguments of -1.
- *
- * @param s1 First source string.
- * @param length1 Length of first source string, or -1 if NUL-terminated.
- *
- * @param s2 Second source string.
- * @param length2 Length of second source string, or -1 if NUL-terminated.
- *
- * @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
- *
- * @param pErrorCode Must be a valid pointer to an error code value,
- *                  which must not indicate a failure before the function call.
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @stable ICU 2.2
- */
-U_STABLE int32_t U_EXPORT2
-u_strCaseCompare(const UChar *s1, int32_t length1,
-                 const UChar *s2, int32_t length2,
-                 uint32_t options,
-                 UErrorCode *pErrorCode);
-
-/**
- * Compare two ustrings for bitwise equality. 
- * Compares at most <code>n</code> characters.
- *
- * @param ucs1 A string to compare.
- * @param ucs2 A string to compare.
- * @param n The maximum number of characters to compare.
- * @return 0 if <code>s1</code> and <code>s2</code> are bitwise equal; a negative
- * value if <code>s1</code> is bitwise less than <code>s2</code>; a positive
- * value if <code>s1</code> is bitwise greater than <code>s2</code>.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strncmp(const UChar     *ucs1, 
-     const UChar     *ucs2, 
-     int32_t     n);
-
-/**
- * Compare two Unicode strings in code point order.
- * This is different in UTF-16 from u_strncmp() if supplementary characters are present.
- * For details, see u_strCompare().
- *
- * @param s1 A string to compare.
- * @param s2 A string to compare.
- * @param n The maximum number of characters to compare.
- * @return a negative/zero/positive integer corresponding to whether
- * the first string is less than/equal to/greater than the second one
- * in code point order
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n);
-
-/**
- * Compare two strings case-insensitively using full case folding.
- * This is equivalent to u_strcmp(u_strFoldCase(s1, options), u_strFoldCase(s2, options)).
- *
- * @param s1 A string to compare.
- * @param s2 A 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
- */
-U_STABLE int32_t U_EXPORT2
-u_strcasecmp(const UChar *s1, const UChar *s2, uint32_t options);
-
-/**
- * Compare two strings case-insensitively using full case folding.
- * This is equivalent to u_strcmp(u_strFoldCase(s1, at most n, options),
- * u_strFoldCase(s2, at most n, options)).
- *
- * @param s1 A string to compare.
- * @param s2 A string to compare.
- * @param n The maximum number of characters each string to case-fold and then 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
- */
-U_STABLE int32_t U_EXPORT2
-u_strncasecmp(const UChar *s1, const UChar *s2, int32_t n, uint32_t options);
-
-/**
- * Compare two strings case-insensitively using full case folding.
- * This is equivalent to u_strcmp(u_strFoldCase(s1, n, options),
- * u_strFoldCase(s2, n, options)).
- *
- * @param s1 A string to compare.
- * @param s2 A string to compare.
- * @param length The number of characters in each string to case-fold and then 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
- */
-U_STABLE int32_t U_EXPORT2
-u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options);
-
-/**
- * Copy a ustring. Adds a null terminator.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_strcpy(UChar     *dst, 
-    const UChar     *src);
-
-/**
- * Copy a ustring.
- * Copies at most <code>n</code> characters.  The result will be null terminated
- * if the length of <code>src</code> is less than <code>n</code>.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param n The maximum number of characters to copy.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_strncpy(UChar     *dst, 
-     const UChar     *src, 
-     int32_t     n);
-
-#if !UCONFIG_NO_CONVERSION
-
-/**
- * Copy a byte string encoded in the default codepage to a ustring.
- * Adds a null terminator.
- * Performs a host byte to UChar conversion
- *
- * @param dst The destination string.
- * @param src The source string.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2 u_uastrcpy(UChar *dst,
-               const char *src );
-
-/**
- * Copy a byte string encoded in the default codepage to a ustring.
- * Copies at most <code>n</code> characters.  The result will be null terminated
- * if the length of <code>src</code> is less than <code>n</code>.
- * Performs a host byte to UChar conversion
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param n The maximum number of characters to copy.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2 u_uastrncpy(UChar *dst,
-            const char *src,
-            int32_t n);
-
-/**
- * Copy ustring to a byte string encoded in the default codepage.
- * Adds a null terminator.
- * Performs a UChar to host byte conversion
- *
- * @param dst The destination string.
- * @param src The source string.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE char* U_EXPORT2 u_austrcpy(char *dst,
-            const UChar *src );
-
-/**
- * Copy ustring to a byte string encoded in the default codepage.
- * Copies at most <code>n</code> characters.  The result will be null terminated
- * if the length of <code>src</code> is less than <code>n</code>.
- * Performs a UChar to host byte conversion
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param n The maximum number of characters to copy.
- * @return A pointer to <code>dst</code>.
- * @stable ICU 2.0
- */
-U_STABLE char* U_EXPORT2 u_austrncpy(char *dst,
-            const UChar *src,
-            int32_t n );
-
-#endif
-
-/**
- * Synonym for memcpy(), but with UChars only.
- * @param dest The destination string
- * @param src The source string
- * @param count The number of characters to copy
- * @return A pointer to <code>dest</code>
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_memcpy(UChar *dest, const UChar *src, int32_t count);
-
-/**
- * Synonym for memmove(), but with UChars only.
- * @param dest The destination string
- * @param src The source string
- * @param count The number of characters to move
- * @return A pointer to <code>dest</code>
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_memmove(UChar *dest, const UChar *src, int32_t count);
-
-/**
- * Initialize <code>count</code> characters of <code>dest</code> to <code>c</code>.
- *
- * @param dest The destination string.
- * @param c The character to initialize the string.
- * @param count The maximum number of characters to set.
- * @return A pointer to <code>dest</code>.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_memset(UChar *dest, UChar c, int32_t count);
-
-/**
- * Compare the first <code>count</code> UChars of each buffer.
- *
- * @param buf1 The first string to compare.
- * @param buf2 The second string to compare.
- * @param count The maximum number of UChars to compare.
- * @return When buf1 < buf2, a negative number is returned.
- *      When buf1 == buf2, 0 is returned.
- *      When buf1 > buf2, a positive number is returned.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_memcmp(const UChar *buf1, const UChar *buf2, int32_t count);
-
-/**
- * Compare two Unicode strings in code point order.
- * This is different in UTF-16 from u_memcmp() if supplementary characters are present.
- * For details, see u_strCompare().
- *
- * @param s1 A string to compare.
- * @param s2 A string to compare.
- * @param count The maximum number of characters to compare.
- * @return a negative/zero/positive integer corresponding to whether
- * the first string is less than/equal to/greater than the second one
- * in code point order
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_memcmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t count);
-
-/**
- * Find the first occurrence of a BMP code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (contains <code>count</code> UChars).
- * @param c The BMP code point to find.
- * @param count The length of the string.
- * @return A pointer to the first occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.0
- *
- * @see u_strchr
- * @see u_memchr32
- * @see u_strFindFirst
- */
-U_STABLE UChar* U_EXPORT2
-u_memchr(const UChar *s, UChar c, int32_t count);
-
-/**
- * Find the first occurrence of a code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (contains <code>count</code> UChars).
- * @param c The code point to find.
- * @param count The length of the string.
- * @return A pointer to the first occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.0
- *
- * @see u_strchr32
- * @see u_memchr
- * @see u_strFindFirst
- */
-U_STABLE UChar* U_EXPORT2
-u_memchr32(const UChar *s, UChar32 c, int32_t count);
-
-/**
- * Find the last occurrence of a BMP code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (contains <code>count</code> UChars).
- * @param c The BMP code point to find.
- * @param count The length of the string.
- * @return A pointer to the last occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strrchr
- * @see u_memrchr32
- * @see u_strFindLast
- */
-U_STABLE UChar* U_EXPORT2
-u_memrchr(const UChar *s, UChar c, int32_t count);
-
-/**
- * Find the last occurrence of a code point in a string.
- * A surrogate code point is found only if its match in the text is not
- * part of a surrogate pair.
- * A NUL character is found at the string terminator.
- *
- * @param s The string to search (contains <code>count</code> UChars).
- * @param c The code point to find.
- * @param count The length of the string.
- * @return A pointer to the last occurrence of <code>c</code> in <code>s</code>
- *         or <code>NULL</code> if <code>c</code> is not in <code>s</code>.
- * @stable ICU 2.4
- *
- * @see u_strrchr32
- * @see u_memrchr
- * @see u_strFindLast
- */
-U_STABLE UChar* U_EXPORT2
-u_memrchr32(const UChar *s, UChar32 c, int32_t count);
-
-/**
- * Unicode String literals in C.
- * We need one macro to declare a variable for the string
- * and to statically preinitialize it if possible,
- * and a second macro to dynamically intialize such a string variable if necessary.
- *
- * 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.
- *
- * A pair of macros for a single string must be used with the same
- * parameters.
- * 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.
- *
- * Usage:
- * <pre>
- *    U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11);
- *    U_STRING_DECL(ustringVar2, "jumps 5%", 8);
- *    static UBool didInit=FALSE;
- * 
- *    int32_t function() {
- *        if(!didInit) {
- *            U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11);
- *            U_STRING_INIT(ustringVar2, "jumps 5%", 8);
- *            didInit=TRUE;
- *        }
- *        return u_strcmp(ustringVar1, ustringVar2);
- *    }
- * </pre>
- * 
- * Note that the macros will NOT consistently work if their argument is another #define. 
- *  The following will not work on all platforms, don't use it.
- * 
- * <pre>
- *     #define GLUCK "Mr. Gluck"
- *     U_STRING_DECL(var, GLUCK, 9)
- *     U_STRING_INIT(var, GLUCK, 9)
- * </pre>
- * 
- * Instead, use the string literal "Mr. Gluck"  as the argument to both macro
- * calls.
- *
- *
- * @stable ICU 2.0
- */
-#if defined(U_DECLARE_UTF16)
-#   define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=U_DECLARE_UTF16(cs)
-    /**@stable ICU 2.0 */
-#   define U_STRING_INIT(var, 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 U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=L ## cs
-    /**@stable ICU 2.0 */
-#   define U_STRING_INIT(var, cs, length)
-#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
-#   define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=cs
-    /**@stable ICU 2.0 */
-#   define U_STRING_INIT(var, cs, length)
-#else
-#   define U_STRING_DECL(var, cs, length) static UChar var[(length)+1]
-    /**@stable ICU 2.0 */
-#   define U_STRING_INIT(var, cs, length) u_charsToUChars(cs, var, length+1)
-#endif
-
-/**
- * Unescape a string of characters and write the resulting
- * Unicode characters to the destination buffer.  The following escape
- * sequences are recognized:
- *
- * \\uhhhh       4 hex digits; h in [0-9A-Fa-f]
- * \\Uhhhhhhhh   8 hex digits
- * \\xhh         1-2 hex digits
- * \\x{h...}     1-8 hex digits
- * \\ooo         1-3 octal digits; o in [0-7]
- * \\cX          control-X; X is masked with 0x1F
- *
- * as well as the standard ANSI C escapes:
- *
- * \\a => U+0007, \\b => U+0008, \\t => U+0009, \\n => U+000A,
- * \\v => U+000B, \\f => U+000C, \\r => U+000D, \\e => U+001B,
- * \\&quot; => U+0022, \\' => U+0027, \\? => U+003F, \\\\ => U+005C
- *
- * Anything else following a backslash is generically escaped.  For
- * example, "[a\\-z]" returns "[a-z]".
- *
- * If an escape sequence is ill-formed, this method returns an empty
- * string.  An example of an ill-formed sequence is "\\u" followed by
- * fewer than 4 hex digits.
- *
- * The above characters are recognized in the compiler's codepage,
- * that is, they are coded as 'u', '\\', etc.  Characters that are
- * not parts of escape sequences are converted using u_charsToUChars().
- *
- * This function is similar to UnicodeString::unescape() but not
- * identical to it.  The latter takes a source UnicodeString, so it
- * does escape recognition but no conversion.
- *
- * @param src a zero-terminated string of invariant characters
- * @param dest pointer to buffer to receive converted and unescaped
- * text and, if there is room, a zero terminator.  May be NULL for
- * preflighting, in which case no UChars will be written, but the
- * return value will still be valid.  On error, an empty string is
- * stored here (if possible).
- * @param destCapacity the number of UChars that may be written at
- * dest.  Ignored if dest == NULL.
- * @return the length of unescaped string.
- * @see u_unescapeAt
- * @see UnicodeString#unescape()
- * @see UnicodeString#unescapeAt()
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_unescape(const char *src,
-           UChar *dest, int32_t destCapacity);
-
-U_CDECL_BEGIN
-/**
- * Callback function for u_unescapeAt() that returns a character of
- * the source text given an offset and a context pointer.  The context
- * pointer will be whatever is passed into u_unescapeAt().
- *
- * @param offset pointer to the offset that will be passed to u_unescapeAt().
- * @param context an opaque pointer passed directly into u_unescapeAt()
- * @return the character represented by the escape sequence at
- * offset
- * @see u_unescapeAt
- * @stable ICU 2.0
- */
-typedef UChar (U_CALLCONV *UNESCAPE_CHAR_AT)(int32_t offset, void *context);
-U_CDECL_END
-
-/**
- * Unescape a single sequence. The character at offset-1 is assumed
- * (without checking) to be a backslash.  This method takes a callback
- * pointer to a function that returns the UChar at a given offset.  By
- * varying this callback, ICU functions are able to unescape char*
- * strings, UnicodeString objects, and UFILE pointers.
- *
- * If offset is out of range, or if the escape sequence is ill-formed,
- * (UChar32)0xFFFFFFFF is returned.  See documentation of u_unescape()
- * for a list of recognized sequences.
- *
- * @param charAt callback function that returns a UChar of the source
- * text given an offset and a context pointer.
- * @param offset pointer to the offset that will be passed to charAt.
- * The offset value will be updated upon return to point after the
- * last parsed character of the escape sequence.  On error the offset
- * is unchanged.
- * @param length the number of characters in the source text.  The
- * last character of the source text is considered to be at offset
- * length-1.
- * @param context an opaque pointer passed directly into charAt.
- * @return the character represented by the escape sequence at
- * offset, or (UChar32)0xFFFFFFFF on error.
- * @see u_unescape()
- * @see UnicodeString#unescape()
- * @see UnicodeString#unescapeAt()
- * @stable ICU 2.0
- */
-U_STABLE UChar32 U_EXPORT2
-u_unescapeAt(UNESCAPE_CHAR_AT charAt,
-             int32_t *offset,
-             int32_t length,
-             void *context);
-
-/**
- * Uppercase the characters in a 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 are allowed to overlap.
- *
- * @param dest      A buffer for the result string. The result will be zero-terminated if
- *                  the buffer is large enough.
- * @param destCapacity The size of the buffer (number of UChars). 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 zero-terminated.
- * @param locale    The locale to consider, or "" for the root locale or NULL for the default locale.
- * @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. It may be greater than destCapacity. In that case,
- *         only some of the result was written to the destination buffer.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strToUpper(UChar *dest, int32_t destCapacity,
-             const UChar *src, int32_t srcLength,
-             const char *locale,
-             UErrorCode *pErrorCode);
-
-/**
- * Lowercase the characters in a 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 are allowed to overlap.
- *
- * @param dest      A buffer for the result string. The result will be zero-terminated if
- *                  the buffer is large enough.
- * @param destCapacity The size of the buffer (number of UChars). 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 zero-terminated.
- * @param locale    The locale to consider, or "" for the root locale or NULL for the default locale.
- * @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. It may be greater than destCapacity. In that case,
- *         only some of the result was written to the destination buffer.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strToLower(UChar *dest, int32_t destCapacity,
-             const UChar *src, int32_t srcLength,
-             const char *locale,
-             UErrorCode *pErrorCode);
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-/**
- * Titlecase a 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.
- *
- * 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 are allowed to overlap.
- *
- * @param dest      A buffer for the result string. The result will be zero-terminated if
- *                  the buffer is large enough.
- * @param destCapacity The size of the buffer (number of UChars). 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 zero-terminated.
- * @param titleIter A break iterator to find the first characters of words
- *                  that are to be titlecased.
- *                  If none is provided (NULL), then a standard titlecase
- *                  break iterator is opened.
- * @param locale    The locale to consider, or "" for the root locale or NULL for the default locale.
- * @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. It may be greater than destCapacity. In that case,
- *         only some of the result was written to the destination buffer.
- * @stable ICU 2.1
- */
-U_STABLE int32_t U_EXPORT2
-u_strToTitle(UChar *dest, int32_t destCapacity,
-             const UChar *src, int32_t srcLength,
-             UBreakIterator *titleIter,
-             const char *locale,
-             UErrorCode *pErrorCode);
-
-#endif
-
-/**
- * Case-fold the characters in a 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 are allowed to overlap.
- *
- * @param dest      A buffer for the result string. The result will be zero-terminated if
- *                  the buffer is large enough.
- * @param destCapacity The size of the buffer (number of UChars). 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 zero-terminated.
- * @param options   Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I
- * @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. It may be greater than destCapacity. In that case,
- *         only some of the result was written to the destination buffer.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2
-u_strFoldCase(UChar *dest, int32_t destCapacity,
-              const UChar *src, int32_t srcLength,
-              uint32_t options,
-              UErrorCode *pErrorCode);
-
-#if defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION
-/**
- * Convert a UTF-16 string to a wchar_t string.
- * If it is known at compile time that wchar_t strings are in UTF-16 or UTF-32, then
- * this function simply calls the fast, dedicated function for that.
- * Otherwise, two conversions UTF-16 -> default charset -> wchar_t* are performed.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of wchar_t's). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-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 pointer to destination buffer.
- * @stable ICU 2.0
- */
-U_STABLE wchar_t* U_EXPORT2
-u_strToWCS(wchar_t *dest, 
-           int32_t destCapacity,
-           int32_t *pDestLength,
-           const UChar *src, 
-           int32_t srcLength,
-           UErrorCode *pErrorCode);
-/**
- * Convert a wchar_t string to UTF-16.
- * If it is known at compile time that wchar_t strings are in UTF-16 or UTF-32, then
- * this function simply calls the fast, dedicated function for that.
- * Otherwise, two conversions wchar_t* -> default charset -> UTF-16 are performed.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-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 pointer to destination buffer.
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2
-u_strFromWCS(UChar   *dest,
-             int32_t destCapacity, 
-             int32_t *pDestLength,
-             const wchar_t *src,
-             int32_t srcLength,
-             UErrorCode *pErrorCode);
-#endif /* defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION */
-
-/**
- * Convert a UTF-16 string to UTF-8.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of chars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-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 pointer to destination buffer.
- * @stable ICU 2.0
- * @see u_strToUTF8WithSub
- * @see u_strFromUTF8
- */
-U_STABLE char* U_EXPORT2 
-u_strToUTF8(char *dest,           
-            int32_t destCapacity,
-            int32_t *pDestLength,
-            const UChar *src, 
-            int32_t srcLength,
-            UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-8 string to UTF-16.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-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 pointer to destination buffer.
- * @stable ICU 2.0
- * @see u_strFromUTF8WithSub
- * @see u_strFromUTF8Lenient
- */
-U_STABLE UChar* U_EXPORT2
-u_strFromUTF8(UChar *dest,             
-              int32_t destCapacity,
-              int32_t *pDestLength,
-              const char *src, 
-              int32_t srcLength,
-              UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-16 string to UTF-8.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * Same as u_strToUTF8() except for the additional subchar which is output for
- * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code.
- * With subchar==U_SENTINEL, this function behaves exactly like u_strToUTF8().
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of chars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @param subchar       The substitution character to use in place of an illegal input sequence,
- *                      or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead.
- *                      A substitution character can be any valid Unicode code point (up to U+10FFFF)
- *                      except for surrogate code points (U+D800..U+DFFF).
- *                      The recommended value is U+FFFD "REPLACEMENT CHARACTER".
- * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0.
- *                      Set to 0 if no substitutions occur or subchar<0.
- *                      pNumSubstitutions can be NULL.
- * @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 pointer to destination buffer.
- * @see u_strToUTF8
- * @see u_strFromUTF8WithSub
- * @stable ICU 3.6
- */
-U_STABLE char* U_EXPORT2
-u_strToUTF8WithSub(char *dest,
-            int32_t destCapacity,
-            int32_t *pDestLength,
-            const UChar *src,
-            int32_t srcLength,
-            UChar32 subchar, int32_t *pNumSubstitutions,
-            UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-8 string to UTF-16.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * Same as u_strFromUTF8() except for the additional subchar which is output for
- * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code.
- * With subchar==U_SENTINEL, this function behaves exactly like u_strFromUTF8().
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @param subchar       The substitution character to use in place of an illegal input sequence,
- *                      or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead.
- *                      A substitution character can be any valid Unicode code point (up to U+10FFFF)
- *                      except for surrogate code points (U+D800..U+DFFF).
- *                      The recommended value is U+FFFD "REPLACEMENT CHARACTER".
- * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0.
- *                      Set to 0 if no substitutions occur or subchar<0.
- *                      pNumSubstitutions can be NULL.
- * @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 pointer to destination buffer.
- * @see u_strFromUTF8
- * @see u_strFromUTF8Lenient
- * @see u_strToUTF8WithSub
- * @stable ICU 3.6
- */
-U_STABLE UChar* U_EXPORT2
-u_strFromUTF8WithSub(UChar *dest,
-              int32_t destCapacity,
-              int32_t *pDestLength,
-              const char *src,
-              int32_t srcLength,
-              UChar32 subchar, int32_t *pNumSubstitutions,
-              UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-8 string to UTF-16.
- *
- * Same as u_strFromUTF8() except that this function is designed to be very fast,
- * which it achieves by being lenient about malformed UTF-8 sequences.
- * This function is intended for use in environments where UTF-8 text is
- * expected to be well-formed.
- *
- * Its semantics are:
- * - Well-formed UTF-8 text is correctly converted to well-formed UTF-16 text.
- * - The function will not read beyond the input string, nor write beyond
- *   the destCapacity.
- * - Malformed UTF-8 results in "garbage" 16-bit Unicode strings which may not
- *   be well-formed UTF-16.
- *   The function will resynchronize to valid code point boundaries
- *   within a small number of code points after an illegal sequence.
- * - Non-shortest forms are not detected and will result in "spoofing" output.
- *
- * For further performance improvement, if srcLength is given (>=0),
- * then it must be destCapacity>=srcLength.
- *
- * There is no inverse u_strToUTF8Lenient() function because there is practically
- * no performance gain from not checking that a UTF-16 string is well-formed.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- *                      Unlike for other ICU functions, if srcLength>=0 then it
- *                      must be destCapacity>=srcLength.
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- *                      Unlike for other ICU functions, if srcLength>=0 but
- *                      destCapacity<srcLength, then *pDestLength will be set to srcLength
- *                      (and U_BUFFER_OVERFLOW_ERROR will be set)
- *                      regardless of the actual result length.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @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 pointer to destination buffer.
- * @see u_strFromUTF8
- * @see u_strFromUTF8WithSub
- * @see u_strToUTF8WithSub
- * @stable ICU 3.6
- */
-U_STABLE UChar * U_EXPORT2
-u_strFromUTF8Lenient(UChar *dest,
-                     int32_t destCapacity,
-                     int32_t *pDestLength,
-                     const char *src,
-                     int32_t srcLength,
-                     UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-16 string to UTF-32.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChar32s). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-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 pointer to destination buffer.
- * @see u_strToUTF32WithSub
- * @see u_strFromUTF32
- * @stable ICU 2.0
- */
-U_STABLE UChar32* U_EXPORT2 
-u_strToUTF32(UChar32 *dest, 
-             int32_t  destCapacity,
-             int32_t  *pDestLength,
-             const UChar *src, 
-             int32_t  srcLength,
-             UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-32 string to UTF-16.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-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 pointer to destination buffer.
- * @see u_strFromUTF32WithSub
- * @see u_strToUTF32
- * @stable ICU 2.0
- */
-U_STABLE UChar* U_EXPORT2 
-u_strFromUTF32(UChar   *dest,
-               int32_t destCapacity, 
-               int32_t *pDestLength,
-               const UChar32 *src,
-               int32_t srcLength,
-               UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-16 string to UTF-32.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * Same as u_strToUTF32() except for the additional subchar which is output for
- * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code.
- * With subchar==U_SENTINEL, this function behaves exactly like u_strToUTF32().
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChar32s). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If
- *                      pDestLength!=NULL then *pDestLength is always set to the
- *                      number of output units corresponding to the transformation of
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @param subchar       The substitution character to use in place of an illegal input sequence,
- *                      or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead.
- *                      A substitution character can be any valid Unicode code point (up to U+10FFFF)
- *                      except for surrogate code points (U+D800..U+DFFF).
- *                      The recommended value is U+FFFD "REPLACEMENT CHARACTER".
- * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0.
- *                      Set to 0 if no substitutions occur or subchar<0.
- *                      pNumSubstitutions can be NULL.
- * @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 pointer to destination buffer.
- * @see u_strToUTF32
- * @see u_strFromUTF32WithSub
- * @stable ICU 4.2
- */
-U_STABLE UChar32* U_EXPORT2
-u_strToUTF32WithSub(UChar32 *dest,
-             int32_t destCapacity,
-             int32_t *pDestLength,
-             const UChar *src,
-             int32_t srcLength,
-             UChar32 subchar, int32_t *pNumSubstitutions,
-             UErrorCode *pErrorCode);
-
-/**
- * Convert a UTF-32 string to UTF-16.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * Same as u_strFromUTF32() except for the additional subchar which is output for
- * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code.
- * With subchar==U_SENTINEL, this function behaves exactly like u_strFromUTF32().
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If
- *                      pDestLength!=NULL then *pDestLength is always set to the
- *                      number of output units corresponding to the transformation of
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @param subchar       The substitution character to use in place of an illegal input sequence,
- *                      or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead.
- *                      A substitution character can be any valid Unicode code point (up to U+10FFFF)
- *                      except for surrogate code points (U+D800..U+DFFF).
- *                      The recommended value is U+FFFD "REPLACEMENT CHARACTER".
- * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0.
- *                      Set to 0 if no substitutions occur or subchar<0.
- *                      pNumSubstitutions can be NULL.
- * @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 pointer to destination buffer.
- * @see u_strFromUTF32
- * @see u_strToUTF32WithSub
- * @stable ICU 4.2
- */
-U_STABLE UChar* U_EXPORT2
-u_strFromUTF32WithSub(UChar *dest,
-               int32_t destCapacity,
-               int32_t *pDestLength,
-               const UChar32 *src,
-               int32_t srcLength,
-               UChar32 subchar, int32_t *pNumSubstitutions,
-               UErrorCode *pErrorCode);
-
-/**
- * Convert a 16-bit Unicode string to Java Modified UTF-8.
- * See http://java.sun.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8
- *
- * This function behaves according to the documentation for Java DataOutput.writeUTF()
- * except that it does not encode the output length in the destination buffer
- * and does not have an output length restriction.
- * See http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html#writeUTF(java.lang.String)
- *
- * The input string need not be well-formed UTF-16.
- * (Therefore there is no subchar parameter.)
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of chars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @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 pointer to destination buffer.
- * @stable ICU 4.4
- * @see u_strToUTF8WithSub
- * @see u_strFromJavaModifiedUTF8WithSub
- */
-U_STABLE char* U_EXPORT2 
-u_strToJavaModifiedUTF8(
-        char *dest,
-        int32_t destCapacity,
-        int32_t *pDestLength,
-        const UChar *src, 
-        int32_t srcLength,
-        UErrorCode *pErrorCode);
-
-/**
- * Convert a Java Modified UTF-8 string to a 16-bit Unicode string.
- * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set.
- *
- * This function behaves according to the documentation for Java DataInput.readUTF()
- * except that it takes a length parameter rather than
- * interpreting the first two input bytes as the length.
- * See http://java.sun.com/javase/6/docs/api/java/io/DataInput.html#readUTF()
- *
- * The output string may not be well-formed UTF-16.
- *
- * @param dest          A buffer for the result string. The result will be zero-terminated if
- *                      the buffer is large enough.
- * @param destCapacity  The size of the buffer (number of UChars). 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 (pre-flighting).
- * @param pDestLength   A pointer to receive the number of units written to the destination. If 
- *                      pDestLength!=NULL then *pDestLength is always set to the 
- *                      number of output units corresponding to the transformation of 
- *                      all the input units, even in case of a buffer overflow.
- * @param src           The original source string
- * @param srcLength     The length of the original string. If -1, then src must be zero-terminated.
- * @param subchar       The substitution character to use in place of an illegal input sequence,
- *                      or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead.
- *                      A substitution character can be any valid Unicode code point (up to U+10FFFF)
- *                      except for surrogate code points (U+D800..U+DFFF).
- *                      The recommended value is U+FFFD "REPLACEMENT CHARACTER".
- * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0.
- *                      Set to 0 if no substitutions occur or subchar<0.
- *                      pNumSubstitutions can be NULL.
- * @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 pointer to destination buffer.
- * @see u_strFromUTF8WithSub
- * @see u_strFromUTF8Lenient
- * @see u_strToJavaModifiedUTF8
- * @stable ICU 4.4
- */
-U_STABLE UChar* U_EXPORT2
-u_strFromJavaModifiedUTF8WithSub(
-        UChar *dest,
-        int32_t destCapacity,
-        int32_t *pDestLength,
-        const char *src,
-        int32_t srcLength,
-        UChar32 subchar, int32_t *pNumSubstitutions,
-        UErrorCode *pErrorCode);
-
-#endif
diff --git a/source/common/unicode/usystem.h b/source/common/unicode/usystem.h
deleted file mode 100644
index 5d83c8d..0000000
--- a/source/common/unicode/usystem.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  usystem.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: genheaders.pl, a perl script written by Ram Viswanadha
-*
-*  Contains data for commenting out APIs.
-*  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 USYSTEM_H
-#define USYSTEM_H
-
-#ifdef U_HIDE_SYSTEM_API
-
-#    if U_DISABLE_RENAMING
-#        define u_cleanup u_cleanup_SYSTEM_API_DO_NOT_USE
-#        define u_setAtomicIncDecFunctions u_setAtomicIncDecFunctions_SYSTEM_API_DO_NOT_USE
-#        define u_setMemoryFunctions u_setMemoryFunctions_SYSTEM_API_DO_NOT_USE
-#        define u_setMutexFunctions u_setMutexFunctions_SYSTEM_API_DO_NOT_USE
-#        define ucnv_setDefaultName ucnv_setDefaultName_SYSTEM_API_DO_NOT_USE
-#        define uloc_getDefault uloc_getDefault_SYSTEM_API_DO_NOT_USE
-#        define uloc_setDefault uloc_setDefault_SYSTEM_API_DO_NOT_USE
-#    else
-#        define u_cleanup_4_6 u_cleanup_SYSTEM_API_DO_NOT_USE
-#        define u_setAtomicIncDecFunctions_4_6 u_setAtomicIncDecFunctions_SYSTEM_API_DO_NOT_USE
-#        define u_setMemoryFunctions_4_6 u_setMemoryFunctions_SYSTEM_API_DO_NOT_USE
-#        define u_setMutexFunctions_4_6 u_setMutexFunctions_SYSTEM_API_DO_NOT_USE
-#        define ucnv_setDefaultName_4_6 ucnv_setDefaultName_SYSTEM_API_DO_NOT_USE
-#        define uloc_getDefault_4_6 uloc_getDefault_SYSTEM_API_DO_NOT_USE
-#        define uloc_setDefault_4_6 uloc_setDefault_SYSTEM_API_DO_NOT_USE
-#    endif /* U_DISABLE_RENAMING */
-
-#endif /* U_HIDE_SYSTEM_API */
-#endif /* USYSTEM_H */
-
diff --git a/source/common/unicode/utext.h b/source/common/unicode/utext.h
deleted file mode 100644
index 088a532..0000000
--- a/source/common/unicode/utext.h
+++ /dev/null
@@ -1,1737 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2004-2010, 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"
-#include "unicode/uchar.h"
-#if U_SHOW_CPLUSPLUS_API
-#include "unicode/localpointer.h"
-#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);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUTextPointer
- * "Smart pointer" class, closes a UText via utext_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUTextPointer, UText, utext_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * 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);
-
-
-#if U_SHOW_CPLUSPLUS_API
-/**
- * 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);
-
-
-/**
- * Compare two UTexts (binary order). The comparison begins at each source text's
- * iteration position. The iteration position of each UText will be left following
- * the last character compared.
- *
- * The comparison is done in code point order; unlike u_strCompare, you
- * cannot choose to use code unit order. This is because the characters
- * in a UText are accessed one code point at a time, and may not be from a UTF-16
- * context.
- *
- * This functions works with strings of different explicitly specified lengths
- * unlike the ANSI C-like u_strcmp() and u_memcmp() etc.
- * A length argument of -1 signifies that as much of the string should be used as
- * is necessary to compare with the other string. If both length arguments are -1,
- * the entire remaining portionss of both strings are used.
- *
- * @param s1 First source string.
- * @param length1 Length of first source string in UTF-32 code points.
- *
- * @param s2 Second source string.
- * @param length2 Length of second source string in UTF-32 code points.
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @internal ICU 4.4 technology preview
- */
-U_INTERNAL int32_t U_EXPORT2
-utext_compare(UText *s1, int32_t length1,
-              UText *s2, int32_t length2);    
-
-/**
- * Compare two UTexts (binary order). The comparison begins at each source text's
- * iteration position. The iteration position of each UText will be left following
- * the last character compared. This method differs from utext_compare in that
- * it accepts native limits rather than lengths for each string.
- *
- * The comparison is done in code point order; unlike u_strCompare, you
- * cannot choose to use code unit order. This is because the characters
- * in a UText are accessed one code point at a time, and may not be from a UTF-16
- * context.
- *
- * This functions works with strings of different explicitly specified lengths
- * unlike the ANSI C-like u_strcmp() and u_memcmp() etc.
- * A limit argument of -1 signifies that as much of the string should be used as
- * is necessary to compare with the other string. If both limit arguments are -1,
- * the entire remaining portionss of both strings are used.
- *
- * @param s1 First source string.
- * @param limit1 Native index of the last character in the first source string to be considered.
- *
- * @param s2 Second source string.
- * @param limit2 Native index of the last character in the second source string to be considered.
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @internal ICU 4.4 technology preview
- */
-U_INTERNAL int32_t U_EXPORT2
-utext_compareNativeLimit(UText *s1, int64_t limit1,
-                         UText *s2, int64_t limit2);    
-
-/**
- * Compare two UTexts case-insensitively using full case folding. The comparison
- * begins at each source text's iteration position. The iteration position of each
- * UText will be left following the last character compared.
- *
- * The comparison is done in code point order; this is because the characters
- * in a UText are accessed one code point at a time, and may not be from a UTF-16
- * context.
- *
- * This functions works with strings of different explicitly specified lengths
- * unlike the ANSI C-like u_strcmp() and u_memcmp() etc.
- * A length argument of -1 signifies that as much of the string should be used as
- * is necessary to compare with the other string. If both length arguments are -1,
- * the entire remaining portionss of both strings are used.
- *
- * @param s1 First source string.
- * @param length1 Length of first source string in UTF-32 code points.
- *
- * @param s2 Second source string.
- * @param length2 Length of second source string in UTF-32 code points.
- *
- * @param options A bit set of options:
- *   - U_FOLD_CASE_DEFAULT or 0 is used for default options:
- *     Comparison in code point order with default case folding.
- *
- *   - U_FOLD_CASE_EXCLUDE_SPECIAL_I
- *
- * @param pErrorCode Must be a valid pointer to an error code value,
- *                  which must not indicate a failure before the function call.
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @internal ICU 4.4 technology preview
- */
-U_INTERNAL int32_t U_EXPORT2
-utext_caseCompare(UText *s1, int32_t length1,
-                  UText *s2, int32_t length2,
-                  uint32_t options, UErrorCode *pErrorCode);    
-
-/**
- * Compare two UTexts case-insensitively using full case folding. The comparison
- * begins at each source text's iteration position. The iteration position of each
- * UText will be left following the last character compared. This method differs from
- * utext_caseCompare in that it accepts native limits rather than lengths for each
- * string.
- *
- * The comparison is done in code point order; this is because the characters
- * in a UText are accessed one code point at a time, and may not be from a UTF-16
- * context.
- *
- * This functions works with strings of different explicitly specified lengths
- * unlike the ANSI C-like u_strcmp() and u_memcmp() etc.
- * A limit argument of -1 signifies that as much of the string should be used as
- * is necessary to compare with the other string. If both length arguments are -1,
- * the entire remaining portionss of both strings are used.
- *
- * @param s1 First source string.
- * @param limit1 Native index of the last character in the first source string to be considered.
- *
- * @param s2 Second source string.
- * @param limit2 Native index of the last character in the second source string to be considered.
- *
- * @param options A bit set of options:
- *   - U_FOLD_CASE_DEFAULT or 0 is used for default options:
- *     Comparison in code point order with default case folding.
- *
- *   - U_FOLD_CASE_EXCLUDE_SPECIAL_I
- *
- * @param pErrorCode Must be a valid pointer to an error code value,
- *                  which must not indicate a failure before the function call.
- *
- * @return <0 or 0 or >0 as usual for string comparisons
- *
- * @internal ICU 4.4 technology preview
- */
-U_INTERNAL int32_t U_EXPORT2
-utext_caseCompareNativeLimit(UText *s1, int64_t limit1,
-                             UText *s2, int64_t limit2,
-                             uint32_t options, UErrorCode *pErrorCode);    
-
-
-/************************************************************************************
- *
- *  #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_current32(), for performance-critical situations.
- *
- * Get the code point at the current iteration position of the UText.
- * Returns U_SENTINEL (-1) if the position is at the end of the
- * text.
- *
- * @internal ICU 4.4 technology preview
- */
-#define UTEXT_CURRENT32(ut)  \
-    ((ut)->chunkOffset < (ut)->chunkLength && ((ut)->chunkContents)[(ut)->chunkOffset]<0xd800 ? \
-    ((ut)->chunkContents)[((ut)->chunkOffset)] : utext_current32(ut))
-
-/**
- * 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 3.8
-  */
-#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
diff --git a/source/common/unicode/utf.h b/source/common/unicode/utf.h
deleted file mode 100644
index f794799..0000000
--- a/source/common/unicode/utf.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2010, 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)
-
-/**
- * Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
- * is it a trail surrogate?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 4.2
- */
-#define U_IS_SURROGATE_TRAIL(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
diff --git a/source/common/unicode/utf16.h b/source/common/unicode/utf16.h
deleted file mode 100644
index 5079c11..0000000
--- a/source/common/unicode/utf16.h
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2010, 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)
-
-/**
- * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
- * is it a trail surrogate?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 4.2
- */
-#define U16_IS_SURROGATE_TRAIL(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)>(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
diff --git a/source/common/unicode/utf32.h b/source/common/unicode/utf32.h
deleted file mode 100644
index bf63e69..0000000
--- a/source/common/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.
- */
diff --git a/source/common/unicode/utf8.h b/source/common/unicode/utf8.h
deleted file mode 100644
index 6405795..0000000
--- a/source/common/unicode/utf8.h
+++ /dev/null
@@ -1,683 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2009, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  utf8.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999sep13
-*   created by: Markus W. Scherer
-*/
-
-/**
- * \file
- * \brief C API: 8-bit Unicode handling macros
- * 
- * This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings.
- * utf8.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 __UTF8_H__
-#define __UTF8_H__
-
-/* utf.h must be included first. */
-#ifndef __UTF_H__
-#   include "unicode/utf.h"
-#endif
-
-/* internal definitions ----------------------------------------------------- */
-
-/**
- * \var utf8_countTrailBytes
- * Internal array with numbers of trail bytes for any given byte used in
- * lead byte position.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is called by public macros in this file and thus must remain stable,
- * and should not be hidden when other internal functions are hidden (otherwise
- * public macros would fail to compile).
- * @internal
- */
-#ifdef U_UTF8_IMPL
-U_EXPORT const uint8_t 
-#elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION)
-U_CFUNC const uint8_t
-#else
-U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ 
-#endif
-utf8_countTrailBytes[256];
-
-/**
- * Count the trail bytes for a UTF-8 lead byte.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is called by public macros in this file and thus must remain stable.
- * @internal
- */
-#define U8_COUNT_TRAIL_BYTES(leadByte) (utf8_countTrailBytes[(uint8_t)leadByte])
-
-/**
- * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is called by public macros in this file and thus must remain stable.
- * @internal
- */
-#define U8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1)
-
-/**
- * Function for handling "next code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE UChar32 U_EXPORT2
-utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict);
-
-/**
- * Function for handling "append code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE int32_t U_EXPORT2
-utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError);
-
-/**
- * Function for handling "previous code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE UChar32 U_EXPORT2
-utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict);
-
-/**
- * Function for handling "skip backward one code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE int32_t U_EXPORT2
-utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
-
-/* single-code point definitions -------------------------------------------- */
-
-/**
- * Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)?
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U8_IS_SINGLE(c) (((c)&0x80)==0)
-
-/**
- * Is this code unit (byte) a UTF-8 lead byte?
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc0)<0x3e)
-
-/**
- * Is this code unit (byte) a UTF-8 trail byte?
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U8_IS_TRAIL(c) (((c)&0xc0)==0x80)
-
-/**
- * How many code units (bytes) are used for the UTF-8 encoding
- * of this Unicode code point?
- * @param c 32-bit code point
- * @return 1..4, or 0 if c is a surrogate or not a Unicode code point
- * @stable ICU 2.4
- */
-#define U8_LENGTH(c) \
-    ((uint32_t)(c)<=0x7f ? 1 : \
-        ((uint32_t)(c)<=0x7ff ? 2 : \
-            ((uint32_t)(c)<=0xd7ff ? 3 : \
-                ((uint32_t)(c)<=0xdfff || (uint32_t)(c)>0x10ffff ? 0 : \
-                    ((uint32_t)(c)<=0xffff ? 3 : 4)\
-                ) \
-            ) \
-        ) \
-    )
-
-/**
- * The maximum number of UTF-8 code units (bytes) per Unicode code point (U+0000..U+10ffff).
- * @return 4
- * @stable ICU 2.4
- */
-#define U8_MAX_LENGTH 4
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * The offset may point to either the lead byte or one of the trail bytes
- * for a code point, in which case the macro will read all of the bytes
- * for the code point.
- * The result is undefined if the offset points to an illegal UTF-8
- * byte sequence.
- * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U8_GET
- * @stable ICU 2.4
- */
-#define U8_GET_UNSAFE(s, i, c) { \
-    int32_t _u8_get_unsafe_index=(int32_t)(i); \
-    U8_SET_CP_START_UNSAFE(s, _u8_get_unsafe_index); \
-    U8_NEXT_UNSAFE(s, _u8_get_unsafe_index, c); \
-}
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * The offset may point to either the lead byte or one of the trail bytes
- * for a code point, in which case the macro will read all of the bytes
- * for the code point.
- * If the offset points to an illegal UTF-8 byte sequence, then
- * c is set to a negative value.
- * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT.
- *
- * @param s const uint8_t * string
- * @param start starting string offset
- * @param i string offset, must be start<=i<length
- * @param length string length
- * @param c output UChar32 variable, set to <0 in case of an error
- * @see U8_GET_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_GET(s, start, i, length, c) { \
-    int32_t _u8_get_index=(int32_t)(i); \
-    U8_SET_CP_START(s, start, _u8_get_index); \
-    U8_NEXT(s, _u8_get_index, length, 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-8.
- *
- * The offset may point to the lead byte of a multi-byte sequence,
- * in which case the macro will read the whole sequence.
- * The result is undefined if the offset points to a trail byte
- * or an illegal UTF-8 sequence.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U8_NEXT
- * @stable ICU 2.4
- */
-#define U8_NEXT_UNSAFE(s, i, c) { \
-    (c)=(uint8_t)(s)[(i)++]; \
-    if((uint8_t)((c)-0xc0)<0x35) { \
-        uint8_t __count=U8_COUNT_TRAIL_BYTES(c); \
-        U8_MASK_LEAD_BYTE(c, __count); \
-        switch(__count) { \
-        /* each following branch falls through to the next one */ \
-        case 3: \
-            (c)=((c)<<6)|((s)[(i)++]&0x3f); \
-        case 2: \
-            (c)=((c)<<6)|((s)[(i)++]&0x3f); \
-        case 1: \
-            (c)=((c)<<6)|((s)[(i)++]&0x3f); \
-        /* no other branches to optimize switch() */ \
-            break; \
-        } \
-    } \
-}
-
-/**
- * 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, checks for illegal sequences and for string boundaries.
- *
- * The offset may point to the lead byte of a multi-byte sequence,
- * in which case the macro will read the whole sequence.
- * If the offset points to a trail byte or an illegal UTF-8 sequence, then
- * c is set to a negative value.
- *
- * @param s const uint8_t * string
- * @param i string offset, must be i<length
- * @param length string length
- * @param c output UChar32 variable, set to <0 in case of an error
- * @see U8_NEXT_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_NEXT(s, i, length, c) { \
-    (c)=(uint8_t)(s)[(i)++]; \
-    if((c)>=0x80) { \
-        uint8_t __t1, __t2; \
-        if( /* handle U+1000..U+CFFF inline */ \
-            (0xe0<(c) && (c)<=0xec) && \
-            (((i)+1)<(length)) && \
-            (__t1=(uint8_t)((s)[i]-0x80))<=0x3f && \
-            (__t2=(uint8_t)((s)[(i)+1]-0x80))<= 0x3f \
-        ) { \
-            /* no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ \
-            (c)=(UChar)(((c)<<12)|(__t1<<6)|__t2); \
-            (i)+=2; \
-        } else if( /* handle U+0080..U+07FF inline */ \
-            ((c)<0xe0 && (c)>=0xc2) && \
-            ((i)<(length)) && \
-            (__t1=(uint8_t)((s)[i]-0x80))<=0x3f \
-        ) { \
-            (c)=(UChar)((((c)&0x1f)<<6)|__t1); \
-            ++(i); \
-        } else if(U8_IS_LEAD(c)) { \
-            /* function call for "complicated" and error cases */ \
-            (c)=utf8_nextCharSafeBody((const uint8_t *)s, &(i), (int32_t)(length), c, -1); \
-        } else { \
-            (c)=U_SENTINEL; \
-        } \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 to 4 bytes.
- * 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 uint8_t * string buffer
- * @param i string offset
- * @param c code point to append
- * @see U8_APPEND
- * @stable ICU 2.4
- */
-#define U8_APPEND_UNSAFE(s, i, c) { \
-    if((uint32_t)(c)<=0x7f) { \
-        (s)[(i)++]=(uint8_t)(c); \
-    } else { \
-        if((uint32_t)(c)<=0x7ff) { \
-            (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \
-        } else { \
-            if((uint32_t)(c)<=0xffff) { \
-                (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \
-            } else { \
-                (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); \
-                (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); \
-            } \
-            (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \
-        } \
-        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 to 4 bytes.
- * 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 non-ASCII code point is written, checks for sufficient space in the string.
- * If the code point is not valid or trail bytes do not fit,
- * then isError is set to TRUE.
- *
- * @param s const uint8_t * 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 U8_APPEND_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_APPEND(s, i, capacity, c, isError) { \
-    if((uint32_t)(c)<=0x7f) { \
-        (s)[(i)++]=(uint8_t)(c); \
-    } else if((uint32_t)(c)<=0x7ff && (i)+1<(capacity)) { \
-        (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \
-        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
-    } else if((uint32_t)(c)<=0xd7ff && (i)+2<(capacity)) { \
-        (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \
-        (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \
-        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
-    } else { \
-        (i)=utf8_appendCharSafeBody(s, (int32_t)(i), (int32_t)(capacity), c, &(isError)); \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the next.
- * (Post-incrementing iteration.)
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_FWD_1
- * @stable ICU 2.4
- */
-#define U8_FWD_1_UNSAFE(s, i) { \
-    (i)+=1+U8_COUNT_TRAIL_BYTES((s)[i]); \
-}
-
-/**
- * Advance the string offset from one code point boundary to the next.
- * (Post-incrementing iteration.)
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param i string offset, must be i<length
- * @param length string length
- * @see U8_FWD_1_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_FWD_1(s, i, length) { \
-    uint8_t __b=(uint8_t)(s)[(i)++]; \
-    if(U8_IS_LEAD(__b)) { \
-        uint8_t __count=U8_COUNT_TRAIL_BYTES(__b); \
-        if((i)+__count>(length)) { \
-            __count=(uint8_t)((length)-(i)); \
-        } \
-        while(__count>0 && U8_IS_TRAIL((s)[i])) { \
-            ++(i); \
-            --__count; \
-        } \
-    } \
-}
-
-/**
- * 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-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param n number of code points to skip
- * @see U8_FWD_N
- * @stable ICU 2.4
- */
-#define U8_FWD_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        U8_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, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param i string offset, must be i<length
- * @param length string length
- * @param n number of code points to skip
- * @see U8_FWD_N_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_FWD_N(s, i, length, n) { \
-    int32_t __N=(n); \
-    while(__N>0 && (i)<(length)) { \
-        U8_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 a UTF-8 trail byte,
- * then the offset is moved backward to the corresponding lead byte.
- * Otherwise, it is not modified.
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_SET_CP_START
- * @stable ICU 2.4
- */
-#define U8_SET_CP_START_UNSAFE(s, i) { \
-    while(U8_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 a UTF-8 trail byte,
- * then the offset is moved backward to the corresponding lead byte.
- * Otherwise, it is not modified.
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<=i
- * @see U8_SET_CP_START_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_SET_CP_START(s, start, i) { \
-    if(U8_IS_TRAIL((s)[(i)])) { \
-        (i)=utf8_back1SafeBody(s, start, (int32_t)(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-8.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a multi-byte sequence, then the macro will read
- * the whole sequence.
- * If the offset is behind a lead byte, then that itself
- * will be returned as the code point.
- * The result is undefined if the offset is behind an illegal UTF-8 sequence.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U8_PREV
- * @stable ICU 2.4
- */
-#define U8_PREV_UNSAFE(s, i, c) { \
-    (c)=(uint8_t)(s)[--(i)]; \
-    if(U8_IS_TRAIL(c)) { \
-        uint8_t __b, __count=1, __shift=6; \
-\
-        /* c is a trail byte */ \
-        (c)&=0x3f; \
-        for(;;) { \
-            __b=(uint8_t)(s)[--(i)]; \
-            if(__b>=0xc0) { \
-                U8_MASK_LEAD_BYTE(__b, __count); \
-                (c)|=(UChar32)__b<<__shift; \
-                break; \
-            } else { \
-                (c)|=(UChar32)(__b&0x3f)<<__shift; \
-                ++__count; \
-                __shift+=6; \
-            } \
-        } \
-    } \
-}
-
-/**
- * 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, checks for illegal sequences and for string boundaries.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a multi-byte sequence, then the macro will read
- * the whole sequence.
- * If the offset is behind a lead byte, then that itself
- * will be returned as the code point.
- * If the offset is behind an illegal UTF-8 sequence, then c is set to a negative value.
- *
- * @param s const uint8_t * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<i
- * @param c output UChar32 variable, set to <0 in case of an error
- * @see U8_PREV_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_PREV(s, start, i, c) { \
-    (c)=(uint8_t)(s)[--(i)]; \
-    if((c)>=0x80) { \
-        if((c)<=0xbf) { \
-            (c)=utf8_prevCharSafeBody((const uint8_t *)s, start, &(i), c, -1); \
-        } else { \
-            (c)=U_SENTINEL; \
-        } \
-    } \
-}
-
-/**
- * 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-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_BACK_1
- * @stable ICU 2.4
- */
-#define U8_BACK_1_UNSAFE(s, i) { \
-    while(U8_IS_TRAIL((s)[--(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, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<i
- * @see U8_BACK_1_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_BACK_1(s, start, i) { \
-    if(U8_IS_TRAIL((s)[--(i)])) { \
-        (i)=utf8_back1SafeBody(s, start, (int32_t)(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-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param n number of code points to skip
- * @see U8_BACK_N
- * @stable ICU 2.4
- */
-#define U8_BACK_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        U8_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, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param start index of the start of the string
- * @param i string offset, must be start<i
- * @param n number of code points to skip
- * @see U8_BACK_N_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_BACK_N(s, start, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0 && (i)>(start)) { \
-        U8_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 a partial multi-byte sequence,
- * then the offset is incremented to behind the whole sequence.
- * Otherwise, it is not modified.
- * The input offset may be the same as the string length.
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_SET_CP_LIMIT
- * @stable ICU 2.4
- */
-#define U8_SET_CP_LIMIT_UNSAFE(s, i) { \
-    U8_BACK_1_UNSAFE(s, i); \
-    U8_FWD_1_UNSAFE(s, i); \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary after a code point.
- * If the offset is behind a partial multi-byte sequence,
- * then the offset is incremented to behind the whole sequence.
- * Otherwise, it is not modified.
- * The input offset may be the same as the string length.
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<=i<=length
- * @param length string length
- * @see U8_SET_CP_LIMIT_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_SET_CP_LIMIT(s, start, i, length) { \
-    if((start)<(i) && (i)<(length)) { \
-        U8_BACK_1(s, start, i); \
-        U8_FWD_1(s, i, length); \
-    } \
-}
-
-#endif
diff --git a/source/common/unicode/utf_old.h b/source/common/unicode/utf_old.h
deleted file mode 100644
index b360b34..0000000
--- a/source/common/unicode/utf_old.h
+++ /dev/null
@@ -1,1173 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2008, 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: 2002sep21
-*   created by: Markus W. Scherer
-*/
-
-/**
- * \file 
- * \brief C API: Deprecated macros for Unicode string handling
- */
-
-/**
- * 
- * The macros in utf_old.h are all deprecated and their use discouraged.
- * Some of the design principles behind the set of UTF macros
- * have changed or proved impractical.
- * Almost all of the old "UTF macros" are at least renamed.
- * If you are looking for a new equivalent to an old macro, please see the
- * comment at the old one.
- *
- * utf_old.h is included by utf.h after unicode/umachine.h
- * and some common definitions, to not break old code.
- *
- * Brief summary of reasons for deprecation:
- * - Switch on UTF_SIZE (selection of UTF-8/16/32 default string processing)
- *   was impractical.
- * - Switch on UTF_SAFE etc. (selection of unsafe/safe/strict default string processing)
- *   was of little use and impractical.
- * - Whole classes of macros became obsolete outside of the UTF_SIZE/UTF_SAFE
- *   selection framework: UTF32_ macros (all trivial)
- *   and UTF_ default and intermediate macros (all aliases).
- * - The selection framework also caused many macro aliases.
- * - Change in Unicode standard: "irregular" sequences (3.0) became illegal (3.2).
- * - Change of language in Unicode standard:
- *   Growing distinction between internal x-bit Unicode strings and external UTF-x
- *   forms, with the former more lenient.
- *   Suggests renaming of UTF16_ macros to U16_.
- * - The prefix "UTF_" without a width number confused some users.
- * - "Safe" append macros needed the addition of an error indicator output.
- * - "Safe" UTF-8 macros used legitimate (if rarely used) code point values
- *   to indicate error conditions.
- * - The use of the "_CHAR" infix for code point operations confused some users.
- *
- * More details:
- *
- * Until ICU 2.2, utf.h theoretically allowed to choose among UTF-8/16/32
- * for string processing, and among unsafe/safe/strict default macros for that.
- *
- * It proved nearly impossible to write non-trivial, high-performance code
- * that is UTF-generic.
- * Unsafe default macros would be dangerous for default string processing,
- * and the main reason for the "strict" versions disappeared:
- * Between Unicode 3.0 and 3.2 all "irregular" UTF-8 sequences became illegal.
- * The only other conditions that "strict" checked for were non-characters,
- * which are valid during processing. Only during text input/output should they
- * be checked, and at that time other well-formedness checks may be
- * necessary or useful as well.
- * This can still be done by using U16_NEXT and U_IS_UNICODE_NONCHAR
- * or U_IS_UNICODE_CHAR.
- *
- * The old UTF8_..._SAFE macros also used some normal Unicode code points
- * to indicate malformed sequences.
- * The new UTF8_ macros without suffix use negative values instead.
- *
- * The entire contents of utf32.h was moved here without replacement
- * because all those macros were trivial and
- * were meaningful only in the framework of choosing the UTF size.
- *
- * See Jitterbug 2150 and its discussion on the ICU mailing list
- * in September 2002.
- *
- * <hr>
- *
- * <em>Obsolete part</em> of pre-ICU 2.4 utf.h file documentation:
- *
- * <p>The original concept for these files was for ICU to allow
- * in principle to set which UTF (UTF-8/16/32) is used internally
- * by defining UTF_SIZE to either 8, 16, or 32. utf.h would then define the UChar type
- * accordingly. UTF-16 was the default.</p>
- *
- * <p>This concept has been abandoned.
- * A lot of the ICU source code assumes UChar strings are in UTF-16.
- * This is especially true for low-level code like
- * conversion, normalization, and collation.
- * The utf.h header enforces the default of UTF-16.
- * The UTF-8 and UTF-32 macros remain for now for completeness and backward compatibility.</p>
- *
- * <p>Accordingly, 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.</p>
- *
- * <p>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.</p>
- *
- * <p>utf.h also defines a number of C macros for handling single Unicode code points and
- * for using UTF Unicode strings. It includes utf8.h, utf16.h, and utf32.h for the actual
- * implementations of those macros and then aliases one set of them (for UTF-16) for general use.
- * The UTF-specific macros have the UTF size in the macro name prefixes (UTF16_...), while
- * the general alias macros always begin with UTF_...</p>
- *
- * <p>Many string operations can be done with or without error checking.
- * Where such a distinction is useful, there are two versions of the macros, "unsafe" and "safe"
- * ones with ..._UNSAFE and ..._SAFE suffixes. The unsafe macros are fast but may cause
- * program failures if the strings are not well-formed. The safe macros have an additional, boolean
- * parameter "strict". If strict is FALSE, then only illegal sequences are detected.
- * Otherwise, irregular sequences and non-characters are detected as well (like single surrogates).
- * Safe macros return special error code points for illegal/irregular sequences:
- * Typically, U+ffff, or values that would result in a code unit sequence of the same length
- * as the erroneous input sequence.<br>
- * Note that _UNSAFE macros have fewer parameters: They do not have the strictness parameter, and
- * they do not have start/length parameters for boundary checking.</p>
- *
- * <p>Here, the macros are aliased in two steps:
- * In the first step, the UTF-specific macros with UTF16_ prefix and _UNSAFE and _SAFE suffixes are
- * aliased according to the UTF_SIZE to macros with UTF_ prefix and the same suffixes and signatures.
- * Then, in a second step, the default, general alias macros are set to use either the unsafe or
- * the safe/not strict (default) or the safe/strict macro;
- * these general macros do not have a strictness parameter.</p>
- *
- * <p>It is possible to change the default choice for the general alias macros to be unsafe, safe/not strict or safe/strict.
- * The default is safe/not strict. It is not recommended to select the unsafe macros as the basis for
- * Unicode string handling in ICU! To select this, define UTF_SAFE, UTF_STRICT, or UTF_UNSAFE.</p>
- *
- * <p>For general use, one should use the default, general macros with UTF_ prefix and no _SAFE/_UNSAFE suffix.
- * Only in some cases it may be necessary to control the choice of macro directly and use a less generic alias.
- * For example, if it can be assumed that a string is well-formed and the index will stay within the bounds,
- * then the _UNSAFE version may be used.
- * If a UTF-8 string is to be processed, then the macros with UTF8_ prefixes need to be used.</p>
- *
- * <hr>
- *
- * @deprecated ICU 2.4. Use the macros in utf.h, utf16.h, utf8.h instead.
- */
-
-#ifndef __UTF_OLD_H__
-#define __UTF_OLD_H__
-
-#ifndef U_HIDE_DEPRECATED_API
-
-/* utf.h must be included first. */
-#ifndef __UTF_H__
-#   include "unicode/utf.h"
-#endif
-
-/* Formerly utf.h, part 1 --------------------------------------------------- */
-
-#ifdef U_USE_UTF_DEPRECATES
-/**
- * Unicode string and array offset and index type.
- * ICU always counts Unicode code units (UChars) for
- * string offsets, indexes, and lengths, not Unicode code points.
- *
- * @obsolete ICU 2.6. Use int32_t directly instead since this API will be removed in that release.
- */
-typedef int32_t UTextOffset;
-#endif
-
-/** Number of bits in a Unicode string code unit - ICU uses 16-bit Unicode. @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF_SIZE 16
-
-/**
- * The default choice for general Unicode string macros is to use the ..._SAFE macro implementations
- * with strict=FALSE.
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF_SAFE
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#undef UTF_UNSAFE
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#undef UTF_STRICT
-
-/**
- * UTF8_ERROR_VALUE_1 and UTF8_ERROR_VALUE_2 are special error values for UTF-8,
- * which need 1 or 2 bytes in UTF-8:
- * \code
- * U+0015 = NAK = Negative Acknowledge, C0 control character
- * U+009f = highest C1 control character
- * \endcode
- *
- * These are used by UTF8_..._SAFE macros so that they can return an error value
- * that needs the same number of code units (bytes) as were seen by
- * a macro. They should be tested with UTF_IS_ERROR() or UTF_IS_VALID().
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF8_ERROR_VALUE_1 0x15
-
-/**
- * See documentation on UTF8_ERROR_VALUE_1 for details.
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF8_ERROR_VALUE_2 0x9f
-
-/**
- * Error value for all UTFs. This code point value will be set by macros with error
- * checking if an error is detected.
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF_ERROR_VALUE 0xffff
-
-/**
- * Is a given 32-bit code an error value
- * as returned by one of the macros for any UTF?
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF_IS_ERROR(c) \
-    (((c)&0xfffe)==0xfffe || (c)==UTF8_ERROR_VALUE_1 || (c)==UTF8_ERROR_VALUE_2)
-
-/**
- * This is a combined macro: Is c a valid Unicode value _and_ not an error code?
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF_IS_VALID(c) \
-    (UTF_IS_UNICODE_CHAR(c) && \
-     (c)!=UTF8_ERROR_VALUE_1 && (c)!=UTF8_ERROR_VALUE_2)
-
-/**
- * Is this code unit or code point a surrogate (U+d800..U+dfff)?
- * @deprecated ICU 2.4. Renamed to U_IS_SURROGATE and U16_IS_SURROGATE, see utf_old.h.
- */
-#define UTF_IS_SURROGATE(uchar) (((uchar)&0xfffff800)==0xd800)
-
-/**
- * Is a given 32-bit code point a Unicode noncharacter?
- *
- * @deprecated ICU 2.4. Renamed to U_IS_UNICODE_NONCHAR, see utf_old.h.
- */
-#define UTF_IS_UNICODE_NONCHAR(c) \
-    ((c)>=0xfdd0 && \
-     ((uint32_t)(c)<=0xfdef || ((c)&0xfffe)==0xfffe) && \
-     (uint32_t)(c)<=0x10ffff)
-
-/**
- * Is a given 32-bit value 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.
- *
- * @deprecated ICU 2.4. Renamed to U_IS_UNICODE_CHAR, see utf_old.h.
- */
-#define UTF_IS_UNICODE_CHAR(c) \
-    ((uint32_t)(c)<0xd800 || \
-        ((uint32_t)(c)>0xdfff && \
-         (uint32_t)(c)<=0x10ffff && \
-         !UTF_IS_UNICODE_NONCHAR(c)))
-
-/* Formerly utf8.h ---------------------------------------------------------- */
-
-/**
- * Count the trail bytes for a UTF-8 lead byte.
- * @deprecated ICU 2.4. Renamed to U8_COUNT_TRAIL_BYTES, see utf_old.h.
- */
-#define UTF8_COUNT_TRAIL_BYTES(leadByte) (utf8_countTrailBytes[(uint8_t)leadByte])
-
-/**
- * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value.
- * @deprecated ICU 2.4. Renamed to U8_MASK_LEAD_BYTE, see utf_old.h.
- */
-#define UTF8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1)
-
-/** Is this this code point a single code unit (byte)? @deprecated ICU 2.4. Renamed to U8_IS_SINGLE, see utf_old.h. */
-#define UTF8_IS_SINGLE(uchar) (((uchar)&0x80)==0)
-/** Is this this code unit the lead code unit (byte) of a code point? @deprecated ICU 2.4. Renamed to U8_IS_LEAD, see utf_old.h. */
-#define UTF8_IS_LEAD(uchar) ((uint8_t)((uchar)-0xc0)<0x3e)
-/** Is this this code unit a trailing code unit (byte) of a code point? @deprecated ICU 2.4. Renamed to U8_IS_TRAIL, see utf_old.h. */
-#define UTF8_IS_TRAIL(uchar) (((uchar)&0xc0)==0x80)
-
-/** Does this scalar Unicode value need multiple code units for storage? @deprecated ICU 2.4. Use U8_LENGTH or test ((uint32_t)(c)>0x7f) instead, see utf_old.h. */
-#define UTF8_NEED_MULTIPLE_UCHAR(c) ((uint32_t)(c)>0x7f)
-
-/**
- * Given the lead character, how many bytes are taken by this code point.
- * ICU does not deal with code points >0x10ffff
- * unless necessary for advancing in the byte stream.
- *
- * These length macros take into account that for values >0x10ffff
- * the UTF8_APPEND_CHAR_SAFE macros would write the error code point 0xffff
- * with 3 bytes.
- * Code point comparisons need to be in uint32_t because UChar32
- * may be a signed type, and negative values must be recognized.
- *
- * @deprecated ICU 2.4. Use U8_LENGTH instead, see utf_old.h.
- */
-#if 1
-#   define UTF8_CHAR_LENGTH(c) \
-        ((uint32_t)(c)<=0x7f ? 1 : \
-            ((uint32_t)(c)<=0x7ff ? 2 : \
-                ((uint32_t)((c)-0x10000)>0xfffff ? 3 : 4) \
-            ) \
-        )
-#else
-#   define UTF8_CHAR_LENGTH(c) \
-        ((uint32_t)(c)<=0x7f ? 1 : \
-            ((uint32_t)(c)<=0x7ff ? 2 : \
-                ((uint32_t)(c)<=0xffff ? 3 : \
-                    ((uint32_t)(c)<=0x10ffff ? 4 : \
-                        ((uint32_t)(c)<=0x3ffffff ? 5 : \
-                            ((uint32_t)(c)<=0x7fffffff ? 6 : 3) \
-                        ) \
-                    ) \
-                ) \
-            ) \
-        )
-#endif
-
-/** The maximum number of bytes per code point. @deprecated ICU 2.4. Renamed to U8_MAX_LENGTH, see utf_old.h. */
-#define UTF8_MAX_CHAR_LENGTH 4
-
-/** Average number of code units compared to UTF-16. @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF8_ARRAY_SIZE(size) ((5*(size))/2)
-
-/** @deprecated ICU 2.4. Renamed to U8_GET_UNSAFE, see utf_old.h. */
-#define UTF8_GET_CHAR_UNSAFE(s, i, c) { \
-    int32_t _utf8_get_char_unsafe_index=(int32_t)(i); \
-    UTF8_SET_CHAR_START_UNSAFE(s, _utf8_get_char_unsafe_index); \
-    UTF8_NEXT_CHAR_UNSAFE(s, _utf8_get_char_unsafe_index, c); \
-}
-
-/** @deprecated ICU 2.4. Use U8_GET instead, see utf_old.h. */
-#define UTF8_GET_CHAR_SAFE(s, start, i, length, c, strict) { \
-    int32_t _utf8_get_char_safe_index=(int32_t)(i); \
-    UTF8_SET_CHAR_START_SAFE(s, start, _utf8_get_char_safe_index); \
-    UTF8_NEXT_CHAR_SAFE(s, _utf8_get_char_safe_index, length, c, strict); \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_NEXT_UNSAFE, see utf_old.h. */
-#define UTF8_NEXT_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[(i)++]; \
-    if((uint8_t)((c)-0xc0)<0x35) { \
-        uint8_t __count=UTF8_COUNT_TRAIL_BYTES(c); \
-        UTF8_MASK_LEAD_BYTE(c, __count); \
-        switch(__count) { \
-        /* each following branch falls through to the next one */ \
-        case 3: \
-            (c)=((c)<<6)|((s)[(i)++]&0x3f); \
-        case 2: \
-            (c)=((c)<<6)|((s)[(i)++]&0x3f); \
-        case 1: \
-            (c)=((c)<<6)|((s)[(i)++]&0x3f); \
-        /* no other branches to optimize switch() */ \
-            break; \
-        } \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_APPEND_UNSAFE, see utf_old.h. */
-#define UTF8_APPEND_CHAR_UNSAFE(s, i, c) { \
-    if((uint32_t)(c)<=0x7f) { \
-        (s)[(i)++]=(uint8_t)(c); \
-    } else { \
-        if((uint32_t)(c)<=0x7ff) { \
-            (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \
-        } else { \
-            if((uint32_t)(c)<=0xffff) { \
-                (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \
-            } else { \
-                (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); \
-                (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); \
-            } \
-            (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \
-        } \
-        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_FWD_1_UNSAFE, see utf_old.h. */
-#define UTF8_FWD_1_UNSAFE(s, i) { \
-    (i)+=1+UTF8_COUNT_TRAIL_BYTES((s)[i]); \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_FWD_N_UNSAFE, see utf_old.h. */
-#define UTF8_FWD_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        UTF8_FWD_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_SET_CP_START_UNSAFE, see utf_old.h. */
-#define UTF8_SET_CHAR_START_UNSAFE(s, i) { \
-    while(UTF8_IS_TRAIL((s)[i])) { --(i); } \
-}
-
-/** @deprecated ICU 2.4. Use U8_NEXT instead, see utf_old.h. */
-#define UTF8_NEXT_CHAR_SAFE(s, i, length, c, strict) { \
-    (c)=(s)[(i)++]; \
-    if((c)>=0x80) { \
-        if(UTF8_IS_LEAD(c)) { \
-            (c)=utf8_nextCharSafeBody(s, &(i), (int32_t)(length), c, strict); \
-        } else { \
-            (c)=UTF8_ERROR_VALUE_1; \
-        } \
-    } \
-}
-
-/** @deprecated ICU 2.4. Use U8_APPEND instead, see utf_old.h. */
-#define UTF8_APPEND_CHAR_SAFE(s, i, length, c)  { \
-    if((uint32_t)(c)<=0x7f) { \
-        (s)[(i)++]=(uint8_t)(c); \
-    } else { \
-        (i)=utf8_appendCharSafeBody(s, (int32_t)(i), (int32_t)(length), c, NULL); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_FWD_1, see utf_old.h. */
-#define UTF8_FWD_1_SAFE(s, i, length) U8_FWD_1(s, i, length)
-
-/** @deprecated ICU 2.4. Renamed to U8_FWD_N, see utf_old.h. */
-#define UTF8_FWD_N_SAFE(s, i, length, n) U8_FWD_N(s, i, length, n)
-
-/** @deprecated ICU 2.4. Renamed to U8_SET_CP_START, see utf_old.h. */
-#define UTF8_SET_CHAR_START_SAFE(s, start, i) U8_SET_CP_START(s, start, i)
-
-/** @deprecated ICU 2.4. Renamed to U8_PREV_UNSAFE, see utf_old.h. */
-#define UTF8_PREV_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[--(i)]; \
-    if(UTF8_IS_TRAIL(c)) { \
-        uint8_t __b, __count=1, __shift=6; \
-\
-        /* c is a trail byte */ \
-        (c)&=0x3f; \
-        for(;;) { \
-            __b=(s)[--(i)]; \
-            if(__b>=0xc0) { \
-                UTF8_MASK_LEAD_BYTE(__b, __count); \
-                (c)|=(UChar32)__b<<__shift; \
-                break; \
-            } else { \
-                (c)|=(UChar32)(__b&0x3f)<<__shift; \
-                ++__count; \
-                __shift+=6; \
-            } \
-        } \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_BACK_1_UNSAFE, see utf_old.h. */
-#define UTF8_BACK_1_UNSAFE(s, i) { \
-    while(UTF8_IS_TRAIL((s)[--(i)])) {} \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_BACK_N_UNSAFE, see utf_old.h. */
-#define UTF8_BACK_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        UTF8_BACK_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_SET_CP_LIMIT_UNSAFE, see utf_old.h. */
-#define UTF8_SET_CHAR_LIMIT_UNSAFE(s, i) { \
-    UTF8_BACK_1_UNSAFE(s, i); \
-    UTF8_FWD_1_UNSAFE(s, i); \
-}
-
-/** @deprecated ICU 2.4. Use U8_PREV instead, see utf_old.h. */
-#define UTF8_PREV_CHAR_SAFE(s, start, i, c, strict) { \
-    (c)=(s)[--(i)]; \
-    if((c)>=0x80) { \
-        if((c)<=0xbf) { \
-            (c)=utf8_prevCharSafeBody(s, start, &(i), c, strict); \
-        } else { \
-            (c)=UTF8_ERROR_VALUE_1; \
-        } \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U8_BACK_1, see utf_old.h. */
-#define UTF8_BACK_1_SAFE(s, start, i) U8_BACK_1(s, start, i)
-
-/** @deprecated ICU 2.4. Renamed to U8_BACK_N, see utf_old.h. */
-#define UTF8_BACK_N_SAFE(s, start, i, n) U8_BACK_N(s, start, i, n)
-
-/** @deprecated ICU 2.4. Renamed to U8_SET_CP_LIMIT, see utf_old.h. */
-#define UTF8_SET_CHAR_LIMIT_SAFE(s, start, i, length) U8_SET_CP_LIMIT(s, start, i, length)
-
-/* Formerly utf16.h --------------------------------------------------------- */
-
-/** Is uchar a first/lead surrogate? @deprecated ICU 2.4. Renamed to U_IS_LEAD and U16_IS_LEAD, see utf_old.h. */
-#define UTF_IS_FIRST_SURROGATE(uchar) (((uchar)&0xfffffc00)==0xd800)
-
-/** Is uchar a second/trail surrogate? @deprecated ICU 2.4. Renamed to U_IS_TRAIL and U16_IS_TRAIL, see utf_old.h. */
-#define UTF_IS_SECOND_SURROGATE(uchar) (((uchar)&0xfffffc00)==0xdc00)
-
-/** Assuming c is a surrogate, is it a first/lead surrogate? @deprecated ICU 2.4. Renamed to U_IS_SURROGATE_LEAD and U16_IS_SURROGATE_LEAD, see utf_old.h. */
-#define UTF_IS_SURROGATE_FIRST(c) (((c)&0x400)==0)
-
-/** Helper constant for UTF16_GET_PAIR_VALUE. @deprecated ICU 2.4. Renamed to U16_SURROGATE_OFFSET, see utf_old.h. */
-#define UTF_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
-
-/** Get the UTF-32 value from the surrogate code units. @deprecated ICU 2.4. Renamed to U16_GET_SUPPLEMENTARY, see utf_old.h. */
-#define UTF16_GET_PAIR_VALUE(first, second) \
-    (((first)<<10UL)+(second)-UTF_SURROGATE_OFFSET)
-
-/** @deprecated ICU 2.4. Renamed to U16_LEAD, see utf_old.h. */
-#define UTF_FIRST_SURROGATE(supplementary) (UChar)(((supplementary)>>10)+0xd7c0)
-
-/** @deprecated ICU 2.4. Renamed to U16_TRAIL, see utf_old.h. */
-#define UTF_SECOND_SURROGATE(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
-
-/** @deprecated ICU 2.4. Renamed to U16_LEAD, see utf_old.h. */
-#define UTF16_LEAD(supplementary) UTF_FIRST_SURROGATE(supplementary)
-
-/** @deprecated ICU 2.4. Renamed to U16_TRAIL, see utf_old.h. */
-#define UTF16_TRAIL(supplementary) UTF_SECOND_SURROGATE(supplementary)
-
-/** @deprecated ICU 2.4. Renamed to U16_IS_SINGLE, see utf_old.h. */
-#define UTF16_IS_SINGLE(uchar) !UTF_IS_SURROGATE(uchar)
-
-/** @deprecated ICU 2.4. Renamed to U16_IS_LEAD, see utf_old.h. */
-#define UTF16_IS_LEAD(uchar) UTF_IS_FIRST_SURROGATE(uchar)
-
-/** @deprecated ICU 2.4. Renamed to U16_IS_TRAIL, see utf_old.h. */
-#define UTF16_IS_TRAIL(uchar) UTF_IS_SECOND_SURROGATE(uchar)
-
-/** Does this scalar Unicode value need multiple code units for storage? @deprecated ICU 2.4. Use U16_LENGTH or test ((uint32_t)(c)>0xffff) instead, see utf_old.h. */
-#define UTF16_NEED_MULTIPLE_UCHAR(c) ((uint32_t)(c)>0xffff)
-
-/** @deprecated ICU 2.4. Renamed to U16_LENGTH, see utf_old.h. */
-#define UTF16_CHAR_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
-
-/** @deprecated ICU 2.4. Renamed to U16_MAX_LENGTH, see utf_old.h. */
-#define UTF16_MAX_CHAR_LENGTH 2
-
-/** Average number of code units compared to UTF-16. @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF16_ARRAY_SIZE(size) (size)
-
-/**
- * Get a single code point from an offset that points to any
- * of the code units that belong to that code point.
- * Assume 0<=i<length.
- *
- * This could be used for iteration together with
- * UTF16_CHAR_LENGTH() and UTF_IS_ERROR(),
- * but the use of UTF16_NEXT_CHAR[_UNSAFE]() and
- * UTF16_PREV_CHAR[_UNSAFE]() is more efficient for that.
- * @deprecated ICU 2.4. Renamed to U16_GET_UNSAFE, see utf_old.h.
- */
-#define UTF16_GET_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[i]; \
-    if(UTF_IS_SURROGATE(c)) { \
-        if(UTF_IS_SURROGATE_FIRST(c)) { \
-            (c)=UTF16_GET_PAIR_VALUE((c), (s)[(i)+1]); \
-        } else { \
-            (c)=UTF16_GET_PAIR_VALUE((s)[(i)-1], (c)); \
-        } \
-    } \
-}
-
-/** @deprecated ICU 2.4. Use U16_GET instead, see utf_old.h. */
-#define UTF16_GET_CHAR_SAFE(s, start, i, length, c, strict) { \
-    (c)=(s)[i]; \
-    if(UTF_IS_SURROGATE(c)) { \
-        uint16_t __c2; \
-        if(UTF_IS_SURROGATE_FIRST(c)) { \
-            if((i)+1<(length) && UTF_IS_SECOND_SURROGATE(__c2=(s)[(i)+1])) { \
-                (c)=UTF16_GET_PAIR_VALUE((c), __c2); \
-                /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \
-            } else if(strict) {\
-                /* unmatched first surrogate */ \
-                (c)=UTF_ERROR_VALUE; \
-            } \
-        } else { \
-            if((i)-1>=(start) && UTF_IS_FIRST_SURROGATE(__c2=(s)[(i)-1])) { \
-                (c)=UTF16_GET_PAIR_VALUE(__c2, (c)); \
-                /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \
-            } else if(strict) {\
-                /* unmatched second surrogate */ \
-                (c)=UTF_ERROR_VALUE; \
-            } \
-        } \
-    } else if((strict) && !UTF_IS_UNICODE_CHAR(c)) { \
-        (c)=UTF_ERROR_VALUE; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_NEXT_UNSAFE, see utf_old.h. */
-#define UTF16_NEXT_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[(i)++]; \
-    if(UTF_IS_FIRST_SURROGATE(c)) { \
-        (c)=UTF16_GET_PAIR_VALUE((c), (s)[(i)++]); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_APPEND_UNSAFE, see utf_old.h. */
-#define UTF16_APPEND_CHAR_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); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_1_UNSAFE, see utf_old.h. */
-#define UTF16_FWD_1_UNSAFE(s, i) { \
-    if(UTF_IS_FIRST_SURROGATE((s)[(i)++])) { \
-        ++(i); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_N_UNSAFE, see utf_old.h. */
-#define UTF16_FWD_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        UTF16_FWD_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START_UNSAFE, see utf_old.h. */
-#define UTF16_SET_CHAR_START_UNSAFE(s, i) { \
-    if(UTF_IS_SECOND_SURROGATE((s)[i])) { \
-        --(i); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Use U16_NEXT instead, see utf_old.h. */
-#define UTF16_NEXT_CHAR_SAFE(s, i, length, c, strict) { \
-    (c)=(s)[(i)++]; \
-    if(UTF_IS_FIRST_SURROGATE(c)) { \
-        uint16_t __c2; \
-        if((i)<(length) && UTF_IS_SECOND_SURROGATE(__c2=(s)[(i)])) { \
-            ++(i); \
-            (c)=UTF16_GET_PAIR_VALUE((c), __c2); \
-            /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \
-        } else if(strict) {\
-            /* unmatched first surrogate */ \
-            (c)=UTF_ERROR_VALUE; \
-        } \
-    } else if((strict) && !UTF_IS_UNICODE_CHAR(c)) { \
-        /* unmatched second surrogate or other non-character */ \
-        (c)=UTF_ERROR_VALUE; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Use U16_APPEND instead, see utf_old.h. */
-#define UTF16_APPEND_CHAR_SAFE(s, i, length, c) { \
-    if((uint32_t)(c)<=0xffff) { \
-        (s)[(i)++]=(uint16_t)(c); \
-    } else if((uint32_t)(c)<=0x10ffff) { \
-        if((i)+1<(length)) { \
-            (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
-            (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
-        } else /* not enough space */ { \
-            (s)[(i)++]=UTF_ERROR_VALUE; \
-        } \
-    } else /* c>0x10ffff, write error value */ { \
-        (s)[(i)++]=UTF_ERROR_VALUE; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. */
-#define UTF16_FWD_1_SAFE(s, i, length) U16_FWD_1(s, i, length)
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. */
-#define UTF16_FWD_N_SAFE(s, i, length, n) U16_FWD_N(s, i, length, n)
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. */
-#define UTF16_SET_CHAR_START_SAFE(s, start, i) U16_SET_CP_START(s, start, i)
-
-/** @deprecated ICU 2.4. Renamed to U16_PREV_UNSAFE, see utf_old.h. */
-#define UTF16_PREV_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[--(i)]; \
-    if(UTF_IS_SECOND_SURROGATE(c)) { \
-        (c)=UTF16_GET_PAIR_VALUE((s)[--(i)], (c)); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_1_UNSAFE, see utf_old.h. */
-#define UTF16_BACK_1_UNSAFE(s, i) { \
-    if(UTF_IS_SECOND_SURROGATE((s)[--(i)])) { \
-        --(i); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_N_UNSAFE, see utf_old.h. */
-#define UTF16_BACK_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        UTF16_BACK_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT_UNSAFE, see utf_old.h. */
-#define UTF16_SET_CHAR_LIMIT_UNSAFE(s, i) { \
-    if(UTF_IS_FIRST_SURROGATE((s)[(i)-1])) { \
-        ++(i); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Use U16_PREV instead, see utf_old.h. */
-#define UTF16_PREV_CHAR_SAFE(s, start, i, c, strict) { \
-    (c)=(s)[--(i)]; \
-    if(UTF_IS_SECOND_SURROGATE(c)) { \
-        uint16_t __c2; \
-        if((i)>(start) && UTF_IS_FIRST_SURROGATE(__c2=(s)[(i)-1])) { \
-            --(i); \
-            (c)=UTF16_GET_PAIR_VALUE(__c2, (c)); \
-            /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \
-        } else if(strict) {\
-            /* unmatched second surrogate */ \
-            (c)=UTF_ERROR_VALUE; \
-        } \
-    } else if((strict) && !UTF_IS_UNICODE_CHAR(c)) { \
-        /* unmatched first surrogate or other non-character */ \
-        (c)=UTF_ERROR_VALUE; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. */
-#define UTF16_BACK_1_SAFE(s, start, i) U16_BACK_1(s, start, i)
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. */
-#define UTF16_BACK_N_SAFE(s, start, i, n) U16_BACK_N(s, start, i, n)
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. */
-#define UTF16_SET_CHAR_LIMIT_SAFE(s, start, i, length) U16_SET_CP_LIMIT(s, start, i, length)
-
-/* Formerly utf32.h --------------------------------------------------------- */
-
-/*
-* Old documentation:
-*
-*   This file defines macros to deal with UTF-32 code units and code points.
-*   Signatures and semantics are the same as for the similarly named macros
-*   in utf16.h.
-*   utf32.h is included by utf.h after unicode/umachine.h</p>
-*   and some common definitions.
-*   <p><b>Usage:</b>  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.</p>
-*/
-
-/* internal definitions ----------------------------------------------------- */
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_IS_SAFE(c, strict) \
-    (!(strict) ? \
-        (uint32_t)(c)<=0x10ffff : \
-        UTF_IS_UNICODE_CHAR(c))
-
-/*
- * For the semantics of all of these macros, see utf16.h.
- * The UTF-32 versions are trivial because any code point is
- * encoded using exactly one code unit.
- */
-
-/* single-code point definitions -------------------------------------------- */
-
-/* classes of code unit values */
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_IS_SINGLE(uchar) 1
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_IS_LEAD(uchar) 0
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_IS_TRAIL(uchar) 0
-
-/* number of code units per code point */
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_NEED_MULTIPLE_UCHAR(c) 0
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_CHAR_LENGTH(c) 1
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_MAX_CHAR_LENGTH 1
-
-/* average number of code units compared to UTF-16 */
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_ARRAY_SIZE(size) (size)
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_GET_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[i]; \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_GET_CHAR_SAFE(s, start, i, length, c, strict) { \
-    (c)=(s)[i]; \
-    if(!UTF32_IS_SAFE(c, strict)) { \
-        (c)=UTF_ERROR_VALUE; \
-    } \
-}
-
-/* definitions with forward iteration --------------------------------------- */
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_NEXT_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[(i)++]; \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_APPEND_CHAR_UNSAFE(s, i, c) { \
-    (s)[(i)++]=(c); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_FWD_1_UNSAFE(s, i) { \
-    ++(i); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_FWD_N_UNSAFE(s, i, n) { \
-    (i)+=(n); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_SET_CHAR_START_UNSAFE(s, i) { \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_NEXT_CHAR_SAFE(s, i, length, c, strict) { \
-    (c)=(s)[(i)++]; \
-    if(!UTF32_IS_SAFE(c, strict)) { \
-        (c)=UTF_ERROR_VALUE; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_APPEND_CHAR_SAFE(s, i, length, c) { \
-    if((uint32_t)(c)<=0x10ffff) { \
-        (s)[(i)++]=(c); \
-    } else /* c>0x10ffff, write 0xfffd */ { \
-        (s)[(i)++]=0xfffd; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_FWD_1_SAFE(s, i, length) { \
-    ++(i); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_FWD_N_SAFE(s, i, length, n) { \
-    if(((i)+=(n))>(length)) { \
-        (i)=(length); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_SET_CHAR_START_SAFE(s, start, i) { \
-}
-
-/* definitions with backward iteration -------------------------------------- */
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_PREV_CHAR_UNSAFE(s, i, c) { \
-    (c)=(s)[--(i)]; \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_BACK_1_UNSAFE(s, i) { \
-    --(i); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_BACK_N_UNSAFE(s, i, n) { \
-    (i)-=(n); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_SET_CHAR_LIMIT_UNSAFE(s, i) { \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_PREV_CHAR_SAFE(s, start, i, c, strict) { \
-    (c)=(s)[--(i)]; \
-    if(!UTF32_IS_SAFE(c, strict)) { \
-        (c)=UTF_ERROR_VALUE; \
-    } \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_BACK_1_SAFE(s, start, i) { \
-    --(i); \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_BACK_N_SAFE(s, start, i, n) { \
-    (i)-=(n); \
-    if((i)<(start)) { \
-        (i)=(start); \
-    } \
-}
-
-/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */
-#define UTF32_SET_CHAR_LIMIT_SAFE(s, i, length) { \
-}
-
-/* Formerly utf.h, part 2 --------------------------------------------------- */
-
-/**
- * Estimate the number of code units for a string based on the number of UTF-16 code units.
- *
- * @deprecated ICU 2.4. Obsolete, see utf_old.h.
- */
-#define UTF_ARRAY_SIZE(size) UTF16_ARRAY_SIZE(size)
-
-/** @deprecated ICU 2.4. Renamed to U16_GET_UNSAFE, see utf_old.h. */
-#define UTF_GET_CHAR_UNSAFE(s, i, c)                 UTF16_GET_CHAR_UNSAFE(s, i, c)
-
-/** @deprecated ICU 2.4. Use U16_GET instead, see utf_old.h. */
-#define UTF_GET_CHAR_SAFE(s, start, i, length, c, strict) UTF16_GET_CHAR_SAFE(s, start, i, length, c, strict)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_NEXT_UNSAFE, see utf_old.h. */
-#define UTF_NEXT_CHAR_UNSAFE(s, i, c)                UTF16_NEXT_CHAR_UNSAFE(s, i, c)
-
-/** @deprecated ICU 2.4. Use U16_NEXT instead, see utf_old.h. */
-#define UTF_NEXT_CHAR_SAFE(s, i, length, c, strict)  UTF16_NEXT_CHAR_SAFE(s, i, length, c, strict)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_APPEND_UNSAFE, see utf_old.h. */
-#define UTF_APPEND_CHAR_UNSAFE(s, i, c)              UTF16_APPEND_CHAR_UNSAFE(s, i, c)
-
-/** @deprecated ICU 2.4. Use U16_APPEND instead, see utf_old.h. */
-#define UTF_APPEND_CHAR_SAFE(s, i, length, c)        UTF16_APPEND_CHAR_SAFE(s, i, length, c)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_1_UNSAFE, see utf_old.h. */
-#define UTF_FWD_1_UNSAFE(s, i)                       UTF16_FWD_1_UNSAFE(s, i)
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. */
-#define UTF_FWD_1_SAFE(s, i, length)                 UTF16_FWD_1_SAFE(s, i, length)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_N_UNSAFE, see utf_old.h. */
-#define UTF_FWD_N_UNSAFE(s, i, n)                    UTF16_FWD_N_UNSAFE(s, i, n)
-
-/** @deprecated ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. */
-#define UTF_FWD_N_SAFE(s, i, length, n)              UTF16_FWD_N_SAFE(s, i, length, n)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START_UNSAFE, see utf_old.h. */
-#define UTF_SET_CHAR_START_UNSAFE(s, i)              UTF16_SET_CHAR_START_UNSAFE(s, i)
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. */
-#define UTF_SET_CHAR_START_SAFE(s, start, i)         UTF16_SET_CHAR_START_SAFE(s, start, i)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_PREV_UNSAFE, see utf_old.h. */
-#define UTF_PREV_CHAR_UNSAFE(s, i, c)                UTF16_PREV_CHAR_UNSAFE(s, i, c)
-
-/** @deprecated ICU 2.4. Use U16_PREV instead, see utf_old.h. */
-#define UTF_PREV_CHAR_SAFE(s, start, i, c, strict)   UTF16_PREV_CHAR_SAFE(s, start, i, c, strict)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_1_UNSAFE, see utf_old.h. */
-#define UTF_BACK_1_UNSAFE(s, i)                      UTF16_BACK_1_UNSAFE(s, i)
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. */
-#define UTF_BACK_1_SAFE(s, start, i)                 UTF16_BACK_1_SAFE(s, start, i)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_N_UNSAFE, see utf_old.h. */
-#define UTF_BACK_N_UNSAFE(s, i, n)                   UTF16_BACK_N_UNSAFE(s, i, n)
-
-/** @deprecated ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. */
-#define UTF_BACK_N_SAFE(s, start, i, n)              UTF16_BACK_N_SAFE(s, start, i, n)
-
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT_UNSAFE, see utf_old.h. */
-#define UTF_SET_CHAR_LIMIT_UNSAFE(s, i)              UTF16_SET_CHAR_LIMIT_UNSAFE(s, i)
-
-/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. */
-#define UTF_SET_CHAR_LIMIT_SAFE(s, start, i, length) UTF16_SET_CHAR_LIMIT_SAFE(s, start, i, length)
-
-/* Define default macros (UTF-16 "safe") ------------------------------------ */
-
-/**
- * Does this code unit alone encode a code point (BMP, not a surrogate)?
- * Same as UTF16_IS_SINGLE.
- * @deprecated ICU 2.4. Renamed to U_IS_SINGLE and U16_IS_SINGLE, see utf_old.h.
- */
-#define UTF_IS_SINGLE(uchar) U16_IS_SINGLE(uchar)
-
-/**
- * Is this code unit the first one of several (a lead surrogate)?
- * Same as UTF16_IS_LEAD.
- * @deprecated ICU 2.4. Renamed to U_IS_LEAD and U16_IS_LEAD, see utf_old.h.
- */
-#define UTF_IS_LEAD(uchar) U16_IS_LEAD(uchar)
-
-/**
- * Is this code unit one of several but not the first one (a trail surrogate)?
- * Same as UTF16_IS_TRAIL.
- * @deprecated ICU 2.4. Renamed to U_IS_TRAIL and U16_IS_TRAIL, see utf_old.h.
- */
-#define UTF_IS_TRAIL(uchar) U16_IS_TRAIL(uchar)
-
-/**
- * Does this code point require multiple code units (is it a supplementary code point)?
- * Same as UTF16_NEED_MULTIPLE_UCHAR.
- * @deprecated ICU 2.4. Use U16_LENGTH or test ((uint32_t)(c)>0xffff) instead.
- */
-#define UTF_NEED_MULTIPLE_UCHAR(c) UTF16_NEED_MULTIPLE_UCHAR(c)
-
-/**
- * How many code units are used to encode this code point (1 or 2)?
- * Same as UTF16_CHAR_LENGTH.
- * @deprecated ICU 2.4. Renamed to U16_LENGTH, see utf_old.h.
- */
-#define UTF_CHAR_LENGTH(c) U16_LENGTH(c)
-
-/**
- * How many code units are used at most for any Unicode code point (2)?
- * Same as UTF16_MAX_CHAR_LENGTH.
- * @deprecated ICU 2.4. Renamed to U16_MAX_LENGTH, see utf_old.h.
- */
-#define UTF_MAX_CHAR_LENGTH U16_MAX_LENGTH
-
-/**
- * Set c to the code point that contains the code unit i.
- * i could point to the lead or the trail surrogate for the code point.
- * i is not modified.
- * Same as UTF16_GET_CHAR.
- * \pre 0<=i<length
- *
- * @deprecated ICU 2.4. Renamed to U16_GET, see utf_old.h.
- */
-#define UTF_GET_CHAR(s, start, i, length, c) U16_GET(s, start, i, length, c)
-
-/**
- * Set c to the code point that starts at code unit i
- * and advance i to beyond the code units of this code point (post-increment).
- * i must point to the first code unit of a code point.
- * Otherwise c is set to the trail unit (surrogate) itself.
- * Same as UTF16_NEXT_CHAR.
- * \pre 0<=i<length
- * \post 0<i<=length
- *
- * @deprecated ICU 2.4. Renamed to U16_NEXT, see utf_old.h.
- */
-#define UTF_NEXT_CHAR(s, i, length, c) U16_NEXT(s, i, length, c)
-
-/**
- * Append the code units of code point c to the string at index i
- * and advance i to beyond the new code units (post-increment).
- * The code units beginning at index i will be overwritten.
- * Same as UTF16_APPEND_CHAR.
- * \pre 0<=c<=0x10ffff
- * \pre 0<=i<length
- * \post 0<i<=length
- *
- * @deprecated ICU 2.4. Use U16_APPEND instead, see utf_old.h.
- */
-#define UTF_APPEND_CHAR(s, i, length, c) UTF16_APPEND_CHAR_SAFE(s, i, length, c)
-
-/**
- * Advance i to beyond the code units of the code point that begins at i.
- * I.e., advance i by one code point.
- * Same as UTF16_FWD_1.
- * \pre 0<=i<length
- * \post 0<i<=length
- *
- * @deprecated ICU 2.4. Renamed to U16_FWD_1, see utf_old.h.
- */
-#define UTF_FWD_1(s, i, length) U16_FWD_1(s, i, length)
-
-/**
- * Advance i to beyond the code units of the n code points where the first one begins at i.
- * I.e., advance i by n code points.
- * Same as UT16_FWD_N.
- * \pre 0<=i<length
- * \post 0<i<=length
- *
- * @deprecated ICU 2.4. Renamed to U16_FWD_N, see utf_old.h.
- */
-#define UTF_FWD_N(s, i, length, n) U16_FWD_N(s, i, length, n)
-
-/**
- * Take the random-access index i and adjust it so that it points to the beginning
- * of a code point.
- * The input index points to any code unit of a code point and is moved to point to
- * the first code unit of the same code point. i is never incremented.
- * In other words, if i points to a trail surrogate that is preceded by a matching
- * lead surrogate, then i is decremented. Otherwise it is not modified.
- * This can be used to start an iteration with UTF_NEXT_CHAR() from a random index.
- * Same as UTF16_SET_CHAR_START.
- * \pre start<=i<length
- * \post start<=i<length
- *
- * @deprecated ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h.
- */
-#define UTF_SET_CHAR_START(s, start, i) U16_SET_CP_START(s, start, i)
-
-/**
- * Set c to the code point that has code units before i
- * and move i backward (towards the beginning of the string)
- * to the first code unit of this code point (pre-increment).
- * i must point to the first code unit after the last unit of a code point (i==length is allowed).
- * Same as UTF16_PREV_CHAR.
- * \pre start<i<=length
- * \post start<=i<length
- *
- * @deprecated ICU 2.4. Renamed to U16_PREV, see utf_old.h.
- */
-#define UTF_PREV_CHAR(s, start, i, c) U16_PREV(s, start, i, c)
-
-/**
- * Move i backward (towards the beginning of the string)
- * to the first code unit of the code point that has code units before i.
- * I.e., move i backward by one code point.
- * i must point to the first code unit after the last unit of a code point (i==length is allowed).
- * Same as UTF16_BACK_1.
- * \pre start<i<=length
- * \post start<=i<length
- *
- * @deprecated ICU 2.4. Renamed to U16_BACK_1, see utf_old.h.
- */
-#define UTF_BACK_1(s, start, i) U16_BACK_1(s, start, i)
-
-/**
- * Move i backward (towards the beginning of the string)
- * to the first code unit of the n code points that have code units before i.
- * I.e., move i backward by n code points.
- * i must point to the first code unit after the last unit of a code point (i==length is allowed).
- * Same as UTF16_BACK_N.
- * \pre start<i<=length
- * \post start<=i<length
- *
- * @deprecated ICU 2.4. Renamed to U16_BACK_N, see utf_old.h.
- */
-#define UTF_BACK_N(s, start, i, n) U16_BACK_N(s, start, i, n)
-
-/**
- * Take the random-access index i and adjust it so that it points beyond
- * a code point. The input index points beyond any code unit
- * of a code point and is moved to point beyond the last code unit of the same
- * code point. i is never decremented.
- * In other words, if i points to a trail surrogate that is preceded by a matching
- * lead surrogate, then i is incremented. Otherwise it is not modified.
- * This can be used to start an iteration with UTF_PREV_CHAR() from a random index.
- * Same as UTF16_SET_CHAR_LIMIT.
- * \pre start<i<=length
- * \post start<i<=length
- *
- * @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h.
- */
-#define UTF_SET_CHAR_LIMIT(s, start, i, length) U16_SET_CP_LIMIT(s, start, i, length)
-
-#endif /* U_HIDE_DEPRECATED_API */
-
-#endif
-
diff --git a/source/common/unicode/utrace.h b/source/common/unicode/utrace.h
deleted file mode 100644
index 3c8be9f..0000000
--- a/source/common/unicode/utrace.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2003-2006, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  utrace.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2003aug06
-*   created by: Markus W. Scherer
-*
-*   Definitions for ICU tracing/logging.
-*
-*/
-
-#ifndef __UTRACE_H__
-#define __UTRACE_H__
-
-#include <stdarg.h>
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C API:  Definitions for ICU tracing/logging. 
- *
- * This provides API for debugging the internals of ICU without the use of
- * a traditional debugger.
- *
- * By default, tracing is disabled in ICU. If you need to debug ICU with 
- * tracing, please compile ICU with the --enable-tracing configure option.
- */
- 
-U_CDECL_BEGIN
-
-/**
- * Trace severity levels.  Higher levels increase the verbosity of the trace output.
- * @see utrace_setLevel
- * @stable ICU 2.8
- */
-typedef enum UTraceLevel {
-    /** Disable all tracing  @stable ICU 2.8*/
-    UTRACE_OFF=-1,
-    /** Trace error conditions only  @stable ICU 2.8*/
-    UTRACE_ERROR=0,
-    /** Trace errors and warnings  @stable ICU 2.8*/
-    UTRACE_WARNING=3,
-    /** Trace opens and closes of ICU services  @stable ICU 2.8*/
-    UTRACE_OPEN_CLOSE=5,
-    /** Trace an intermediate number of ICU operations  @stable ICU 2.8*/
-    UTRACE_INFO=7,
-    /** Trace the maximum number of ICU operations  @stable ICU 2.8*/
-    UTRACE_VERBOSE=9
-} UTraceLevel;
-
-/**
- *  These are the ICU functions that will be traced when tracing is enabled.
- *  @stable ICU 2.8
- */
-typedef enum UTraceFunctionNumber {
-    UTRACE_FUNCTION_START=0,
-    UTRACE_U_INIT=UTRACE_FUNCTION_START,
-    UTRACE_U_CLEANUP,
-    UTRACE_FUNCTION_LIMIT,
-
-    UTRACE_CONVERSION_START=0x1000,
-    UTRACE_UCNV_OPEN=UTRACE_CONVERSION_START,
-    UTRACE_UCNV_OPEN_PACKAGE,
-    UTRACE_UCNV_OPEN_ALGORITHMIC,
-    UTRACE_UCNV_CLONE,
-    UTRACE_UCNV_CLOSE,
-    UTRACE_UCNV_FLUSH_CACHE,
-    UTRACE_UCNV_LOAD,
-    UTRACE_UCNV_UNLOAD,
-    UTRACE_CONVERSION_LIMIT,
-
-    UTRACE_COLLATION_START=0x2000,
-    UTRACE_UCOL_OPEN=UTRACE_COLLATION_START,
-    UTRACE_UCOL_CLOSE,
-    UTRACE_UCOL_STRCOLL,
-    UTRACE_UCOL_GET_SORTKEY,
-    UTRACE_UCOL_GETLOCALE,
-    UTRACE_UCOL_NEXTSORTKEYPART,
-    UTRACE_UCOL_STRCOLLITER,
-    UTRACE_UCOL_OPEN_FROM_SHORT_STRING,
-    UTRACE_COLLATION_LIMIT
-} UTraceFunctionNumber;
-
-/**
- * Setter for the trace level.
- * @param traceLevel A UTraceLevel value.
- * @stable ICU 2.8
- */
-U_STABLE void U_EXPORT2
-utrace_setLevel(int32_t traceLevel);
-
-/**
- * Getter for the trace level.
- * @return The UTraceLevel value being used by ICU.
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-utrace_getLevel(void);
-
-/* Trace function pointers types  ----------------------------- */
-
-/**
-  *  Type signature for the trace function to be called when entering a function.
-  *  @param context value supplied at the time the trace functions are set.
-  *  @param fnNumber Enum value indicating the ICU function being entered.
-  *  @stable ICU 2.8
-  */
-typedef void U_CALLCONV
-UTraceEntry(const void *context, int32_t fnNumber);
-
-/**
-  *  Type signature for the trace function to be called when exiting from a function.
-  *  @param context value supplied at the time the trace functions are set.
-  *  @param fnNumber Enum value indicating the ICU function being exited.
-  *  @param fmt     A formatting string that describes the number and types
-  *                 of arguments included with the variable args.  The fmt
-  *                 string has the same form as the utrace_vformat format
-  *                 string.
-  *  @param args    A variable arguments list.  Contents are described by
-  *                 the fmt parameter.
-  *  @see   utrace_vformat
-  *  @stable ICU 2.8
-  */
-typedef void U_CALLCONV
-UTraceExit(const void *context, int32_t fnNumber, 
-           const char *fmt, va_list args);
-
-/**
-  *  Type signature for the trace function to be called from within an ICU function
-  *  to display data or messages.
-  *  @param context  value supplied at the time the trace functions are set.
-  *  @param fnNumber Enum value indicating the ICU function being exited.
-  *  @param level    The current tracing level
-  *  @param fmt      A format string describing the tracing data that is supplied
-  *                  as variable args
-  *  @param args     The data being traced, passed as variable args.
-  *  @stable ICU 2.8
-  */
-typedef void U_CALLCONV
-UTraceData(const void *context, int32_t fnNumber, int32_t level,
-           const char *fmt, va_list args);
-
-/**
-  *  Set ICU Tracing functions.  Installs application-provided tracing
-  *  functions into ICU.  After doing this, subsequent ICU operations
-  *  will call back to the installed functions, providing a trace
-  *  of the use of ICU.  Passing a NULL pointer for a tracing function
-  *  is allowed, and inhibits tracing action at points where that function
-  *  would be called.
-  *  <p>
-  *  Tracing and Threads:  Tracing functions are global to a process, and
-  *  will be called in response to ICU operations performed by any
-  *  thread.  If tracing of an individual thread is desired, the
-  *  tracing functions must themselves filter by checking that the
-  *  current thread is the desired thread.
-  *
-  *  @param context an uninterpretted pointer.  Whatever is passed in
-  *                 here will in turn be passed to each of the tracing
-  *                 functions UTraceEntry, UTraceExit and UTraceData.
-  *                 ICU does not use or alter this pointer.
-  *  @param e       Callback function to be called on entry to a 
-  *                 a traced ICU function.
-  *  @param x       Callback function to be called on exit from a
-  *                 traced ICU function.
-  *  @param d       Callback function to be called from within a 
-  *                 traced ICU function, for the purpose of providing
-  *                 data to the trace.
-  *
-  *  @stable ICU 2.8
-  */
-U_STABLE void U_EXPORT2
-utrace_setFunctions(const void *context,
-                    UTraceEntry *e, UTraceExit *x, UTraceData *d);
-
-/**
-  * Get the currently installed ICU tracing functions.   Note that a null function
-  *   pointer will be returned if no trace function has been set.
-  *
-  * @param context  The currently installed tracing context.
-  * @param e        The currently installed UTraceEntry function.
-  * @param x        The currently installed UTraceExit function.
-  * @param d        The currently installed UTraceData function.
-  * @stable ICU 2.8
-  */
-U_STABLE void U_EXPORT2
-utrace_getFunctions(const void **context,
-                    UTraceEntry **e, UTraceExit **x, UTraceData **d);
-
-
-
-/*
- *
- * ICU trace format string syntax
- *
- * Format Strings are passed to UTraceData functions, and define the
- * number and types of the trace data being passed on each call.
- *
- * The UTraceData function, which is supplied by the application,
- * not by ICU, can either forward the trace data (passed via
- * varargs) and the format string back to ICU for formatting into
- * a displayable string, or it can interpret the format itself,
- * and do as it wishes with the trace data.
- *
- *
- * Goals for the format string
- * - basic data output
- * - easy to use for trace programmer
- * - sufficient provision for data types for trace output readability
- * - well-defined types and binary portable APIs
- *
- * Non-goals
- * - printf compatibility
- * - fancy formatting
- * - argument reordering and other internationalization features
- *
- * ICU trace format strings contain plain text with argument inserts,
- * much like standard printf format strings.
- * Each insert begins with a '%', then optionally contains a 'v',
- * then exactly one type character.
- * Two '%' in a row represent a '%' instead of an insert.
- * The trace format strings need not have \n at the end.
- *
- *
- * Types
- * -----
- *
- * Type characters:
- * - c A char character in the default codepage.
- * - s A NUL-terminated char * string in the default codepage.
- * - S A UChar * string.  Requires two params, (ptr, length).  Length=-1 for nul term.
- * - b A byte (8-bit integer).
- * - h A 16-bit integer.  Also a 16 bit Unicode code unit.
- * - d A 32-bit integer.  Also a 20 bit Unicode code point value. 
- * - l A 64-bit integer.
- * - p A data pointer.
- *
- * Vectors
- * -------
- *
- * If the 'v' is not specified, then one item of the specified type
- * is passed in.
- * If the 'v' (for "vector") is specified, then a vector of items of the
- * specified type is passed in, via a pointer to the first item
- * and an int32_t value for the length of the vector.
- * Length==-1 means zero or NUL termination.  Works for vectors of all types.
- *
- * Note:  %vS is a vector of (UChar *) strings.  The strings must
- *        be nul terminated as there is no way to provide a
- *        separate length parameter for each string.  The length
- *        parameter (required for all vectors) is the number of
- *        strings, not the length of the strings.
- *
- * Examples
- * --------
- *
- * These examples show the parameters that will be passed to an application's
- *   UTraceData() function for various formats.
- *
- * - the precise formatting is up to the application!
- * - the examples use type casts for arguments only to _show_ the types of
- *   arguments without needing variable declarations in the examples;
- *   the type casts will not be necessary in actual code
- *
- * UTraceDataFunc(context, fnNumber, level,
- *              "There is a character %c in the string %s.",   // Format String 
- *              (char)c, (const char *)s);                     // varargs parameters
- * ->   There is a character 0x42 'B' in the string "Bravo".
- *
- * UTraceDataFunc(context, fnNumber, level,
- *              "Vector of bytes %vb vector of chars %vc",
- *              (const uint8_t *)bytes, (int32_t)bytesLength,
- *              (const char *)chars, (int32_t)charsLength);
- * ->  Vector of bytes
- *      42 63 64 3f [4]
- *     vector of chars
- *      "Bcd?"[4]
- *
- * UTraceDataFunc(context, fnNumber, level,
- *              "An int32_t %d and a whole bunch of them %vd",
- *              (int32_t)-5, (const int32_t *)ints, (int32_t)intsLength);
- * ->   An int32_t 0xfffffffb and a whole bunch of them
- *      fffffffb 00000005 0000010a [3]
- *
- */
-
-
-
-/**
-  *  Trace output Formatter.  An application's UTraceData tracing functions may call
-  *                 back to this function to format the trace output in a
-  *                 human readable form.  Note that a UTraceData function may choose
-  *                 to not format the data;  it could, for example, save it in
-  *                 in the raw form it was received (more compact), leaving
-  *                 formatting for a later trace analyis tool.
-  *  @param outBuf  pointer to a buffer to receive the formatted output.  Output
-  *                 will be nul terminated if there is space in the buffer -
-  *                 if the length of the requested output < the output buffer size.
-  *  @param capacity  Length of the output buffer.
-  *  @param indent  Number of spaces to indent the output.  Intended to allow
-  *                 data displayed from nested functions to be indented for readability.
-  *  @param fmt     Format specification for the data to output
-  *  @param args    Data to be formatted.
-  *  @return        Length of formatted output, including the terminating NUL.
-  *                 If buffer capacity is insufficient, the required capacity is returned. 
-  *  @stable ICU 2.8
-  */
-U_STABLE int32_t U_EXPORT2
-utrace_vformat(char *outBuf, int32_t capacity,
-              int32_t indent, const char *fmt,  va_list args);
-
-/**
-  *  Trace output Formatter.  An application's UTraceData tracing functions may call
-  *                 this function to format any additional trace data, beyond that
-  *                 provided by default, in human readable form with the same
-  *                 formatting conventions used by utrace_vformat().
-  *  @param outBuf  pointer to a buffer to receive the formatted output.  Output
-  *                 will be nul terminated if there is space in the buffer -
-  *                 if the length of the requested output < the output buffer size.
-  *  @param capacity  Length of the output buffer.
-  *  @param indent  Number of spaces to indent the output.  Intended to allow
-  *                 data displayed from nested functions to be indented for readability.
-  *  @param fmt     Format specification for the data to output
-  *  @param ...     Data to be formatted.
-  *  @return        Length of formatted output, including the terminating NUL.
-  *                 If buffer capacity is insufficient, the required capacity is returned. 
-  *  @stable ICU 2.8
-  */
-U_STABLE int32_t U_EXPORT2
-utrace_format(char *outBuf, int32_t capacity,
-              int32_t indent, const char *fmt,  ...);
-
-
-
-/* Trace function numbers --------------------------------------------------- */
-
-/**
- * Get the name of a function from its trace function number.
- *
- * @param fnNumber The trace number for an ICU function.
- * @return The name string for the function.
- *
- * @see UTraceFunctionNumber
- * @stable ICU 2.8
- */
-U_STABLE const char * U_EXPORT2
-utrace_functionName(int32_t fnNumber);
-
-U_CDECL_END
-
-#endif
diff --git a/source/common/unicode/utypeinfo.h b/source/common/unicode/utypeinfo.h
deleted file mode 100644
index 4265e10..0000000
--- a/source/common/unicode/utypeinfo.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef UTYPEINFO_H
-#define UTYPEINFO_H
-
-#if defined(_MSC_VER) && _HAS_EXCEPTIONS == 0
-// Visual C++ needs the following two lines when RTTI is on with
-// exception handling disabled.
-#include <exception>
-using std::exception;
-#endif
-#include <typeinfo> // for typeid to work.
-
-#endif
diff --git a/source/common/unicode/utypes.h b/source/common/unicode/utypes.h
deleted file mode 100644
index beb931b..0000000
--- a/source/common/unicode/utypes.h
+++ /dev/null
@@ -1,865 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 1996-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*
-*  FILE NAME : UTYPES.H (formerly ptypes.h)
-*
-*   Date        Name        Description
-*   12/11/96    helena      Creation.
-*   02/27/97    aliu        Added typedefs for UClassID, int8, int16, int32,
-*                           uint8, uint16, and uint32.
-*   04/01/97    aliu        Added XP_CPLUSPLUS and modified to work under C as
-*                            well as C++.
-*                           Modified to use memcpy() for uprv_arrayCopy() fns.
-*   04/14/97    aliu        Added TPlatformUtilities.
-*   05/07/97    aliu        Added import/export specifiers (replacing the old
-*                           broken EXT_CLASS).  Added version number for our
-*                           code.  Cleaned up header.
-*    6/20/97    helena      Java class name change.
-*   08/11/98    stephen     UErrorCode changed from typedef to enum
-*   08/12/98    erm         Changed T_ANALYTIC_PACKAGE_VERSION to 3
-*   08/14/98    stephen     Added uprv_arrayCopy() for int8_t, int16_t, int32_t
-*   12/09/98    jfitz       Added BUFFER_OVERFLOW_ERROR (bug 1100066)
-*   04/20/99    stephen     Cleaned up & reworked for autoconf.
-*                           Renamed to utypes.h.
-*   05/05/99    stephen     Changed to use <inttypes.h>
-*   12/07/99    helena      Moved copyright notice string from ucnv_bld.h here.
-*******************************************************************************
-*/
-
-#ifndef UTYPES_H
-#define UTYPES_H
-
-
-#include "unicode/umachine.h"
-#include "unicode/utf.h"
-#include "unicode/uversion.h"
-#include "unicode/uconfig.h"
-
-/*!
- * \file
- * \brief Basic definitions for ICU, for both C and C++ APIs
- *
- * This file defines basic types, constants, and enumerations directly or
- * indirectly by including other header files, especially utf.h for the
- * basic character and string definitions and umachine.h for consistent
- * integer and other types.
- */
-
-
-/**
- * \def U_SHOW_CPLUSPLUS_API
- * @internal
- */
-#ifdef XP_CPLUSPLUS
-#   ifndef U_SHOW_CPLUSPLUS_API
-#       define U_SHOW_CPLUSPLUS_API 1
-#   endif
-#else
-#   undef U_SHOW_CPLUSPLUS_API
-#   define U_SHOW_CPLUSPLUS_API 0
-#endif
-
-/** @{ API visibility control */
-
-/**
- * \def U_HIDE_DRAFT_API
- * Define this to 1 to request that draft API be "hidden"
- */
-#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_DRAFT_API)
-#define U_HIDE_DRAFT_API 1
-#endif
-#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_INTERNAL_API)
-#define U_HIDE_INTERNAL_API 1
-#endif
-
-#ifdef U_HIDE_DRAFT_API
-#include "unicode/udraft.h"
-#endif
-
-#ifdef U_HIDE_DEPRECATED_API
-#include "unicode/udeprctd.h"
-#endif
-
-#ifdef U_HIDE_DEPRECATED_API
-#include "unicode/uobslete.h"
-#endif
-
-#ifdef U_HIDE_INTERNAL_API
-#include "unicode/uintrnal.h"
-#endif
-
-#ifdef U_HIDE_SYSTEM_API
-#include "unicode/usystem.h"
-#endif
-
-/** @} */
-
-
-/*===========================================================================*/
-/* char Character set family                                                 */
-/*===========================================================================*/
-
-/**
- * U_CHARSET_FAMILY is equal to this value when the platform is an ASCII based platform.
- * @stable ICU 2.0
- */
-#define U_ASCII_FAMILY 0
-
-/**
- * U_CHARSET_FAMILY is equal to this value when the platform is an EBCDIC based platform.
- * @stable ICU 2.0
- */
-#define U_EBCDIC_FAMILY 1
-
-/**
- * \def U_CHARSET_FAMILY
- *
- * <p>These definitions allow to specify the encoding of text
- * in the char data type as defined by the platform and the compiler.
- * It is enough to determine the code point values of "invariant characters",
- * which are the ones shared by all encodings that are in use
- * on a given platform.</p>
- *
- * <p>Those "invariant characters" should be all the uppercase and lowercase
- * latin letters, the digits, the space, and "basic punctuation".
- * Also, '\\n', '\\r', '\\t' should be available.</p>
- *
- * <p>The list of "invariant characters" is:<br>
- * \code
- *    A-Z  a-z  0-9  SPACE  "  %  &amp;  '  (  )  *  +  ,  -  .  /  :  ;  <  =  >  ?  _
- * \endcode
- * <br>
- * (52 letters + 10 numbers + 20 punc/sym/space = 82 total)</p>
- *
- * <p>This matches the IBM Syntactic Character Set (CS 640).</p>
- *
- * <p>In other words, all the graphic characters in 7-bit ASCII should
- * be safely accessible except the following:</p>
- *
- * \code
- *    '\' <backslash>
- *    '[' <left bracket>
- *    ']' <right bracket>
- *    '{' <left brace>
- *    '}' <right brace>
- *    '^' <circumflex>
- *    '~' <tilde>
- *    '!' <exclamation mark>
- *    '#' <number sign>
- *    '|' <vertical line>
- *    '$' <dollar sign>
- *    '@' <commercial at>
- *    '`' <grave accent>
- * \endcode
- * @stable ICU 2.0
- */
-
-#ifndef U_CHARSET_FAMILY
-#   define U_CHARSET_FAMILY 0
-#endif
-
-/**
- * \def U_CHARSET_IS_UTF8
- *
- * Hardcode the default charset to UTF-8.
- *
- * If this is set to 1, then
- * - ICU will assume that all non-invariant char*, StringPiece, std::string etc.
- *   contain UTF-8 text, regardless of what the system API uses
- * - some ICU code will use fast functions like u_strFromUTF8()
- *   rather than the more general and more heavy-weight conversion API (ucnv.h)
- * - ucnv_getDefaultName() always returns "UTF-8"
- * - ucnv_setDefaultName() is disabled and will not change the default charset
- * - static builds of ICU are smaller
- * - more functionality is available with the UCONFIG_NO_CONVERSION build-time
- *   configuration option (see unicode/uconfig.h)
- * - the UCONFIG_NO_CONVERSION build option in uconfig.h is more usable
- *
- * @stable ICU 4.2
- * @see UCONFIG_NO_CONVERSION
- */
-#ifndef U_CHARSET_IS_UTF8
-#   define U_CHARSET_IS_UTF8 0
-#endif
-
-/*===========================================================================*/
-/* ICUDATA naming scheme                                                     */
-/*===========================================================================*/
-
-/**
- * \def U_ICUDATA_TYPE_LETTER
- *
- * This is a platform-dependent string containing one letter:
- * - b for big-endian, ASCII-family platforms
- * - l for little-endian, ASCII-family platforms
- * - e for big-endian, EBCDIC-family platforms
- * This letter is part of the common data file name.
- * @stable ICU 2.0
- */
-
-/**
- * \def U_ICUDATA_TYPE_LITLETTER
- * The non-string form of U_ICUDATA_TYPE_LETTER
- * @stable ICU 2.0
- */
-#if U_CHARSET_FAMILY
-#   if U_IS_BIG_ENDIAN
-   /* EBCDIC - should always be BE */
-#     define U_ICUDATA_TYPE_LETTER "e"
-#     define U_ICUDATA_TYPE_LITLETTER e
-#   else
-#     error "Don't know what to do with little endian EBCDIC!"
-#     define U_ICUDATA_TYPE_LETTER "x"
-#     define U_ICUDATA_TYPE_LITLETTER x
-#   endif
-#else
-#   if U_IS_BIG_ENDIAN
-      /* Big-endian ASCII */
-#     define U_ICUDATA_TYPE_LETTER "b"
-#     define U_ICUDATA_TYPE_LITLETTER b
-#   else
-      /* Little-endian ASCII */
-#     define U_ICUDATA_TYPE_LETTER "l"
-#     define U_ICUDATA_TYPE_LITLETTER l
-#   endif
-#endif
-
-/**
- * A single string literal containing the icudata stub name. i.e. 'icudt18e' for
- * ICU 1.8.x on EBCDIC, etc..
- * @stable ICU 2.0
- */
-#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER  /**< @internal */
-#define U_USRDATA_NAME    "usrdt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER  /**< @internal */
-#define U_USE_USRDATA     1  /**< @internal */
-
-/**
- *  U_ICU_ENTRY_POINT is the name of the DLL entry point to the ICU data library.
- *    Defined as a literal, not a string.
- *    Tricky Preprocessor use - ## operator replaces macro paramters with the literal string
- *                              from the corresponding macro invocation, _before_ other macro substitutions.
- *                              Need a nested \#defines to get the actual version numbers rather than
- *                              the literal text U_ICU_VERSION_MAJOR_NUM into the name.
- *                              The net result will be something of the form
- *                                  \#define U_ICU_ENTRY_POINT icudt19_dat
- * @stable ICU 2.4
- */
-#define U_ICUDATA_ENTRY_POINT  U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM)
-
-/**
- * Do not use.
- * @internal
- */
-#define U_DEF2_ICUDATA_ENTRY_POINT(major, minor) U_DEF_ICUDATA_ENTRY_POINT(major, minor)
-/**
- * Do not use.
- * @internal
- */
-#ifndef U_DEF_ICUDATA_ENTRY_POINT
-/* affected by symbol renaming. See platform.h */
-#define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt##major##minor##_dat
-#endif
-
-/**
- * \def U_CALLCONV
- * Similar to U_CDECL_BEGIN/U_CDECL_END, this qualifier is necessary
- * in callback function typedefs to make sure that the calling convention
- * is compatible.
- *
- * This is only used for non-ICU-API functions.
- * When a function is a public ICU API,
- * you must use the U_CAPI and U_EXPORT2 qualifiers.
- * @stable ICU 2.0
- */
-#if defined(OS390) && defined(XP_CPLUSPLUS)
-#    define U_CALLCONV __cdecl
-#else
-#    define U_CALLCONV U_EXPORT2
-#endif
-
-/**
- * \def NULL
- * Define NULL if necessary, to 0 for C++ and to ((void *)0) for C.
- * @stable ICU 2.0
- */
-#ifndef NULL
-#ifdef XP_CPLUSPLUS
-#define NULL    0
-#else
-#define NULL    ((void *)0)
-#endif
-#endif
-
-/*===========================================================================*/
-/* Calendar/TimeZone data types                                              */
-/*===========================================================================*/
-
-/**
- * Date and Time data type.
- * This is a primitive data type that holds the date and time
- * as the number of milliseconds since 1970-jan-01, 00:00 UTC.
- * UTC leap seconds are ignored.
- * @stable ICU 2.0
- */
-typedef double UDate;
-
-/** The number of milliseconds per second @stable ICU 2.0 */
-#define U_MILLIS_PER_SECOND        (1000)
-/** The number of milliseconds per minute @stable ICU 2.0 */
-#define U_MILLIS_PER_MINUTE       (60000)
-/** The number of milliseconds per hour @stable ICU 2.0 */
-#define U_MILLIS_PER_HOUR       (3600000)
-/** The number of milliseconds per day @stable ICU 2.0 */
-#define U_MILLIS_PER_DAY       (86400000)
-
-
-/*===========================================================================*/
-/* UClassID-based RTTI */
-/*===========================================================================*/
-
-/**
- * UClassID is used to identify classes without using RTTI, since RTTI
- * is not yet supported by all C++ compilers.  Each class hierarchy which needs
- * to implement polymorphic clone() or operator==() defines two methods,
- * described in detail below.  UClassID values can be compared using
- * operator==(). Nothing else should be done with them.
- *
- * \par
- * getDynamicClassID() is declared in the base class of the hierarchy as
- * a pure virtual.  Each concrete subclass implements it in the same way:
- *
- * \code
- *      class Base {
- *      public:
- *          virtual UClassID getDynamicClassID() const = 0;
- *      }
- *
- *      class Derived {
- *      public:
- *          virtual UClassID getDynamicClassID() const
- *            { return Derived::getStaticClassID(); }
- *      }
- * \endcode
- *
- * Each concrete class implements getStaticClassID() as well, which allows
- * clients to test for a specific type.
- *
- * \code
- *      class Derived {
- *      public:
- *          static UClassID U_EXPORT2 getStaticClassID();
- *      private:
- *          static char fgClassID;
- *      }
- *
- *      // In Derived.cpp:
- *      UClassID Derived::getStaticClassID()
- *        { return (UClassID)&Derived::fgClassID; }
- *      char Derived::fgClassID = 0; // Value is irrelevant
- * \endcode
- * @stable ICU 2.0
- */
-typedef void* UClassID;
-
-/*===========================================================================*/
-/* Shared library/DLL import-export API control                              */
-/*===========================================================================*/
-
-/*
- * Control of symbol import/export.
- * ICU is separated into three libraries.
- */
-
-/*
- * \def U_COMBINED_IMPLEMENTATION
- * Set to export library symbols from inside the ICU library
- * when all of ICU is in a single library.
- * This can be set as a compiler option while building ICU, and it
- * needs to be the first one tested to override U_COMMON_API, U_I18N_API, etc.
- * @stable ICU 2.0
- */
-
-/**
- * \def U_DATA_API
- * Set to export library symbols from inside the stubdata library,
- * and to import them from outside.
- * @stable ICU 3.0
- */
-
-/**
- * \def U_COMMON_API
- * Set to export library symbols from inside the common library,
- * and to import them from outside.
- * @stable ICU 2.0
- */
-
-/**
- * \def U_I18N_API
- * Set to export library symbols from inside the i18n library,
- * and to import them from outside.
- * @stable ICU 2.0
- */
-
-/**
- * \def U_LAYOUT_API
- * Set to export library symbols from inside the layout engine library,
- * and to import them from outside.
- * @stable ICU 2.0
- */
-
-/**
- * \def U_LAYOUTEX_API
- * Set to export library symbols from inside the layout extensions library,
- * and to import them from outside.
- * @stable ICU 2.6
- */
-
-/**
- * \def U_IO_API
- * Set to export library symbols from inside the ustdio library,
- * and to import them from outside.
- * @stable ICU 2.0
- */
-
-/**
- * \def U_TOOLUTIL_API
- * Set to export library symbols from inside the toolutil library,
- * and to import them from outside.
- * @stable ICU 3.4
- */
-
-#if defined(U_COMBINED_IMPLEMENTATION)
-#define U_DATA_API     U_EXPORT
-#define U_COMMON_API   U_EXPORT
-#define U_I18N_API     U_EXPORT
-#define U_LAYOUT_API   U_EXPORT
-#define U_LAYOUTEX_API U_EXPORT
-#define U_IO_API       U_EXPORT
-#define U_TOOLUTIL_API U_EXPORT
-#elif defined(U_STATIC_IMPLEMENTATION)
-#define U_DATA_API
-#define U_COMMON_API
-#define U_I18N_API
-#define U_LAYOUT_API
-#define U_LAYOUTEX_API
-#define U_IO_API
-#define U_TOOLUTIL_API
-#elif defined(U_COMMON_IMPLEMENTATION)
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_EXPORT
-#define U_I18N_API     U_IMPORT
-#define U_LAYOUT_API   U_IMPORT
-#define U_LAYOUTEX_API U_IMPORT
-#define U_IO_API       U_IMPORT
-#define U_TOOLUTIL_API U_IMPORT
-#elif defined(U_I18N_IMPLEMENTATION)
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_IMPORT
-#define U_I18N_API     U_EXPORT
-#define U_LAYOUT_API   U_IMPORT
-#define U_LAYOUTEX_API U_IMPORT
-#define U_IO_API       U_IMPORT
-#define U_TOOLUTIL_API U_IMPORT
-#elif defined(U_LAYOUT_IMPLEMENTATION)
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_IMPORT
-#define U_I18N_API     U_IMPORT
-#define U_LAYOUT_API   U_EXPORT
-#define U_LAYOUTEX_API U_IMPORT
-#define U_IO_API       U_IMPORT
-#define U_TOOLUTIL_API U_IMPORT
-#elif defined(U_LAYOUTEX_IMPLEMENTATION)
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_IMPORT
-#define U_I18N_API     U_IMPORT
-#define U_LAYOUT_API   U_IMPORT
-#define U_LAYOUTEX_API U_EXPORT
-#define U_IO_API       U_IMPORT
-#define U_TOOLUTIL_API U_IMPORT
-#elif defined(U_IO_IMPLEMENTATION)
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_IMPORT
-#define U_I18N_API     U_IMPORT
-#define U_LAYOUT_API   U_IMPORT
-#define U_LAYOUTEX_API U_IMPORT
-#define U_IO_API       U_EXPORT
-#define U_TOOLUTIL_API U_IMPORT
-#elif defined(U_TOOLUTIL_IMPLEMENTATION)
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_IMPORT
-#define U_I18N_API     U_IMPORT
-#define U_LAYOUT_API   U_IMPORT
-#define U_LAYOUTEX_API U_IMPORT
-#define U_IO_API       U_IMPORT
-#define U_TOOLUTIL_API U_EXPORT
-#else
-#define U_DATA_API     U_IMPORT
-#define U_COMMON_API   U_IMPORT
-#define U_I18N_API     U_IMPORT
-#define U_LAYOUT_API   U_IMPORT
-#define U_LAYOUTEX_API U_IMPORT
-#define U_IO_API       U_IMPORT
-#define U_TOOLUTIL_API U_IMPORT
-#endif
-
-/**
- * \def U_STANDARD_CPP_NAMESPACE
- * Control of C++ Namespace
- * @stable ICU 2.0
- */
-#ifdef __cplusplus
-#define U_STANDARD_CPP_NAMESPACE        ::
-#else
-#define U_STANDARD_CPP_NAMESPACE
-#endif
-
-
-/*===========================================================================*/
-/* Global delete operator                                                    */
-/*===========================================================================*/
-
-/*
- * The ICU4C library must not use the global new and delete operators.
- * These operators here are defined to enable testing for this.
- * See Jitterbug 2581 for details of why this is necessary.
- *
- * Verification that ICU4C's memory usage is correct, i.e.,
- * that global new/delete are not used:
- *
- * a) Check for imports of global new/delete (see uobject.cpp for details)
- * b) Verify that new is never imported.
- * c) Verify that delete is only imported from object code for interface/mixin classes.
- * d) Add global delete and delete[] only for the ICU4C library itself
- *    and define them in a way that crashes or otherwise easily shows a problem.
- *
- * The following implements d).
- * The operator implementations crash; this is intentional and used for library debugging.
- *
- * Note: This is currently only done on Windows because
- * some Linux/Unix compilers have problems with defining global new/delete.
- * On Windows, U_WINDOWS is defined, and it is _MSC_VER>=1200 for MSVC 6.0 and higher.
- */
-#if defined(XP_CPLUSPLUS) && defined(U_WINDOWS) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION))
-
-#ifndef U_HIDE_INTERNAL_API
-/**
- * Global operator new, defined only inside ICU4C, must not be used.
- * Crashes intentionally.
- * @internal
- */
-inline void *
-operator new(size_t /*size*/) {
-    char *q=NULL;
-    *q=5; /* break it */
-    return q;
-}
-
-#ifdef _Ret_bytecap_
-/* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */
-_Ret_bytecap_(_Size)
-#endif
-/**
- * Global operator new[], defined only inside ICU4C, must not be used.
- * Crashes intentionally.
- * @internal
- */
-inline void *
-operator new[](size_t /*size*/) {
-    char *q=NULL;
-    *q=5; /* break it */
-    return q;
-}
-
-/**
- * Global operator delete, defined only inside ICU4C, must not be used.
- * Crashes intentionally.
- * @internal
- */
-inline void
-operator delete(void * /*p*/) {
-    char *q=NULL;
-    *q=5; /* break it */
-}
-
-/**
- * Global operator delete[], defined only inside ICU4C, must not be used.
- * Crashes intentionally.
- * @internal
- */
-inline void
-operator delete[](void * /*p*/) {
-    char *q=NULL;
-    *q=5; /* break it */
-}
-
-#endif /* U_HIDE_INTERNAL_API */
-#endif
-
-/*===========================================================================*/
-/* UErrorCode */
-/*===========================================================================*/
-
-/**
- * Error code to replace exception handling, so that the code is compatible with all C++ compilers,
- * and to use the same mechanism for C and C++.
- *
- * \par
- * ICU functions that take a reference (C++) or a pointer (C) to a UErrorCode
- * first test if(U_FAILURE(errorCode)) { return immediately; }
- * so that in a chain of such functions the first one that sets an error code
- * causes the following ones to not perform any operations.
- *
- * \par
- * Error codes should be tested using U_FAILURE() and U_SUCCESS().
- * @stable ICU 2.0
- */
-typedef enum UErrorCode {
-    /* The ordering of U_ERROR_INFO_START Vs U_USING_FALLBACK_WARNING looks weird
-     * and is that way because VC++ debugger displays first encountered constant,
-     * which is not the what the code is used for
-     */
-
-    U_USING_FALLBACK_WARNING  = -128,   /**< A resource bundle lookup returned a fallback result (not an error) */
-
-    U_ERROR_WARNING_START     = -128,   /**< Start of information results (semantically successful) */
-
-    U_USING_DEFAULT_WARNING   = -127,   /**< A resource bundle lookup returned a result from the root locale (not an error) */
-
-    U_SAFECLONE_ALLOCATED_WARNING = -126, /**< A SafeClone operation required allocating memory (informational only) */
-
-    U_STATE_OLD_WARNING       = -125,   /**< ICU has to use compatibility layer to construct the service. Expect performance/memory usage degradation. Consider upgrading */
-
-    U_STRING_NOT_TERMINATED_WARNING = -124,/**< An output string could not be NUL-terminated because output length==destCapacity. */
-
-    U_SORT_KEY_TOO_SHORT_WARNING = -123, /**< Number of levels requested in getBound is higher than the number of levels in the sort key */
-
-    U_AMBIGUOUS_ALIAS_WARNING = -122,   /**< This converter alias can go to different converter implementations */
-
-    U_DIFFERENT_UCA_VERSION = -121,     /**< ucol_open encountered a mismatch between UCA version and collator image version, so the collator was constructed from rules. No impact to further function */
-    
-    U_PLUGIN_CHANGED_LEVEL_WARNING = -120, /**< A plugin caused a level change. May not be an error, but later plugins may not load. */
-
-    U_ERROR_WARNING_LIMIT,              /**< This must always be the last warning value to indicate the limit for UErrorCode warnings (last warning code +1) */
-
-
-    U_ZERO_ERROR              =  0,     /**< No error, no warning. */
-
-    U_ILLEGAL_ARGUMENT_ERROR  =  1,     /**< Start of codes indicating failure */
-    U_MISSING_RESOURCE_ERROR  =  2,     /**< The requested resource cannot be found */
-    U_INVALID_FORMAT_ERROR    =  3,     /**< Data format is not what is expected */
-    U_FILE_ACCESS_ERROR       =  4,     /**< The requested file cannot be found */
-    U_INTERNAL_PROGRAM_ERROR  =  5,     /**< Indicates a bug in the library code */
-    U_MESSAGE_PARSE_ERROR     =  6,     /**< Unable to parse a message (message format) */
-    U_MEMORY_ALLOCATION_ERROR =  7,     /**< Memory allocation error */
-    U_INDEX_OUTOFBOUNDS_ERROR =  8,     /**< Trying to access the index that is out of bounds */
-    U_PARSE_ERROR             =  9,     /**< Equivalent to Java ParseException */
-    U_INVALID_CHAR_FOUND      = 10,     /**< Character conversion: Unmappable input sequence. In other APIs: Invalid character. */
-    U_TRUNCATED_CHAR_FOUND    = 11,     /**< Character conversion: Incomplete input sequence. */
-    U_ILLEGAL_CHAR_FOUND      = 12,     /**< Character conversion: Illegal input sequence/combination of input units. */
-    U_INVALID_TABLE_FORMAT    = 13,     /**< Conversion table file found, but corrupted */
-    U_INVALID_TABLE_FILE      = 14,     /**< Conversion table file not found */
-    U_BUFFER_OVERFLOW_ERROR   = 15,     /**< A result would not fit in the supplied buffer */
-    U_UNSUPPORTED_ERROR       = 16,     /**< Requested operation not supported in current context */
-    U_RESOURCE_TYPE_MISMATCH  = 17,     /**< an operation is requested over a resource that does not support it */
-    U_ILLEGAL_ESCAPE_SEQUENCE = 18,     /**< ISO-2022 illlegal escape sequence */
-    U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, /**< ISO-2022 unsupported escape sequence */
-    U_NO_SPACE_AVAILABLE      = 20,     /**< No space available for in-buffer expansion for Arabic shaping */
-    U_CE_NOT_FOUND_ERROR      = 21,     /**< Currently used only while setting variable top, but can be used generally */
-    U_PRIMARY_TOO_LONG_ERROR  = 22,     /**< User tried to set variable top to a primary that is longer than two bytes */
-    U_STATE_TOO_OLD_ERROR     = 23,     /**< ICU cannot construct a service from this state, as it is no longer supported */
-    U_TOO_MANY_ALIASES_ERROR  = 24,     /**< There are too many aliases in the path to the requested resource.
-                                             It is very possible that a circular alias definition has occured */
-    U_ENUM_OUT_OF_SYNC_ERROR  = 25,     /**< UEnumeration out of sync with underlying collection */
-    U_INVARIANT_CONVERSION_ERROR = 26,  /**< Unable to convert a UChar* string to char* with the invariant converter. */
-    U_INVALID_STATE_ERROR     = 27,     /**< Requested operation can not be completed with ICU in its current state */
-    U_COLLATOR_VERSION_MISMATCH = 28,   /**< Collator version is not compatible with the base version */
-    U_USELESS_COLLATOR_ERROR  = 29,     /**< Collator is options only and no base is specified */
-    U_NO_WRITE_PERMISSION     = 30,     /**< Attempt to modify read-only or constant data. */
-
-    U_STANDARD_ERROR_LIMIT,             /**< This must always be the last value to indicate the limit for standard errors */
-    /*
-     * the error code range 0x10000 0x10100 are reserved for Transliterator
-     */
-    U_BAD_VARIABLE_DEFINITION=0x10000,/**< Missing '$' or duplicate variable name */
-    U_PARSE_ERROR_START = 0x10000,    /**< Start of Transliterator errors */
-    U_MALFORMED_RULE,                 /**< Elements of a rule are misplaced */
-    U_MALFORMED_SET,                  /**< A UnicodeSet pattern is invalid*/
-    U_MALFORMED_SYMBOL_REFERENCE,     /**< UNUSED as of ICU 2.4 */
-    U_MALFORMED_UNICODE_ESCAPE,       /**< A Unicode escape pattern is invalid*/
-    U_MALFORMED_VARIABLE_DEFINITION,  /**< A variable definition is invalid */
-    U_MALFORMED_VARIABLE_REFERENCE,   /**< A variable reference is invalid */
-    U_MISMATCHED_SEGMENT_DELIMITERS,  /**< UNUSED as of ICU 2.4 */
-    U_MISPLACED_ANCHOR_START,         /**< A start anchor appears at an illegal position */
-    U_MISPLACED_CURSOR_OFFSET,        /**< A cursor offset occurs at an illegal position */
-    U_MISPLACED_QUANTIFIER,           /**< A quantifier appears after a segment close delimiter */
-    U_MISSING_OPERATOR,               /**< A rule contains no operator */
-    U_MISSING_SEGMENT_CLOSE,          /**< UNUSED as of ICU 2.4 */
-    U_MULTIPLE_ANTE_CONTEXTS,         /**< More than one ante context */
-    U_MULTIPLE_CURSORS,               /**< More than one cursor */
-    U_MULTIPLE_POST_CONTEXTS,         /**< More than one post context */
-    U_TRAILING_BACKSLASH,             /**< A dangling backslash */
-    U_UNDEFINED_SEGMENT_REFERENCE,    /**< A segment reference does not correspond to a defined segment */
-    U_UNDEFINED_VARIABLE,             /**< A variable reference does not correspond to a defined variable */
-    U_UNQUOTED_SPECIAL,               /**< A special character was not quoted or escaped */
-    U_UNTERMINATED_QUOTE,             /**< A closing single quote is missing */
-    U_RULE_MASK_ERROR,                /**< A rule is hidden by an earlier more general rule */
-    U_MISPLACED_COMPOUND_FILTER,      /**< A compound filter is in an invalid location */
-    U_MULTIPLE_COMPOUND_FILTERS,      /**< More than one compound filter */
-    U_INVALID_RBT_SYNTAX,             /**< A "::id" rule was passed to the RuleBasedTransliterator parser */
-    U_INVALID_PROPERTY_PATTERN,       /**< UNUSED as of ICU 2.4 */
-    U_MALFORMED_PRAGMA,               /**< A 'use' pragma is invlalid */
-    U_UNCLOSED_SEGMENT,               /**< A closing ')' is missing */
-    U_ILLEGAL_CHAR_IN_SEGMENT,        /**< UNUSED as of ICU 2.4 */
-    U_VARIABLE_RANGE_EXHAUSTED,       /**< Too many stand-ins generated for the given variable range */
-    U_VARIABLE_RANGE_OVERLAP,         /**< The variable range overlaps characters used in rules */
-    U_ILLEGAL_CHARACTER,              /**< A special character is outside its allowed context */
-    U_INTERNAL_TRANSLITERATOR_ERROR,  /**< Internal transliterator system error */
-    U_INVALID_ID,                     /**< A "::id" rule specifies an unknown transliterator */
-    U_INVALID_FUNCTION,               /**< A "&fn()" rule specifies an unknown transliterator */
-    U_PARSE_ERROR_LIMIT,              /**< The limit for Transliterator errors */
-
-    /*
-     * the error code range 0x10100 0x10200 are reserved for formatting API parsing error
-     */
-    U_UNEXPECTED_TOKEN=0x10100,       /**< Syntax error in format pattern */
-    U_FMT_PARSE_ERROR_START=0x10100,  /**< Start of format library errors */
-    U_MULTIPLE_DECIMAL_SEPARATORS,    /**< More than one decimal separator in number pattern */
-    U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS, /**< Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS */
-    U_MULTIPLE_EXPONENTIAL_SYMBOLS,   /**< More than one exponent symbol in number pattern */
-    U_MALFORMED_EXPONENTIAL_PATTERN,  /**< Grouping symbol in exponent pattern */
-    U_MULTIPLE_PERCENT_SYMBOLS,       /**< More than one percent symbol in number pattern */
-    U_MULTIPLE_PERMILL_SYMBOLS,       /**< More than one permill symbol in number pattern */
-    U_MULTIPLE_PAD_SPECIFIERS,        /**< More than one pad symbol in number pattern */
-    U_PATTERN_SYNTAX_ERROR,           /**< Syntax error in format pattern */
-    U_ILLEGAL_PAD_POSITION,           /**< Pad symbol misplaced in number pattern */
-    U_UNMATCHED_BRACES,               /**< Braces do not match in message pattern */
-    U_UNSUPPORTED_PROPERTY,           /**< UNUSED as of ICU 2.4 */
-    U_UNSUPPORTED_ATTRIBUTE,          /**< UNUSED as of ICU 2.4 */
-    U_ARGUMENT_TYPE_MISMATCH,         /**< Argument name and argument index mismatch in MessageFormat functions */
-    U_DUPLICATE_KEYWORD,              /**< Duplicate keyword in PluralFormat */
-    U_UNDEFINED_KEYWORD,              /**< Undefined Plural keyword */
-    U_DEFAULT_KEYWORD_MISSING,        /**< Missing DEFAULT rule in plural rules */
-    U_DECIMAL_NUMBER_SYNTAX_ERROR,    /**< Decimal number syntax error */
-    U_FMT_PARSE_ERROR_LIMIT,          /**< The limit for format library errors */
-
-    /*
-     * the error code range 0x10200 0x102ff are reserved for Break Iterator related error
-     */
-    U_BRK_INTERNAL_ERROR=0x10200,          /**< An internal error (bug) was detected.             */
-    U_BRK_ERROR_START=0x10200,             /**< Start of codes indicating Break Iterator failures */
-    U_BRK_HEX_DIGITS_EXPECTED,             /**< Hex digits expected as part of a escaped char in a rule. */
-    U_BRK_SEMICOLON_EXPECTED,              /**< Missing ';' at the end of a RBBI rule.            */
-    U_BRK_RULE_SYNTAX,                     /**< Syntax error in RBBI rule.                        */
-    U_BRK_UNCLOSED_SET,                    /**< UnicodeSet witing an RBBI rule missing a closing ']'.  */
-    U_BRK_ASSIGN_ERROR,                    /**< Syntax error in RBBI rule assignment statement.   */
-    U_BRK_VARIABLE_REDFINITION,            /**< RBBI rule $Variable redefined.                    */
-    U_BRK_MISMATCHED_PAREN,                /**< Mis-matched parentheses in an RBBI rule.          */
-    U_BRK_NEW_LINE_IN_QUOTED_STRING,       /**< Missing closing quote in an RBBI rule.            */
-    U_BRK_UNDEFINED_VARIABLE,              /**< Use of an undefined $Variable in an RBBI rule.    */
-    U_BRK_INIT_ERROR,                      /**< Initialization failure.  Probable missing ICU Data. */
-    U_BRK_RULE_EMPTY_SET,                  /**< Rule contains an empty Unicode Set.               */
-    U_BRK_UNRECOGNIZED_OPTION,             /**< !!option in RBBI rules not recognized.            */
-    U_BRK_MALFORMED_RULE_TAG,              /**< The {nnn} tag on a rule is mal formed             */
-    U_BRK_ERROR_LIMIT,                     /**< This must always be the last value to indicate the limit for Break Iterator failures */
-
-    /*
-     * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs
-     */
-    U_REGEX_INTERNAL_ERROR=0x10300,       /**< An internal error (bug) was detected.              */
-    U_REGEX_ERROR_START=0x10300,          /**< Start of codes indicating Regexp failures          */
-    U_REGEX_RULE_SYNTAX,                  /**< Syntax error in regexp pattern.                    */
-    U_REGEX_INVALID_STATE,                /**< RegexMatcher in invalid state for requested operation */
-    U_REGEX_BAD_ESCAPE_SEQUENCE,          /**< Unrecognized backslash escape sequence in pattern  */
-    U_REGEX_PROPERTY_SYNTAX,              /**< Incorrect Unicode property                         */
-    U_REGEX_UNIMPLEMENTED,                /**< Use of regexp feature that is not yet implemented. */
-    U_REGEX_MISMATCHED_PAREN,             /**< Incorrectly nested parentheses in regexp pattern.  */
-    U_REGEX_NUMBER_TOO_BIG,               /**< Decimal number is too large.                       */
-    U_REGEX_BAD_INTERVAL,                 /**< Error in {min,max} interval                        */
-    U_REGEX_MAX_LT_MIN,                   /**< In {min,max}, max is less than min.                */
-    U_REGEX_INVALID_BACK_REF,             /**< Back-reference to a non-existent capture group.    */
-    U_REGEX_INVALID_FLAG,                 /**< Invalid value for match mode flags.                */
-    U_REGEX_LOOK_BEHIND_LIMIT,            /**< Look-Behind pattern matches must have a bounded maximum length.    */
-    U_REGEX_SET_CONTAINS_STRING,          /**< Regexps cannot have UnicodeSets containing strings.*/
-    U_REGEX_OCTAL_TOO_BIG,                /**< Octal character constants must be <= 0377.         */
-    U_REGEX_MISSING_CLOSE_BRACKET,        /**< Missing closing bracket on a bracket expression.   */
-    U_REGEX_INVALID_RANGE,                /**< In a character range [x-y], x is greater than y.   */
-    U_REGEX_STACK_OVERFLOW,               /**< Regular expression backtrack stack overflow.       */
-    U_REGEX_TIME_OUT,                     /**< Maximum allowed match time exceeded                */
-    U_REGEX_STOPPED_BY_CALLER,            /**< Matching operation aborted by user callback fn.    */
-    U_REGEX_ERROR_LIMIT,                  /**< This must always be the last value to indicate the limit for regexp errors */
-
-    /*
-     * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes
-     */
-    U_IDNA_PROHIBITED_ERROR=0x10400,
-    U_IDNA_ERROR_START=0x10400,
-    U_IDNA_UNASSIGNED_ERROR,
-    U_IDNA_CHECK_BIDI_ERROR,
-    U_IDNA_STD3_ASCII_RULES_ERROR,
-    U_IDNA_ACE_PREFIX_ERROR,
-    U_IDNA_VERIFICATION_ERROR,
-    U_IDNA_LABEL_TOO_LONG_ERROR,
-    U_IDNA_ZERO_LENGTH_LABEL_ERROR,
-    U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR,
-    U_IDNA_ERROR_LIMIT,
-    /*
-     * Aliases for StringPrep
-     */
-    U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR,
-    U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR,
-    U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR,
-    
-    /*
-     * The error code in the range 0x10500-0x105ff are reserved for Plugin related error codes
-     */
-    U_PLUGIN_ERROR_START=0x10500,         /**< Start of codes indicating plugin failures */
-    U_PLUGIN_TOO_HIGH=0x10500,            /**< The plugin's level is too high to be loaded right now. */
-    U_PLUGIN_DIDNT_SET_LEVEL,             /**< The plugin didn't call uplug_setPlugLevel in response to a QUERY */
-    U_PLUGIN_ERROR_LIMIT,                 /**< This must always be the last value to indicate the limit for plugin errors */
-
-    U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT      /**< This must always be the last value to indicate the limit for UErrorCode (last error code +1) */
-} UErrorCode;
-
-/* Use the following to determine if an UErrorCode represents */
-/* operational success or failure. */
-
-#ifdef XP_CPLUSPLUS
-    /**
-     * Does the error code indicate success?
-     * @stable ICU 2.0
-     */
-    static
-    inline UBool U_SUCCESS(UErrorCode code) { return (UBool)(code<=U_ZERO_ERROR); }
-    /**
-     * Does the error code indicate a failure?
-     * @stable ICU 2.0
-     */
-    static
-    inline UBool U_FAILURE(UErrorCode code) { return (UBool)(code>U_ZERO_ERROR); }
-#else
-    /**
-     * Does the error code indicate success?
-     * @stable ICU 2.0
-     */
-#   define U_SUCCESS(x) ((x)<=U_ZERO_ERROR)
-    /**
-     * Does the error code indicate a failure?
-     * @stable ICU 2.0
-     */
-#   define U_FAILURE(x) ((x)>U_ZERO_ERROR)
-#endif
-
-/**
- * Return a string for a UErrorCode value.
- * The string will be the same as the name of the error code constant
- * in the UErrorCode enum above.
- * @stable ICU 2.0
- */
-U_STABLE const char * U_EXPORT2
-u_errorName(UErrorCode code);
-
-
-#endif /* _UTYPES */
diff --git a/source/common/unicode/uvernum.h b/source/common/unicode/uvernum.h
deleted file mode 100644
index e5f9e36..0000000
--- a/source/common/unicode/uvernum.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2000-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  uvernum.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: Vladimir Weinstein
-*   Updated by: Steven R. Loomis
-*
-*  Gets included by uversion.h and other files.
-*
-* IMPORTANT: When updating version, the following things need to be done:
-* source/common/unicode/uvernum.h - this file: update major, minor,
-*        patchlevel, suffix, version, short version constants, namespace,
-*                    renaming macro, and copyright
-*
-* The following files need to be updated as well, which can be done
-*  by running the UNIX makefile target 'update-windows-makefiles' in icu/source.
-*
-* 
-* source/common/common.vcproj - update 'Output file name' on the link tab so
-*                   that it contains the new major/minor combination
-* source/i18n/i18n.vcproj - same as for the common.vcproj
-* source/layout/layout.vcproj - same as for the common.vcproj
-* source/layoutex/layoutex.vcproj - same
-* source/stubdata/stubdata.vcproj - same as for the common.vcproj
-* source/io/io.vcproj - same as for the common.vcproj
-* source/data/makedata.mak - change U_ICUDATA_NAME so that it contains
-*                            the new major/minor combination and the Unicode version.
-*/
-
-#ifndef UVERNUM_H
-#define UVERNUM_H
-
-/** The standard copyright notice that gets compiled into each library. 
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.4
- */
-#define U_COPYRIGHT_STRING \
-  " Copyright (C) 2010, International Business Machines Corporation and others. All Rights Reserved. "
-
-/** The current ICU major version as an integer. 
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.4
- */
-#define U_ICU_VERSION_MAJOR_NUM 4
-
-/** The current ICU minor version as an integer. 
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.6
- */
-#define U_ICU_VERSION_MINOR_NUM 6
-
-/** The current ICU patchlevel version as an integer.  
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.4
- */
-#define U_ICU_VERSION_PATCHLEVEL_NUM 0
-
-/** The current ICU build level version as an integer.  
- *  This value is for use by ICU clients. It defaults to 0.
- *  @stable ICU 4.0
- */
-#ifndef U_ICU_VERSION_BUILDLEVEL_NUM
-#define U_ICU_VERSION_BUILDLEVEL_NUM 0
-#endif
-
-/** Glued version suffix for renamers 
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.6
- */
-#define U_ICU_VERSION_SUFFIX _46
-
-/** Glued version suffix function for renamers 
- *  This value will change in the subsequent releases of ICU.
- *  If a custom suffix (such as matching library suffixes) is desired, this can be modified.
- *  Note that if present, platform.h may contain an earlier definition of this macro.
- *  @stable ICU 4.2
- */
-#ifndef U_ICU_ENTRY_POINT_RENAME
-#define U_ICU_ENTRY_POINT_RENAME(x)    x ## _46
-#endif
-
-/** The current ICU library version as a dotted-decimal string. The patchlevel
- *  only appears in this string if it non-zero. 
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.4
- */
-#define U_ICU_VERSION "4.6"
-
-/** The current ICU library major/minor version as a string without dots, for library name suffixes. 
- *  This value will change in the subsequent releases of ICU
- *  @stable ICU 2.6
- */
-#define U_ICU_VERSION_SHORT "46"
-
-/** Data version in ICU4C.
- * @internal ICU 4.4 Internal Use Only
- **/
-#define U_ICU_DATA_VERSION "4.6"
-
-/*===========================================================================
- * ICU collation framework version information                               
- * Version info that can be obtained from a collator is affected by these    
- * numbers in a secret and magic way. Please use collator version as whole
- *===========================================================================
- */
-
-/** Collation runtime version (sort key generator, strcoll). 
- * If the version is different, sortkeys for the same string could be different 
- * version 2 was in ICU 1.8.1. changed is: compression intervals, French secondary 
- * compression, generating quad level always when strength is quad or more 
- * version 4 - ICU 2.2 - tracking UCA changes, ignore completely ignorables 
- * in contractions, ignore primary ignorables after shifted 
- * version 5 - ICU 2.8 - changed implicit generation code
- * version 6 - ICU 3.4 - with the UCA 4.1, Thai tag is no longer generated or used
- * This value may change in the subsequent releases of ICU
- * @stable ICU 2.4
- */
-#define UCOL_RUNTIME_VERSION 6
-
-/** Builder code version. When this is different, same tailoring might result
- * in assigning different collation elements to code points                  
- * version 2 was in ICU 1.8.1. added support for prefixes, tweaked canonical 
- * closure. However, the tailorings should probably get same CEs assigned    
- * version 5 - ICU 2.2 - fixed some bugs, renamed some indirect values.      
- * version 6 - ICU 2.8 - fixed bug in builder that allowed 0xFF in primary values
- * version 7 - ICU 3.4 - with the UCA 4.1 Thai tag is no longer processed, complete ignorables
- *                       now break contractions
- * version 8 - ICU 4.6 - the addition of collation reordering. It should in general be
- *                       compatible since the data is at the end of the file. However,
- *                       if data parsers make assumptions about lengths this will cause problems.
- * Backward compatible with the old rules. 
- * This value may change in the subsequent releases of ICU
- * @stable ICU 2.4
- */
-#define UCOL_BUILDER_VERSION 8
-
-/** This is the version of the tailorings 
- *  This value may change in the subsequent releases of ICU
- *  @stable ICU 2.4
- */
-#define UCOL_TAILORINGS_VERSION 1
-
-
-#endif
diff --git a/source/common/unicode/uversion.h b/source/common/unicode/uversion.h
deleted file mode 100644
index e54cd55..0000000
--- a/source/common/unicode/uversion.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2000-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-*   file name:  uversion.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   Created by: Vladimir Weinstein
-*
-*  Gets included by utypes.h and Windows .rc files
-*/
-
-/**
- * \file
- * \brief C API: API for accessing ICU version numbers. 
- */
-/*===========================================================================*/
-/* Main ICU version information                                              */
-/*===========================================================================*/
-
-#ifndef UVERSION_H
-#define UVERSION_H
-
-#include "unicode/umachine.h"
-
-/* Actual version info lives in uvernum.h */
-#include "unicode/uvernum.h"
-
-/** Maximum length of the copyright string.
- *  @stable ICU 2.4
- */
-#define U_COPYRIGHT_STRING_LENGTH  128
-
-/** An ICU version consists of up to 4 numbers from 0..255.
- *  @stable ICU 2.4
- */
-#define U_MAX_VERSION_LENGTH 4
-
-/** In a string, ICU version fields are delimited by dots.
- *  @stable ICU 2.4
- */
-#define U_VERSION_DELIMITER '.'
-
-/** The maximum length of an ICU version string.
- *  @stable ICU 2.4
- */
-#define U_MAX_VERSION_STRING_LENGTH 20
-
-/** The binary form of a version on ICU APIs is an array of 4 uint8_t.
- *  To compare two versions, use memcmp(v1,v2,sizeof(UVersionInfo)).
- *  @stable ICU 2.4
- */
-typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
-
-/*===========================================================================*/
-/* C++ namespace if supported. Versioned unless versioning is disabled.      */
-/*===========================================================================*/
-
-/**
- * \def U_NAMESPACE_BEGIN
- * This is used to begin a declaration of a public ICU C++ API.
- * When not compiling for C++, it does nothing.
- * When compiling for C++, it begins an extern "C++" linkage block (to protect
- * against cases in which an external client includes ICU header files inside
- * an extern "C" linkage block).
- * If the C++ compiler supports namespaces, it also begins a namespace block.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_NAMESPACE_END
- * This is used to end a declaration of a public ICU C++ API.
- * When not compiling for C++, it does nothing.
- * When compiling for C++, it ends the extern "C++" block begun by
- * U_NAMESPACE_BEGIN.
- * If the C++ compiler supports namespaces, it also ends the namespace block
- * begun by U_NAMESPACE_BEGIN.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_NAMESPACE_USE
- * This is used to specify that the rest of the code uses the
- * public ICU C++ API namespace.
- * If the compiler doesn't support namespaces, this does nothing.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_NAMESPACE_QUALIFIER
- * This is used to qualify that a function or class is part of
- * the public ICU C++ API namespace.
- * If the compiler doesn't support namespaces, this does nothing.
- * @stable ICU 2.4
- */
-
-/* Define namespace symbols if the compiler supports it. */
-#ifdef XP_CPLUSPLUS
-#if U_HAVE_NAMESPACE
-#   if U_DISABLE_RENAMING
-#       define U_ICU_NAMESPACE icu
-        namespace U_ICU_NAMESPACE { }
-#   else
-#       define U_ICU_NAMESPACE U_ICU_ENTRY_POINT_RENAME(icu)
-        namespace U_ICU_NAMESPACE { }
-        namespace icu = U_ICU_NAMESPACE;
-#   endif
-
-#   define U_NAMESPACE_BEGIN extern "C++" { namespace U_ICU_NAMESPACE {
-#   define U_NAMESPACE_END } }
-#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
-#   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
-
-#   ifndef U_USING_ICU_NAMESPACE
-#       define U_USING_ICU_NAMESPACE 1
-#   endif
-#   if U_USING_ICU_NAMESPACE
-        U_NAMESPACE_USE
-#   endif
-#else
-#   define U_NAMESPACE_BEGIN extern "C++" {
-#   define U_NAMESPACE_END }
-#   define U_NAMESPACE_USE
-#   define U_NAMESPACE_QUALIFIER
-#endif
-#else
-#   define U_NAMESPACE_BEGIN
-#   define U_NAMESPACE_END
-#   define U_NAMESPACE_USE
-#   define U_NAMESPACE_QUALIFIER
-#endif
-
-/*===========================================================================*/
-/* General version helper functions. Definitions in putil.c                  */
-/*===========================================================================*/
-
-/**
- * Parse a string with dotted-decimal version information and
- * fill in a UVersionInfo structure with the result.
- * Definition of this function lives in putil.c
- *
- * @param versionArray The destination structure for the version information.
- * @param versionString A string with dotted-decimal version information,
- *                      with up to four non-negative number fields with
- *                      values of up to 255 each.
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-u_versionFromString(UVersionInfo versionArray, const char *versionString);
-
-/**
- * Parse a Unicode string with dotted-decimal version information and
- * fill in a UVersionInfo structure with the result.
- * Definition of this function lives in putil.c
- *
- * @param versionArray The destination structure for the version information.
- * @param versionString A Unicode string with dotted-decimal version
- *                      information, with up to four non-negative number
- *                      fields with values of up to 255 each.
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-u_versionFromUString(UVersionInfo versionArray, const UChar *versionString);
-
-
-/**
- * Write a string with dotted-decimal version information according
- * to the input UVersionInfo.
- * Definition of this function lives in putil.c
- *
- * @param versionArray The version information to be written as a string.
- * @param versionString A string buffer that will be filled in with
- *                      a string corresponding to the numeric version
- *                      information in versionArray.
- *                      The buffer size must be at least U_MAX_VERSION_STRING_LENGTH.
- * @stable ICU 2.4
- */
-U_STABLE void U_EXPORT2
-u_versionToString(UVersionInfo versionArray, char *versionString);
-
-/**
- * Gets the ICU release version.  The version array stores the version information
- * for ICU.  For example, release "1.3.31.2" is then represented as 0x01031F02.
- * Definition of this function lives in putil.c
- *
- * @param versionArray the version # information, the result will be filled in
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-u_getVersion(UVersionInfo versionArray);
-#endif
diff --git a/source/i18n/unicode/basictz.h b/source/i18n/unicode/basictz.h
deleted file mode 100644
index f3d34a6..0000000
--- a/source/i18n/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 3.8
- */
-class U_I18N_API BasicTimeZone: public TimeZone {
-public:
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    BasicTimeZone();
-
-    /**
-     * Construct a timezone with a given ID.
-     * @param id a system time zone ID
-     * @stable ICU 3.8
-     */
-    BasicTimeZone(const UnicodeString &id);
-
-    /**
-     * Copy constructor.
-     * @param source the object to be copied.
-     * @stable ICU 3.8
-     */
-    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
diff --git a/source/i18n/unicode/bms.h b/source/i18n/unicode/bms.h
deleted file mode 100644
index 516e6aa..0000000
--- a/source/i18n/unicode/bms.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 1996-2010, International Business Machines Corporation and Others.
- * All rights reserved.
- */
-
-/**
- * \file 
- * \brief C API: Boyer-Moore StringSearch prototype.
- * \internal
- */
-
-#ifndef _BMS_H
-#define _BMS_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/ucol.h"
-
-/**
- * A <code>UCD</code> object holds the Collator-specific data needed to
- * compute the length of the shortest string that can
- * generate a partcular list of CEs.
- *
- * <code>UCD</code> objects are quite expensive to compute. Because
- * of this, they are cached. When you call <code>ucd_open</code> it
- * returns a reference counted cached object. When you call <code>ucd_close</code>
- * the reference count on the object is decremented but the object is not deleted.
- *
- * If you do not need to reuse any unreferenced objects in the cache, you can call
- * <code>ucd_flushCCache</code>. If you no longer need any <code>UCD</code>
- * objects, you can call <code>ucd_freeCache</code>
- */
-typedef void UCD;
-
-/**
- * Open a <code>UCD</code> object.
- *
- * @param coll - the collator
- * @param status - will be set if any errors occur. 
- *
- * @return the <code>UCD</code> object. You must call
- *         <code>ucd_close</code> when you are done using the object.
- *
- * Note: if on return status is set to an error, the only safe
- * thing to do with the returned object is to call <code>ucd_close</code>.
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI UCD * U_EXPORT2
-ucd_open(UCollator *coll, UErrorCode *status);
-
-/**
- * Release a <code>UCD</code> object.
- *
- * @param ucd - the object
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI void U_EXPORT2
-ucd_close(UCD *ucd);
-
-/**
- * Get the <code>UCollator</code> object used to create a <code>UCD</code> object.
- * The <code>UCollator</code> object returned may not be the exact
- * object that was used to create this object, but it will have the
- * same behavior.
- *
- * @param ucd - the <code>UCD</code> object
- *
- * @return the <code>UCollator</code> used to create the given
- *         <code>UCD</code> object.
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI UCollator * U_EXPORT2
-ucd_getCollator(UCD *ucd);
-
-/**
- * <code>UCD</code> objects are expensive to compute, and so
- * may be cached. This routine will free the cached objects and delete
- * the cache.
- *
- * WARNING: Don't call this until you are have called <code>close</code>
- * for each <code>UCD</code> object that you have used. also,
- * DO NOT call this if another thread may be calling <code>ucd_flushCache</code>
- * at the same time.
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI void U_EXPORT2
-ucd_freeCache();
-
-/**
- * <code>UCD</code> objects are expensive to compute, and so
- * may be cached. This routine will remove any unused <code>UCD</code>
- * objects from the cache.
- *
- * @internal 4.0.1 technology preview
- */
-U_CAPI void U_EXPORT2
-ucd_flushCache();
-
-/**
- * BMS
- *
- * This object holds the information needed to do a Collation sensitive Boyer-Moore search. It encapulates
- * the pattern, the "bad character" and "good suffix" tables, the Collator-based data needed to compute them,
- * and a reference to the text being searched.
- *
- * To do a search, you first need to get a <code>UCD</code> object by calling <code>ucd_open</code>.
- * Then you construct a <code>BMS</code> object from the <code>UCD</code> object, the pattern
- * string and the target string. Then you call the <code>search</code> method. Here's a code sample:
- *
- * <pre>
- * void boyerMooreExample(UCollator *collator, UChar *pattern, int32_t patternLen, UChar *target, int32_t targetLength)
- * {
- *     UErrorCode status = U_ZERO_ERROR;
- *     int32_t offset = 0, start = -1, end = -1;
- *     UCD *ucd = NULL);
- *     BMS *bms = NULL;
- *
- *     ucd = ucd_open(collator, &status);
- *     if (U_FAILURE(status)) {
- *         // could not create a UCD object
- *         return;
- *     }
- *
- *     BMS *bms = bms_open(ucd, pattern, patternLength, target, targetlength, &status);
- *     if (U_FAILURE(status)) {
- *         // could not create a BMS object
- *         ucd_close(ucd);
- *         return;
- *     }
- *
- *
- *     // Find all matches
- *     while (bms_search(bms, offset, &start, &end)) {
- *         // process the match between start and end
- *         ...
- *
- *         // advance past the match
- *         offset = end; 
- *     }
- *
- *     // at this point, if offset == 0, there were no matches
- *     if (offset == 0) {
- *         // handle the case of no matches
- *     }
- *
- *     bms_close(bms);
- *     ucd_close(ucd);
- *
- *     // UCD objects are cached, so the call to
- *     // ucd_close doesn't delete the object.
- *     // Call this if you don't need the object any more.
- *     ucd_flushCache();
- * }
- * </pre>
- *
- * NOTE: This is a technology preview. The final version of this API may not bear any resenblence to this API.
- *
- * Knows linitations:
- *   1) Backwards searching has not been implemented.
- *
- *   2) For Han and Hangul characters, this code ignores any Collation tailorings. In general,
- *      this isn't a problem, but in Korean locals, at strength 1, Hangul characters are tailored
- *      to be equal to Han characters with the same pronounciation. Because this code ignroes
- *      tailorings, searching for a Hangul character will not find a Han character and visa-versa.
- *
- *   3) In some cases, searching for a pattern that needs to be normalized and ends
- *      in a discontiguous contraction may fail. The only known cases of this are with
- *      the Tibetan script. For example searching for the pattern
- *      "\u0F7F\u0F80\u0F81\u0F82\u0F83\u0F84\u0F85" will fail. (This case is artificial. We've
- *      been unable to find a pratical, real-world example of this failure.)  
- *
- * NOTE: This is a technology preview. The final version of this API may not bear any resenblence to this API.
- *
- * @internal ICU 4.0.1 technology preview
- */
-struct BMS;
-typedef struct BMS BMS; /**< @see BMS */
-
-/**
- * Construct a <code>MBS</code> object.
- *
- * @param ucd - A <code>UCD</code> object holding the Collator-sensitive data
- * @param pattern - the string for which to search
- * @param patternLength - the length of the string for which to search
- * @param target - the string in which to search
- * @param targetLength - the length of the string in which to search
- * @param status - will be set if any errors occur. 
- *
- * @return the <code>BMS</code> object.
- *
- * Note: if on return status is set to an error, the only safe
- * thing to do with the returned object is to call
- * <code>bms_close</code>.
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI BMS * U_EXPORT2
-bms_open(UCD *ucd,
-         const UChar *pattern, int32_t patternLength,
-         const UChar *target,  int32_t targetLength,
-         UErrorCode  *status);
-
-/**
- * Close a <code>BMS</code> object and release all the
- * storage associated with it.
- *
- * @param bms - the <code>BMS</code> object to close.
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI void U_EXPORT2
-bms_close(BMS *bms);
-
-/**
- * Test the pattern to see if it generates any CEs.
- *
- * @param bms - the <code>BMS</code> object
- * @return <code>TRUE</code> if the pattern string did not generate any CEs
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI UBool U_EXPORT2
-bms_empty(BMS *bms);
-
-/**
- * Get the <code>UCD</code> object used to create
- * a given <code>BMS</code> object.
- *
- * @param bms - the <code>BMS</code> object
- *
- * @return - the <code>UCD</code> object used to create
- *           the given <code>BMS</code> object.
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI UCD * U_EXPORT2
-bms_getData(BMS *bms);
-
-/**
- * Search for the pattern string in the target string.
- *
- * @param bms - the <code>BMS</code> object
- * @param offset - the offset in the target string at which to begin the search
- * @param start - will be set to the starting offset of the match, or -1 if there's no match
- * @param end - will be set to the ending offset of the match, or -1 if there's no match
- *
- * @return <code>TRUE</code> if the match succeeds, <code>FALSE</code> otherwise.
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI UBool U_EXPORT2
-bms_search(BMS *bms, int32_t offset, int32_t *start, int32_t *end);
-
-/**
- * Set the target string for the match.
- *
- * @param bms - the <code>BMS</code> object
- * @param target - the new target string
- * @param targetLength - the length of the new target string
- * @param status - will be set if any errors occur. 
- *
- * @internal ICU 4.0.1 technology preview
- */
-U_CAPI void U_EXPORT2
-bms_setTargetString(BMS *bms, const UChar *target, int32_t targetLength, UErrorCode *status);
-
-#endif
-
-#endif /* _BMS_H */
diff --git a/source/i18n/unicode/bmsearch.h b/source/i18n/unicode/bmsearch.h
deleted file mode 100644
index b5973e5..0000000
--- a/source/i18n/unicode/bmsearch.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- ******************************************************************************
- *   Copyright (C) 1996-2010, International Business Machines                 *
- *   Corporation and others.  All Rights Reserved.                            *
- ******************************************************************************
- */
-
-/**
- * \file 
- * \brief C++ API: Boyer-Moore StringSearch technology preview
- * \internal ICU 4.0.1 technology preview
- */
- 
-#ifndef B_M_SEARCH_H
-#define B_M_SEARCH_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/uobject.h"
-#include "unicode/ucol.h"
-
-#include "unicode/colldata.h"
-
-U_NAMESPACE_BEGIN
-
-class BadCharacterTable;
-class GoodSuffixTable;
-class Target;
-
-/**
- * BoyerMooreSearch
- *
- * This object holds the information needed to do a Collation sensitive Boyer-Moore search. It encapulates
- * the pattern, the "bad character" and "good suffix" tables, the Collator-based data needed to compute them,
- * and a reference to the text being searched.
- *
- * To do a search, you fist need to get a <code>CollData</code> object by calling <code>CollData::open</code>.
- * Then you construct a <code>BoyerMooreSearch</code> object from the <code>CollData</code> object, the pattern
- * string and the target string. Then you call the <code>search</code> method. Here's a code sample:
- *
- * <pre>
- * void boyerMooreExample(UCollator *collator, UnicodeString *pattern, UnicodeString *target)
- * {
- *     UErrorCode status = U_ZERO_ERROR;
- *     CollData *collData = CollData::open(collator, status);
- *
- *     if (U_FAILURE(status)) {
- *         // could not create a CollData object
- *         return;
- *     }
- *
- *     BoyerMooreSearch *search = new BoyerMooreSearch(collData, *patternString, target, status);
- *
- *     if (U_FAILURE(status)) {
- *         // could not create a BoyerMooreSearch object
- *         CollData::close(collData);
- *         return;
- *     }
- *
- *     int32_t offset = 0, start = -1, end = -1;
- *
- *     // Find all matches
- *     while (search->search(offset, start, end)) {
- *         // process the match between start and end
- *         ...
- *         // advance past the match
- *         offset = end; 
- *     }
- *
- *     // at this point, if offset == 0, there were no matches
- *     if (offset == 0) {
- *         // handle the case of no matches
- *     }
- *
- *     delete search;
- *     CollData::close(collData);
- *
- *     // CollData objects are cached, so the call to
- *     // CollData::close doesn't delete the object.
- *     // Call this if you don't need the object any more.
- *     CollData::flushCollDataCache();
- * }
- * </pre>
- *
- * NOTE: This is a technology preview. The final version of this API may not bear any resenblence to this API.
- *
- * Knows linitations:
- *   1) Backwards searching has not been implemented.
- *
- *   2) For Han and Hangul characters, this code ignores any Collation tailorings. In general,
- *      this isn't a problem, but in Korean locals, at strength 1, Hangul characters are tailored
- *      to be equal to Han characters with the same pronounciation. Because this code ignroes
- *      tailorings, searching for a Hangul character will not find a Han character and visa-versa.
- *
- *   3) In some cases, searching for a pattern that needs to be normalized and ends
- *      in a discontiguous contraction may fail. The only known cases of this are with
- *      the Tibetan script. For example searching for the pattern
- *      "\u0F7F\u0F80\u0F81\u0F82\u0F83\u0F84\u0F85" will fail. (This case is artificial. We've
- *      been unable to find a pratical, real-world example of this failure.)  
- *
- * @internal ICU 4.0.1 technology preview
- *
- * @see CollData
- */
-class U_I18N_API BoyerMooreSearch : public UObject
-{
-public:
-    /**
-     * Construct a <code>BoyerMooreSearch</code> object.
-     *
-     * @param theData - A <code>CollData</code> object holding the Collator-sensitive data
-     * @param patternString - the string for which to search
-     * @param targetString - the string in which to search or <code>NULL</code> if youu will
-     *                       set it later by calling <code>setTargetString</code>.
-     * @param status - will be set if any errors occur. 
-     *
-     * Note: if on return, status is set to an error code,
-     * the only safe thing to do with this object is to call
-     * the destructor.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    BoyerMooreSearch(CollData *theData, const UnicodeString &patternString, const UnicodeString *targetString, UErrorCode &status);
-
-    /**
-     * The desstructor
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    ~BoyerMooreSearch();
-
-    /**
-     * Test the pattern to see if it generates any CEs.
-     *
-     * @return <code>TRUE</code> if the pattern string did not generate any CEs
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    UBool empty();
-
-    /**
-     * Search for the pattern string in the target string.
-     *
-     * @param offset - the offset in the target string at which to begin the search
-     * @param start - will be set to the starting offset of the match, or -1 if there's no match
-     * @param end - will be set to the ending offset of the match, or -1 if there's no match
-     *
-     * @return <code>TRUE</code> if the match succeeds, <code>FALSE</code> otherwise.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    UBool search(int32_t offset, int32_t &start, int32_t &end);
-
-    /**
-     * Set the target string for the match.
-     *
-     * @param targetString - the new target string
-     * @param status - will be set if any errors occur. 
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    void setTargetString(const UnicodeString *targetString, UErrorCode &status);
-
-    // **** no longer need these? ****
-    /**
-     * Return the <code>CollData</code> object used for searching
-     *
-     * @return the <code>CollData</code> object used for searching
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    CollData *getData();
-
-    /**
-     * Return the CEs generated by the pattern string.
-     *
-     * @return a <code>CEList</code> object holding the CEs generated by the pattern string.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    CEList   *getPatternCEs();
-
-    /**
-     * Return the <code>BadCharacterTable</code> object computed for the pattern string.
-     *
-     * @return the <code>BadCharacterTable</code> object.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    BadCharacterTable *getBadCharacterTable();
-
-    /**
-     * Return the <code>GoodSuffixTable</code> object computed for the pattern string.
-     *
-     * @return the <code>GoodSuffixTable</code> object computed for the pattern string.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    GoodSuffixTable   *getGoodSuffixTable();
-
-    /**
-     * UObject glue...
-     * @internal ICU 4.0.1 technology preview
-     */
-    virtual UClassID getDynamicClassID() const;
-    /**
-     * UObject glue...
-     * @internal ICU 4.0.1 technology preview
-     */
-    static UClassID getStaticClassID();
-    
-private:
-    CollData *data;
-    CEList *patCEs;
-    BadCharacterTable *badCharacterTable;
-    GoodSuffixTable   *goodSuffixTable;
-    UnicodeString pattern;
-    Target *target;
-};
-
-U_NAMESPACE_END
-
-#endif // #if !UCONFIG_NO_COLLATION
-#endif // #ifndef B_M_SEARCH_H
diff --git a/source/i18n/unicode/calendar.h b/source/i18n/unicode/calendar.h
deleted file mode 100644
index 5aa5ff9..0000000
--- a/source/i18n/unicode/calendar.h
+++ /dev/null
@@ -1,2252 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File CALENDAR.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   04/22/97    aliu        Expanded and corrected comments and other header
-*                           contents.
-*   05/01/97    aliu        Made equals(), before(), after() arguments const.
-*   05/20/97    aliu        Replaced fAreFieldsSet with fAreFieldsInSync and
-*                           fAreAllFieldsSet.
-*   07/27/98    stephen     Sync up with JDK 1.2
-*   11/15/99    weiv        added YEAR_WOY and DOW_LOCAL
-*                           to EDateFields
-*    8/19/2002  srl         Removed Javaisms
-*   11/07/2003  srl         Update, clean up documentation.
-********************************************************************************
-*/
-
-#ifndef CALENDAR_H
-#define CALENDAR_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Calendar object
- */
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-#include "unicode/locid.h"
-#include "unicode/timezone.h"
-#include "unicode/ucal.h"
-#include "unicode/umisc.h"
-
-U_NAMESPACE_BEGIN
-
-class ICUServiceFactory;
-
-/**
- * @internal
- */
-typedef int32_t UFieldResolutionTable[12][8];
-
-/**
- * <code>Calendar</code> is an abstract base class for converting between
- * a <code>UDate</code> object and a set of integer fields such as
- * <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>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> class.)
- *
- * <p>
- * Subclasses of <code>Calendar</code> interpret a <code>UDate</code>
- * according to the rules of a specific calendar system.
- * The most commonly used subclass of <code>Calendar</code> is
- * <code>GregorianCalendar</code>. Other subclasses could represent
- * the various types of lunar calendars in use in many parts of the world.
- *
- * <p>
- * <b>NOTE</b>: (ICU 2.6) The subclass interface should be considered unstable
- * - it WILL change.
- *
- * <p>
- * Like other locale-sensitive classes, <code>Calendar</code> provides a
- * static method, <code>createInstance</code>, for getting a generally useful
- * object of this type. <code>Calendar</code>'s <code>createInstance</code> method
- * returns the appropriate <code>Calendar</code> subclass whose
- * time fields have been initialized with the current date and time:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * Calendar *rightNow = Calendar::createInstance(errCode);
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * <p>
- * A <code>Calendar</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., YEAR = 1970, MONTH = JANUARY, 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>
- * MONTH + DAY_OF_MONTH
- * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
- * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
- * DAY_OF_YEAR
- * DAY_OF_WEEK + WEEK_OF_YEAR
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * For the time of day:
- *
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * HOUR_OF_DAY
- * AM_PM + HOUR
- * </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
- */
-class U_I18N_API Calendar : public UObject {
-public:
-
-    /**
-     * Field IDs for date and time. Used to specify date/time fields. ERA is calendar
-     * specific. Example ranges given are for illustration only; see specific Calendar
-     * subclasses for actual ranges.
-     * @deprecated ICU 2.6. Use C enum UCalendarDateFields defined in ucal.h
-     */
-    enum EDateFields {
-#ifndef U_HIDE_DEPRECATED_API
-/*
- * ERA may be defined on other platforms. To avoid any potential problems undefined it here.
- */
-#ifdef ERA
-#undef ERA
-#endif
-        ERA,                  // Example: 0..1
-        YEAR,                 // Example: 1..big number
-        MONTH,                // Example: 0..11
-        WEEK_OF_YEAR,         // Example: 1..53
-        WEEK_OF_MONTH,        // Example: 1..4
-        DATE,                 // Example: 1..31
-        DAY_OF_YEAR,          // Example: 1..365
-        DAY_OF_WEEK,          // Example: 1..7
-        DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1
-        AM_PM,                // Example: 0..1
-        HOUR,                 // Example: 0..11
-        HOUR_OF_DAY,          // Example: 0..23
-        MINUTE,               // Example: 0..59
-        SECOND,               // Example: 0..59
-        MILLISECOND,          // Example: 0..999
-        ZONE_OFFSET,          // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR
-        DST_OFFSET,           // Example: 0 or U_MILLIS_PER_HOUR
-        YEAR_WOY,             // 'Y' Example: 1..big number - Year of Week of Year
-        DOW_LOCAL,            // 'e' Example: 1..7 - Day of Week / Localized
-        
-        EXTENDED_YEAR,
-        JULIAN_DAY,
-        MILLISECONDS_IN_DAY,
-        IS_LEAP_MONTH,
-
-        FIELD_COUNT = UCAL_FIELD_COUNT // See ucal.h for other fields.
-#endif /* U_HIDE_DEPRECATED_API */
-    };
-
-    /**
-     * 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., SUNDAY.
-     * @deprecated ICU 2.6. Use C enum UCalendarDaysOfWeek defined in ucal.h
-     */
-    enum EDaysOfWeek {
-#ifndef U_HIDE_DEPRECATED_API
-        SUNDAY = 1,
-        MONDAY,
-        TUESDAY,
-        WEDNESDAY,
-        THURSDAY,
-        FRIDAY,
-        SATURDAY
-#endif /* U_HIDE_DEPRECATED_API */
-    };
-
-    /**
-     * Useful constants for month. Note: Calendar month is 0-based.
-     * @deprecated ICU 2.6. Use C enum UCalendarMonths defined in ucal.h
-     */
-    enum EMonths {
-#ifndef U_HIDE_DEPRECATED_API
-        JANUARY,
-        FEBRUARY,
-        MARCH,
-        APRIL,
-        MAY,
-        JUNE,
-        JULY,
-        AUGUST,
-        SEPTEMBER,
-        OCTOBER,
-        NOVEMBER,
-        DECEMBER,
-        UNDECIMBER
-#endif /* U_HIDE_DEPRECATED_API */
-    };
-
-    /**
-     * Useful constants for hour in 12-hour clock. Used in GregorianCalendar.
-     * @deprecated ICU 2.6. Use C enum UCalendarAMPMs defined in ucal.h
-     */
-    enum EAmpm {
-#ifndef U_HIDE_DEPRECATED_API
-        AM,
-        PM
-#endif /* U_HIDE_DEPRECATED_API */
-    };
-
-    /**
-     * destructor
-     * @stable ICU 2.0
-     */
-    virtual ~Calendar();
-
-    /**
-     * Create and return a polymorphic copy of this calendar.
-     *
-     * @return    a polymorphic copy of this calendar.
-     * @stable ICU 2.0
-     */
-    virtual Calendar* clone(void) const = 0;
-
-    /**
-     * Creates a Calendar using the default timezone and locale. Clients are responsible
-     * for deleting the object returned.
-     *
-     * @param success  Indicates the success/failure of Calendar creation. Filled in
-     *                 with U_ZERO_ERROR if created successfully, set to a failure result
-     *                 otherwise. U_MISSING_RESOURCE_ERROR will be returned if the resource data
-     *                 requests a calendar type which has not been installed.
-     * @return         A Calendar if created successfully. NULL otherwise.
-     * @stable ICU 2.0
-     */
-    static Calendar* U_EXPORT2 createInstance(UErrorCode& success);
-
-    /**
-     * Creates a Calendar using the given timezone and the default locale.
-     * The Calendar takes ownership of zoneToAdopt; the
-     * client must not delete it.
-     *
-     * @param zoneToAdopt  The given timezone to be adopted.
-     * @param success      Indicates the success/failure of Calendar creation. Filled in
-     *                     with U_ZERO_ERROR if created successfully, set to a failure result
-     *                     otherwise.
-     * @return             A Calendar if created successfully. NULL otherwise.
-     * @stable ICU 2.0
-     */
-    static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, UErrorCode& success);
-
-    /**
-     * Creates a Calendar using the given timezone and the default locale.  The TimeZone
-     * is _not_ adopted; the client is still responsible for deleting it.
-     *
-     * @param zone  The timezone.
-     * @param success      Indicates the success/failure of Calendar creation. Filled in
-     *                     with U_ZERO_ERROR if created successfully, set to a failure result
-     *                     otherwise.
-     * @return             A Calendar if created successfully. NULL otherwise.
-     * @stable ICU 2.0
-     */
-    static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, UErrorCode& success);
-
-    /**
-     * Creates a Calendar using the default timezone and the given locale.
-     *
-     * @param aLocale  The given locale.
-     * @param success  Indicates the success/failure of Calendar creation. Filled in
-     *                 with U_ZERO_ERROR if created successfully, set to a failure result
-     *                 otherwise.
-     * @return         A Calendar if created successfully. NULL otherwise.
-     * @stable ICU 2.0
-     */
-    static Calendar* U_EXPORT2 createInstance(const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Creates a Calendar using the given timezone and given locale.
-     * The Calendar takes ownership of zoneToAdopt; the
-     * client must not delete it.
-     *
-     * @param zoneToAdopt  The given timezone to be adopted.
-     * @param aLocale      The given locale.
-     * @param success      Indicates the success/failure of Calendar creation. Filled in
-     *                     with U_ZERO_ERROR if created successfully, set to a failure result
-     *                     otherwise.
-     * @return             A Calendar if created successfully. NULL otherwise.
-     * @stable ICU 2.0
-     */
-    static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Gets a Calendar using the given timezone and given locale.  The TimeZone
-     * is _not_ adopted; the client is still responsible for deleting it.
-     *
-     * @param zoneToAdopt  The given timezone to be adopted.
-     * @param aLocale      The given locale.
-     * @param success      Indicates the success/failure of Calendar creation. Filled in
-     *                     with U_ZERO_ERROR if created successfully, set to a failure result
-     *                     otherwise.
-     * @return             A Calendar if created successfully. NULL otherwise.
-     * @stable ICU 2.0
-     */
-    static Calendar* U_EXPORT2 createInstance(const TimeZone& zoneToAdopt, const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Returns a list of the locales for which Calendars are installed.
-     *
-     * @param count  Number of locales returned.
-     * @return       An array of Locale objects representing the set of locales for which
-     *               Calendars are installed.  The system retains ownership of this list;
-     *               the caller must NOT delete it. Does not include user-registered Calendars.
-     * @stable ICU 2.0
-     */
-    static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
-
-
-    /**
-     * Given a key and a locale, returns an array of string values in a preferred
-     * order that would make a difference. These are all and only those values where
-     * the open (creation) of the service with the locale formed from the input locale
-     * plus input keyword and that value has different behavior than creation with the
-     * input locale alone.
-     * @param key           one of the keys supported by this service.  For now, only
-     *                      "calendar" is supported.
-     * @param locale        the locale
-     * @param commonlyUsed  if set to true it will return only commonly used values
-     *                      with the given locale in preferred order.  Otherwise,
-     *                      it will return all the available values for the locale.
-     * @param status        ICU Error Code
-     * @return a string enumeration over keyword values for the given key and the locale.
-     * @stable ICU 4.2
-     */
-    static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* key,
-                    const Locale& locale, UBool commonlyUsed, UErrorCode& status);
-
-    /**
-     * Returns the current UTC (GMT) time measured in milliseconds since 0:00:00 on 1/1/70
-     * (derived from the system time).
-     *
-     * @return   The current UTC time in milliseconds.
-     * @stable ICU 2.0
-     */
-    static UDate U_EXPORT2 getNow(void);
-
-    /**
-     * Gets this Calendar's time as milliseconds. May involve recalculation of time due
-     * to previous calls to set time field values. The time specified is non-local UTC
-     * (GMT) time. Although this method is const, this object may actually be changed
-     * (semantically const).
-     *
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @return        The current time in UTC (GMT) time, or zero if the operation
-     *                failed.
-     * @stable ICU 2.0
-     */
-    inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); }
-
-    /**
-     * Sets this Calendar's current time with the given UDate. The time specified should
-     * be in non-local UTC (GMT) time.
-     *
-     * @param date  The given UDate in UTC (GMT) time.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.0
-     */
-    inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); }
-
-    /**
-     * Compares the equality of two Calendar objects. Objects of different subclasses
-     * are considered unequal. This comparison is very exacting; two Calendar objects
-     * must be in exactly the same state to be considered equal. To compare based on the
-     * represented time, use equals() instead.
-     *
-     * @param that  The Calendar object to be compared with.
-     * @return      True if the given Calendar is the same as this Calendar; false
-     *              otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const Calendar& that) const;
-
-    /**
-     * Compares the inequality of two Calendar objects.
-     *
-     * @param that  The Calendar object to be compared with.
-     * @return      True if the given Calendar is not the same as this Calendar; false
-     *              otherwise.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const Calendar& that) const {return !operator==(that);}
-
-    /**
-     * Returns TRUE if the given Calendar object is equivalent to this
-     * one.  An equivalent Calendar will behave exactly as this one
-     * does, but it may be set to a different time.  By contrast, for
-     * the operator==() method to return TRUE, the other Calendar must
-     * be set to the same time.
-     *
-     * @param other the Calendar to be compared with this Calendar
-     * @stable ICU 2.4
-     */
-    virtual UBool isEquivalentTo(const Calendar& other) const;
-
-    /**
-     * Compares the Calendar time, whereas Calendar::operator== compares the equality of
-     * Calendar objects.
-     *
-     * @param when    The Calendar to be compared with this Calendar. Although this is a
-     *                const parameter, the object may be modified physically
-     *                (semantically const).
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @return        True if the current time of this Calendar is equal to the time of
-     *                Calendar when; false otherwise.
-     * @stable ICU 2.0
-     */
-    UBool equals(const Calendar& when, UErrorCode& status) const;
-
-    /**
-     * Returns true if this Calendar's current time is before "when"'s current time.
-     *
-     * @param when    The Calendar to be compared with this Calendar. Although this is a
-     *                const parameter, the object may be modified physically
-     *                (semantically const).
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @return        True if the current time of this Calendar is before the time of
-     *                Calendar when; false otherwise.
-     * @stable ICU 2.0
-     */
-    UBool before(const Calendar& when, UErrorCode& status) const;
-
-    /**
-     * Returns true if this Calendar's current time is after "when"'s current time.
-     *
-     * @param when    The Calendar to be compared with this Calendar. Although this is a
-     *                const parameter, the object may be modified physically
-     *                (semantically const).
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @return        True if the current time of this Calendar is after the time of
-     *                Calendar when; false otherwise.
-     * @stable ICU 2.0
-     */
-    UBool after(const Calendar& when, UErrorCode& status) const;
-
-    /**
-     * UDate Arithmetic function. Adds the specified (signed) amount of time to the given
-     * time field, based on the calendar's rules. For example, to subtract 5 days from
-     * the current time of the calendar, call add(Calendar::DATE, -5). When adding on
-     * the month or Calendar::MONTH field, other fields like date might conflict and
-     * need to be changed. For instance, adding 1 month on the date 01/31/96 will result
-     * in 02/29/96.
-     *
-     * @param field   Specifies which date field to modify.
-     * @param amount  The amount of time to be added to the field, in the natural unit
-     *                for that field (e.g., days for the day fields, hours for the hour
-     *                field.)
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @deprecated ICU 2.6. use add(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.
-     */
-    virtual void add(EDateFields field, int32_t amount, UErrorCode& status);
-
-    /**
-     * UDate Arithmetic function. Adds the specified (signed) amount of time to the given
-     * time field, based on the calendar's rules. For example, to subtract 5 days from
-     * the current time of the calendar, call add(Calendar::DATE, -5). When adding on
-     * the month or Calendar::MONTH field, other fields like date might conflict and
-     * need to be changed. For instance, adding 1 month on the date 01/31/96 will result
-     * in 02/29/96.
-     *
-     * @param field   Specifies which date field to modify.
-     * @param amount  The amount of time to be added to the field, in the natural unit
-     *                for that field (e.g., days for the day fields, hours for the hour
-     *                field.)
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.6.
-     */
-    virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status);
-
-    /**
-     * Time Field Rolling function. Rolls (up/down) a single unit of time on the given
-     * time field. For example, to roll the current date up by one day, call
-     * roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it
-     * will roll the year value in the range between getMinimum(Calendar::YEAR) and the
-     * value returned by getMaximum(Calendar::YEAR). When rolling on the month or
-     * Calendar::MONTH field, other fields like date might conflict and, need to be
-     * changed. For instance, rolling the month up on the date 01/31/96 will result in
-     * 02/29/96. Rolling up always means rolling forward in time; e.g., rolling the year
-     * up on "100 BC" will result in "99 BC", for Gregorian calendar. When rolling on the
-     * hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the hour value in the range
-     * between 0 and 23, which is zero-based.
-     * <P>
-     * NOTE: Do not use this method -- use roll(EDateFields, int, UErrorCode&) instead.
-     *
-     * @param field   The time field.
-     * @param up      Indicates if the value of the specified time field is to be rolled
-     *                up or rolled down. Use true if rolling up, false otherwise.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, UBool up, UErrorCode& status) instead.
-     */
-    inline void roll(EDateFields field, UBool up, UErrorCode& status);
-
-    /**
-     * Time Field Rolling function. Rolls (up/down) a single unit of time on the given
-     * time field. For example, to roll the current date up by one day, call
-     * roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it
-     * will roll the year value in the range between getMinimum(Calendar::YEAR) and the
-     * value returned by getMaximum(Calendar::YEAR). When rolling on the month or
-     * Calendar::MONTH field, other fields like date might conflict and, need to be
-     * changed. For instance, rolling the month up on the date 01/31/96 will result in
-     * 02/29/96. Rolling up always means rolling forward in time; e.g., rolling the year
-     * up on "100 BC" will result in "99 BC", for Gregorian calendar. When rolling on the
-     * hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the hour value in the range
-     * between 0 and 23, which is zero-based.
-     * <P>
-     * NOTE: Do not use this method -- use roll(UCalendarDateFields, int, UErrorCode&) instead.
-     *
-     * @param field   The time field.
-     * @param up      Indicates if the value of the specified time field is to be rolled
-     *                up or rolled down. Use true if rolling up, false otherwise.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.6.
-     */
-    inline void roll(UCalendarDateFields field, UBool up, UErrorCode& status);
-
-    /**
-     * Time Field Rolling function. Rolls by the given amount on the given
-     * time field. For example, to roll the current date up by one day, call
-     * roll(Calendar::DATE, +1, status). When rolling on the month or
-     * Calendar::MONTH field, other fields like date might conflict and, need to be
-     * changed. For instance, rolling the month up on the date 01/31/96 will result in
-     * 02/29/96.  Rolling by a positive value always means rolling forward in time;
-     * e.g., rolling the year by +1 on "100 BC" will result in "99 BC", for Gregorian
-     * calendar. When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will
-     * roll the hour value in the range between 0 and 23, which is zero-based.
-     * <P>
-     * The only difference between roll() and add() is that roll() does not change
-     * the value of more significant fields when it reaches the minimum or maximum
-     * of its range, whereas add() does.
-     *
-     * @param field   The time field.
-     * @param amount  Indicates amount to roll.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid, this will be set to
-     *                an error status.
-     * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.
-     */
-    virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
-
-    /**
-     * Time Field Rolling function. Rolls by the given amount on the given
-     * time field. For example, to roll the current date up by one day, call
-     * roll(Calendar::DATE, +1, status). When rolling on the month or
-     * Calendar::MONTH field, other fields like date might conflict and, need to be
-     * changed. For instance, rolling the month up on the date 01/31/96 will result in
-     * 02/29/96.  Rolling by a positive value always means rolling forward in time;
-     * e.g., rolling the year by +1 on "100 BC" will result in "99 BC", for Gregorian
-     * calendar. When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will
-     * roll the hour value in the range between 0 and 23, which is zero-based.
-     * <P>
-     * The only difference between roll() and add() is that roll() does not change
-     * the value of more significant fields when it reaches the minimum or maximum
-     * of its range, whereas add() does.
-     *
-     * @param field   The time field.
-     * @param amount  Indicates amount to roll.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid, this will be set to
-     *                an error status.
-     * @stable ICU 2.6.
-     */
-    virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
-
-    /**
-     * Return the difference between the given time and the time this
-     * calendar object is set to.  If this calendar is set
-     * <em>before</em> the given time, the returned value will be
-     * positive.  If this calendar is set <em>after</em> the given
-     * time, the returned value will be negative.  The
-     * <code>field</code> parameter specifies the units of the return
-     * value.  For example, if <code>fieldDifference(when,
-     * Calendar::MONTH)</code> returns 3, then this calendar is set to
-     * 3 months before <code>when</code>, and possibly some addition
-     * time less than one month.
-     *
-     * <p>As a side effect of this call, this calendar is advanced
-     * toward <code>when</code> by the given amount.  That is, calling
-     * this method has the side effect of calling <code>add(field,
-     * n)</code>, where <code>n</code> is the return value.
-     *
-     * <p>Usage: To use this method, call it first with the largest
-     * field of interest, then with progressively smaller fields.  For
-     * example:
-     *
-     * <pre>
-     * int y = cal->fieldDifference(when, Calendar::YEAR, err);
-     * int m = cal->fieldDifference(when, Calendar::MONTH, err);
-     * int d = cal->fieldDifference(when, Calendar::DATE, err);</pre>
-     *
-     * computes the difference between <code>cal</code> and
-     * <code>when</code> in years, months, and days.
-     *
-     * <p>Note: <code>fieldDifference()</code> is
-     * <em>asymmetrical</em>.  That is, in the following code:
-     *
-     * <pre>
-     * cal->setTime(date1, err);
-     * int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);
-     * int d1 = cal->fieldDifference(date2, Calendar::DATE, err);
-     * cal->setTime(date2, err);
-     * int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);
-     * int d2 = cal->fieldDifference(date1, Calendar::DATE, err);</pre>
-     *
-     * one might expect that <code>m1 == -m2 && d1 == -d2</code>.
-     * However, this is not generally the case, because of
-     * irregularities in the underlying calendar system (e.g., the
-     * Gregorian calendar has a varying number of days per month).
-     *
-     * @param when the date to compare this calendar's time to
-     * @param field the field in which to compute the result
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid, this will be set to
-     *                an error status.
-     * @return the difference, either positive or negative, between
-     * this calendar's time and <code>when</code>, in terms of
-     * <code>field</code>.
-     * @deprecated ICU 2.6. Use fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status).
-     */
-    virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status);
-
-    /**
-     * Return the difference between the given time and the time this
-     * calendar object is set to.  If this calendar is set
-     * <em>before</em> the given time, the returned value will be
-     * positive.  If this calendar is set <em>after</em> the given
-     * time, the returned value will be negative.  The
-     * <code>field</code> parameter specifies the units of the return
-     * value.  For example, if <code>fieldDifference(when,
-     * Calendar::MONTH)</code> returns 3, then this calendar is set to
-     * 3 months before <code>when</code>, and possibly some addition
-     * time less than one month.
-     *
-     * <p>As a side effect of this call, this calendar is advanced
-     * toward <code>when</code> by the given amount.  That is, calling
-     * this method has the side effect of calling <code>add(field,
-     * n)</code>, where <code>n</code> is the return value.
-     *
-     * <p>Usage: To use this method, call it first with the largest
-     * field of interest, then with progressively smaller fields.  For
-     * example:
-     *
-     * <pre>
-     * int y = cal->fieldDifference(when, Calendar::YEAR, err);
-     * int m = cal->fieldDifference(when, Calendar::MONTH, err);
-     * int d = cal->fieldDifference(when, Calendar::DATE, err);</pre>
-     *
-     * computes the difference between <code>cal</code> and
-     * <code>when</code> in years, months, and days.
-     *
-     * <p>Note: <code>fieldDifference()</code> is
-     * <em>asymmetrical</em>.  That is, in the following code:
-     *
-     * <pre>
-     * cal->setTime(date1, err);
-     * int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);
-     * int d1 = cal->fieldDifference(date2, Calendar::DATE, err);
-     * cal->setTime(date2, err);
-     * int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);
-     * int d2 = cal->fieldDifference(date1, Calendar::DATE, err);</pre>
-     *
-     * one might expect that <code>m1 == -m2 && d1 == -d2</code>.
-     * However, this is not generally the case, because of
-     * irregularities in the underlying calendar system (e.g., the
-     * Gregorian calendar has a varying number of days per month).
-     *
-     * @param when the date to compare this calendar's time to
-     * @param field the field in which to compute the result
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid, this will be set to
-     *                an error status.
-     * @return the difference, either positive or negative, between
-     * this calendar's time and <code>when</code>, in terms of
-     * <code>field</code>.
-     * @stable ICU 2.6.
-     */
-    virtual int32_t fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status);
-
-    /**
-     * Sets the calendar's time zone to be the one passed in. The Calendar takes ownership
-     * of the TimeZone; the caller is no longer responsible for deleting it.  If the
-     * given time zone is NULL, this function has no effect.
-     *
-     * @param value  The given time zone.
-     * @stable ICU 2.0
-     */
-    void adoptTimeZone(TimeZone* value);
-
-    /**
-     * Sets the calendar's time zone to be the same as the one passed in. The TimeZone
-     * passed in is _not_ adopted; the client is still responsible for deleting it.
-     *
-     * @param zone  The given time zone.
-     * @stable ICU 2.0
-     */
-    void setTimeZone(const TimeZone& zone);
-
-    /**
-     * Returns a reference to the time zone owned by this calendar. The returned reference
-     * is only valid until clients make another call to adoptTimeZone or setTimeZone,
-     * or this Calendar is destroyed.
-     *
-     * @return   The time zone object associated with this calendar.
-     * @stable ICU 2.0
-     */
-    const TimeZone& getTimeZone(void) const;
-
-    /**
-     * Returns the time zone owned by this calendar. The caller owns the returned object
-     * and must delete it when done.  After this call, the new time zone associated
-     * with this Calendar is the default TimeZone as returned by TimeZone::createDefault().
-     *
-     * @return   The time zone object which was associated with this calendar.
-     * @stable ICU 2.0
-     */
-    TimeZone* orphanTimeZone(void);
-
-    /**
-     * Queries if the current date for this Calendar is in Daylight Savings Time.
-     *
-     * @param status Fill-in parameter which receives the status of this operation.
-     * @return   True if the current date for this Calendar is in Daylight Savings Time,
-     *           false, otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool inDaylightTime(UErrorCode& status) const = 0;
-
-    /**
-     * Specifies whether or not date/time interpretation is to be lenient. With lenient
-     * interpretation, a date such as "February 942, 1996" will be treated as being
-     * equivalent to the 941st day after February 1, 1996. With strict interpretation,
-     * such dates will cause an error when computing time from the time field values
-     * representing the dates.
-     *
-     * @param lenient  True specifies date/time interpretation to be lenient.
-     *
-     * @see            DateFormat#setLenient
-     * @stable ICU 2.0
-     */
-    void setLenient(UBool lenient);
-
-    /**
-     * Tells whether date/time interpretation is to be lenient.
-     *
-     * @return   True tells that date/time interpretation is to be lenient.
-     * @stable ICU 2.0
-     */
-    UBool isLenient(void) const;
-
-    /**
-     * Sets what the first day of the week is; e.g., Sunday in US, Monday in France.
-     *
-     * @param value  The given first day of the week.
-     * @deprecated ICU 2.6. Use setFirstDayOfWeek(UCalendarDaysOfWeek value) instead.
-     */
-    void setFirstDayOfWeek(EDaysOfWeek value);
-
-    /**
-     * Sets what the first day of the week is; e.g., Sunday in US, Monday in France.
-     *
-     * @param value  The given first day of the week.
-     * @stable ICU 2.6.
-     */
-    void setFirstDayOfWeek(UCalendarDaysOfWeek value);
-
-    /**
-     * Gets what the first day of the week is; e.g., Sunday in US, Monday in France.
-     *
-     * @return   The first day of the week.
-     * @deprecated ICU 2.6 use the overload with error code
-     */
-    EDaysOfWeek getFirstDayOfWeek(void) const;
-
-    /**
-     * Gets what the first day of the week is; e.g., Sunday in US, Monday in France.
-     *
-     * @param status error code
-     * @return   The first day of the week.
-     * @stable ICU 2.6
-     */
-    UCalendarDaysOfWeek getFirstDayOfWeek(UErrorCode &status) const;
-
-    /**
-     * Sets what the minimal days required in the first week of the year are; For
-     * example, if the first week is defined as one that contains the first day of the
-     * first month of a year, call the method with value 1. If it must be a full week,
-     * use value 7.
-     *
-     * @param value  The given minimal days required in the first week of the year.
-     * @stable ICU 2.0
-     */
-    void setMinimalDaysInFirstWeek(uint8_t value);
-
-    /**
-     * Gets what the minimal days required in the first week of the year are; e.g., if
-     * the first week is defined as one that contains the first day of the first month
-     * of a year, getMinimalDaysInFirstWeek returns 1. If the minimal days required must
-     * be a full week, getMinimalDaysInFirstWeek returns 7.
-     *
-     * @return   The minimal days required in the first week of the year.
-     * @stable ICU 2.0
-     */
-    uint8_t getMinimalDaysInFirstWeek(void) const;
-
-    /**
-     * Gets the minimum value for the given time field. e.g., for Gregorian
-     * DAY_OF_MONTH, 1.
-     *
-     * @param field  The given time field.
-     * @return       The minimum value for the given time field.
-     * @deprecated ICU 2.6. Use getMinimum(UCalendarDateFields field) instead.
-     */
-    virtual int32_t getMinimum(EDateFields field) const;
-
-    /**
-     * Gets the minimum value for the given time field. e.g., for Gregorian
-     * DAY_OF_MONTH, 1.
-     *
-     * @param field  The given time field.
-     * @return       The minimum value for the given time field.
-     * @stable ICU 2.6.
-     */
-    virtual int32_t getMinimum(UCalendarDateFields field) const;
-
-    /**
-     * Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,
-     * 31.
-     *
-     * @param field  The given time field.
-     * @return       The maximum value for the given time field.
-     * @deprecated ICU 2.6. Use getMaximum(UCalendarDateFields field) instead.
-     */
-    virtual int32_t getMaximum(EDateFields field) const;
-
-    /**
-     * Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,
-     * 31.
-     *
-     * @param field  The given time field.
-     * @return       The maximum value for the given time field.
-     * @stable ICU 2.6.
-     */
-    virtual int32_t getMaximum(UCalendarDateFields field) const;
-
-    /**
-     * Gets the highest minimum value for the given field if varies. Otherwise same as
-     * getMinimum(). For Gregorian, no difference.
-     *
-     * @param field  The given time field.
-     * @return       The highest minimum value for the given time field.
-     * @deprecated ICU 2.6. Use getGreatestMinimum(UCalendarDateFields field) instead.
-     */
-    virtual int32_t getGreatestMinimum(EDateFields field) const;
-
-    /**
-     * Gets the highest minimum value for the given field if varies. Otherwise same as
-     * getMinimum(). For Gregorian, no difference.
-     *
-     * @param field  The given time field.
-     * @return       The highest minimum value for the given time field.
-     * @stable ICU 2.6.
-     */
-    virtual int32_t getGreatestMinimum(UCalendarDateFields field) const;
-
-    /**
-     * Gets the lowest maximum value for the given field if varies. Otherwise same as
-     * getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.
-     *
-     * @param field  The given time field.
-     * @return       The lowest maximum value for the given time field.
-     * @deprecated ICU 2.6. Use getLeastMaximum(UCalendarDateFields field) instead.
-     */
-    virtual int32_t getLeastMaximum(EDateFields field) const;
-
-    /**
-     * Gets the lowest maximum value for the given field if varies. Otherwise same as
-     * getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.
-     *
-     * @param field  The given time field.
-     * @return       The lowest maximum value for the given time field.
-     * @stable ICU 2.6.
-     */
-    virtual int32_t getLeastMaximum(UCalendarDateFields field) const;
-
-    /**
-     * Return the minimum value that this field could have, given the current date.
-     * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
-     *
-     * The version of this function on Calendar uses an iterative algorithm to determine the
-     * actual minimum value for the field.  There is almost always a more efficient way to
-     * accomplish this (in most cases, you can simply return getMinimum()).  GregorianCalendar
-     * overrides this function with a more efficient implementation.
-     *
-     * @param field    the field to determine the minimum of
-     * @param status   Fill-in parameter which receives the status of this operation.
-     * @return         the minimum of the given field for the current date of this Calendar
-     * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field, UErrorCode& status) instead.
-     */
-    int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
-
-    /**
-     * Return the minimum value that this field could have, given the current date.
-     * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
-     *
-     * The version of this function on Calendar uses an iterative algorithm to determine the
-     * actual minimum value for the field.  There is almost always a more efficient way to
-     * accomplish this (in most cases, you can simply return getMinimum()).  GregorianCalendar
-     * overrides this function with a more efficient implementation.
-     *
-     * @param field    the field to determine the minimum of
-     * @param status   Fill-in parameter which receives the status of this operation.
-     * @return         the minimum of the given field for the current date of this Calendar
-     * @stable ICU 2.6.
-     */
-    virtual int32_t getActualMinimum(UCalendarDateFields field, UErrorCode& status) const;
-
-    /**
-     * Return the maximum value that this field could have, given the current date.
-     * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
-     * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
-     * for some years the actual maximum for MONTH is 12, and for others 13.
-     *
-     * The version of this function on Calendar uses an iterative algorithm to determine the
-     * actual maximum value for the field.  There is almost always a more efficient way to
-     * accomplish this (in most cases, you can simply return getMaximum()).  GregorianCalendar
-     * overrides this function with a more efficient implementation.
-     *
-     * @param field    the field to determine the maximum of
-     * @param status   Fill-in parameter which receives the status of this operation.
-     * @return         the maximum of the given field for the current date of this Calendar
-     * @deprecated ICU 2.6. Use getActualMaximum(UCalendarDateFields field, UErrorCode& status) instead.
-     */
-    int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;
-
-    /**
-     * Return the maximum value that this field could have, given the current date.
-     * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
-     * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
-     * for some years the actual maximum for MONTH is 12, and for others 13.
-     *
-     * The version of this function on Calendar uses an iterative algorithm to determine the
-     * actual maximum value for the field.  There is almost always a more efficient way to
-     * accomplish this (in most cases, you can simply return getMaximum()).  GregorianCalendar
-     * overrides this function with a more efficient implementation.
-     *
-     * @param field    the field to determine the maximum of
-     * @param status   Fill-in parameter which receives the status of this operation.
-     * @return         the maximum of the given field for the current date of this Calendar
-     * @stable ICU 2.6.
-     */
-    virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
-
-    /**
-     * Gets the value for a given time field. Recalculate the current time field values
-     * if the time value has been changed by a call to setTime(). Return zero for unset
-     * fields if any fields have been explicitly set by a call to set(). To force a
-     * recomputation of all fields regardless of the previous state, call complete().
-     * This method is semantically const, but may alter the object in memory.
-     *
-     * @param field  The given time field.
-     * @param status Fill-in parameter which receives the status of the operation.
-     * @return       The value for the given time field, or zero if the field is unset,
-     *               and set() has been called for any other field.
-     * @deprecated ICU 2.6. Use get(UCalendarDateFields field, UErrorCode& status) instead.
-     */
-    int32_t get(EDateFields field, UErrorCode& status) const;
-
-    /**
-     * Gets the value for a given time field. Recalculate the current time field values
-     * if the time value has been changed by a call to setTime(). Return zero for unset
-     * fields if any fields have been explicitly set by a call to set(). To force a
-     * recomputation of all fields regardless of the previous state, call complete().
-     * This method is semantically const, but may alter the object in memory.
-     *
-     * @param field  The given time field.
-     * @param status Fill-in parameter which receives the status of the operation.
-     * @return       The value for the given time field, or zero if the field is unset,
-     *               and set() has been called for any other field.
-     * @stable ICU 2.6.
-     */
-    int32_t get(UCalendarDateFields field, UErrorCode& status) const;
-
-    /**
-     * Determines if the given time field has a value set. This can affect in the
-     * resolving of time in Calendar. Unset fields have a value of zero, by definition.
-     *
-     * @param field  The given time field.
-     * @return   True if the given time field has a value set; false otherwise.
-     * @deprecated ICU 2.6. Use isSet(UCalendarDateFields field) instead.
-     */
-    UBool isSet(EDateFields field) const;
-
-    /**
-     * Determines if the given time field has a value set. This can affect in the
-     * resolving of time in Calendar. Unset fields have a value of zero, by definition.
-     *
-     * @param field  The given time field.
-     * @return   True if the given time field has a value set; false otherwise.
-     * @stable ICU 2.6.
-     */
-    UBool isSet(UCalendarDateFields field) const;
-
-    /**
-     * Sets the given time field with the given value.
-     *
-     * @param field  The given time field.
-     * @param value  The value to be set for the given time field.
-     * @deprecated ICU 2.6. Use set(UCalendarDateFields field, int32_t value) instead.
-     */
-    void set(EDateFields field, int32_t value);
-
-    /**
-     * Sets the given time field with the given value.
-     *
-     * @param field  The given time field.
-     * @param value  The value to be set for the given time field.
-     * @stable ICU 2.6.
-     */
-    void set(UCalendarDateFields field, int32_t value);
-
-    /**
-     * Sets the values for the fields YEAR, MONTH, and DATE. Other field values are
-     * retained; call clear() first if this is not desired.
-     *
-     * @param year   The value used to set the YEAR time field.
-     * @param month  The value used to set the MONTH time field. Month value is 0-based.
-     *               e.g., 0 for January.
-     * @param date   The value used to set the DATE time field.
-     * @stable ICU 2.0
-     */
-    void set(int32_t year, int32_t month, int32_t date);
-
-    /**
-     * Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, and MINUTE. Other
-     * field values are retained; call clear() first if this is not desired.
-     *
-     * @param year    The value used to set the YEAR time field.
-     * @param month   The value used to set the MONTH time field. Month value is
-     *                0-based. E.g., 0 for January.
-     * @param date    The value used to set the DATE time field.
-     * @param hour    The value used to set the HOUR_OF_DAY time field.
-     * @param minute  The value used to set the MINUTE time field.
-     * @stable ICU 2.0
-     */
-    void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);
-
-    /**
-     * Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, MINUTE, and SECOND.
-     * Other field values are retained; call clear() first if this is not desired.
-     *
-     * @param year    The value used to set the YEAR time field.
-     * @param month   The value used to set the MONTH time field. Month value is
-     *                0-based. E.g., 0 for January.
-     * @param date    The value used to set the DATE time field.
-     * @param hour    The value used to set the HOUR_OF_DAY time field.
-     * @param minute  The value used to set the MINUTE time field.
-     * @param second  The value used to set the SECOND time field.
-     * @stable ICU 2.0
-     */
-    void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);
-
-    /**
-     * Clears the values of all the time fields, making them both unset and assigning
-     * them a value of zero. The field values will be determined during the next
-     * resolving of time into time fields.
-     * @stable ICU 2.0
-     */
-    void clear(void);
-
-    /**
-     * Clears the value in the given time field, both making it unset and assigning it a
-     * value of zero. This field value will be determined during the next resolving of
-     * time into time fields.
-     *
-     * @param field  The time field to be cleared.
-     * @deprecated ICU 2.6. Use clear(UCalendarDateFields field) instead.
-     */
-    void clear(EDateFields field);
-
-    /**
-     * Clears the value in the given time field, both making it unset and assigning it a
-     * value of zero. This field value will be determined during the next resolving of
-     * time into time fields.
-     *
-     * @param field  The time field to be cleared.
-     * @stable ICU 2.6.
-     */
-    void clear(UCalendarDateFields field);
-
-    /**
-     * 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.
-     * <P>
-     * Concrete subclasses of Calendar must implement getDynamicClassID() and also a
-     * static method and data member:
-     *
-     *      static UClassID getStaticClassID() { return (UClassID)&amp;fgClassID; }
-     *      static char fgClassID;
-     *
-     * @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;
-
-    /**
-     * Returns the resource key string used for this calendar type.
-     * For example, prepending "Eras_" to this string could return "Eras_japanese"
-     * or "Eras_gregorian".
-     *
-     * @returns static string, for example, "gregorian" or "japanese"
-     * @internal
-     */
-    virtual const char * getType() const = 0;
-
-    /**
-     * Returns whether the given day of the week is a weekday, a
-     * weekend day, or a day that transitions from one to the other,
-     * in this calendar system. If a transition occurs at midnight,
-     * then the days before and after the transition will have the
-     * type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time
-     * other than midnight, then the day of the transition will have
-     * the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the
-     * method getWeekendTransition() will return the point of
-     * transition.
-     * @param dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY).
-     * @param status The error code for the operation.
-     * @return The UCalendarWeekdayType for the day of the week.
-     * @stable ICU 4.4
-     */
-    virtual UCalendarWeekdayType getDayOfWeekType(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const;
-
-    /**
-     * Returns the time during the day at which the weekend begins or ends in
-     * this calendar system.  If getDayOfWeekType() rerturns UCAL_WEEKEND_ONSET
-     * for the specified dayOfWeek, return the time at which the weekend begins.
-     * If getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek,
-     * return the time at which the weekend ends. If getDayOfWeekType() returns
-     * some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition
-     * (U_ILLEGAL_ARGUMENT_ERROR).
-     * @param dayOfWeek The day of the week for which the weekend transition time is
-     * desired (UCAL_SUNDAY..UCAL_SATURDAY).
-     * @param status The error code for the operation.
-     * @return The milliseconds after midnight at which the weekend begins or ends.
-     * @stable ICU 4.4
-     */
-    virtual int32_t getWeekendTransition(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const;
-
-    /**
-     * Returns TRUE if the given UDate is in the weekend in
-     * this calendar system.
-     * @param date The UDate in question.
-     * @param status The error code for the operation.
-     * @return TRUE if the given UDate is in the weekend in
-     * this calendar system, FALSE otherwise.
-     * @stable ICU 4.4
-     */
-    virtual UBool isWeekend(UDate date, UErrorCode &status) const;
-
-    /**
-     * Returns TRUE if this Calendar's current date-time is in the weekend in
-     * this calendar system.
-     * @return TRUE if this Calendar's current date-time is in the weekend in
-     * this calendar system, FALSE otherwise.
-     * @stable ICU 4.4
-     */
-    virtual UBool isWeekend(void) const;
-
-protected:
-
-     /**
-      * Constructs a Calendar with the default time zone as returned by
-      * TimeZone::createInstance(), and the default locale.
-      *
-      * @param success  Indicates the status of Calendar object construction. Returns
-      *                 U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-      */
-    Calendar(UErrorCode& success);
-
-    /**
-     * Copy constructor
-     *
-     * @param source    Calendar object to be copied from
-     * @stable ICU 2.0
-     */
-    Calendar(const Calendar& source);
-
-    /**
-     * Default assignment operator
-     *
-     * @param right    Calendar object to be copied
-     * @stable ICU 2.0
-     */
-    Calendar& operator=(const Calendar& right);
-
-    /**
-     * Constructs a Calendar with the given time zone and locale. Clients are no longer
-     * responsible for deleting the given time zone object after it's adopted.
-     *
-     * @param zone     The given time zone.
-     * @param aLocale  The given locale.
-     * @param success  Indicates the status of Calendar object construction. Returns
-     *                 U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Constructs a Calendar with the given time zone and locale.
-     *
-     * @param zone     The given time zone.
-     * @param aLocale  The given locale.
-     * @param success  Indicates the status of Calendar object construction. Returns
-     *                 U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Converts Calendar's time field values to GMT as milliseconds.
-     *
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.0
-     */
-    virtual void computeTime(UErrorCode& status);
-
-    /**
-     * Converts GMT as milliseconds to time field values. This allows you to sync up the
-     * time field values with a new time that is set for the calendar.  This method
-     * does NOT recompute the time first; to recompute the time, then the fields, use
-     * the method complete().
-     *
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.0
-     */
-    virtual void computeFields(UErrorCode& status);
-
-    /**
-     * Gets this Calendar's current time as a long.
-     *
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @return the current time as UTC milliseconds from the epoch.
-     * @stable ICU 2.0
-     */
-    double getTimeInMillis(UErrorCode& status) const;
-
-    /**
-     * Sets this Calendar's current time from the given long value.
-     * @param millis  the new time in UTC milliseconds from the epoch.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.0
-     */
-    void setTimeInMillis( double millis, UErrorCode& status );
-
-    /**
-     * Recomputes the current time from currently set fields, and then fills in any
-     * unset fields in the time field list.
-     *
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     * @stable ICU 2.0
-     */
-    void complete(UErrorCode& status);
-
-    /**
-     * Gets the value for a given time field. Subclasses can use this function to get
-     * field values without forcing recomputation of time.
-     *
-     * @param field  The given time field.
-     * @return       The value for the given time field.
-     * @deprecated ICU 2.6. Use internalGet(UCalendarDateFields field) instead.
-     */
-    inline int32_t internalGet(EDateFields field) const {return fFields[field];}
-
-    /**
-     * Gets the value for a given time field. Subclasses can use this function to get
-     * field values without forcing recomputation of time. If the field's stamp is UNSET,
-     * the defaultValue is used.
-     *
-     * @param field  The given time field.
-     * @param defaultValue a default value used if the field is unset.
-     * @return       The value for the given time field.
-     * @internal
-     */
-    inline int32_t internalGet(UCalendarDateFields field, int32_t defaultValue) const {return fStamp[field]>kUnset ? fFields[field] : defaultValue;}
-
-    /**
-     * Gets the value for a given time field. Subclasses can use this function to get
-     * field values without forcing recomputation of time.
-     *
-     * @param field  The given time field.
-     * @return       The value for the given time field.
-     * @internal
-     */
-    inline int32_t internalGet(UCalendarDateFields field) const {return fFields[field];}
-
-    /**
-     * Sets the value for a given time field.  This is a fast internal method for
-     * subclasses.  It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet
-     * flags.
-     *
-     * @param field    The given time field.
-     * @param value    The value for the given time field.
-     * @deprecated ICU 2.6. Use internalSet(UCalendarDateFields field, int32_t value) instead.
-     */
-    void internalSet(EDateFields field, int32_t value);
-
-    /**
-     * Sets the value for a given time field.  This is a fast internal method for
-     * subclasses.  It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet
-     * flags.
-     *
-     * @param field    The given time field.
-     * @param value    The value for the given time field.
-     * @stable ICU 2.6.
-     */
-    inline void internalSet(UCalendarDateFields field, int32_t value);
-
-    /**
-     * Prepare this calendar for computing the actual minimum or maximum.
-     * This method modifies this calendar's fields; it is called on a
-     * temporary calendar.
-     * @internal
-     */
-    virtual void prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErrorCode &status);
-
-    /**
-     * Limit enums. Not in sync with UCalendarLimitType (refers to internal fields).
-     * @internal
-     */
-    enum ELimitType {
-      UCAL_LIMIT_MINIMUM = 0,
-      UCAL_LIMIT_GREATEST_MINIMUM,
-      UCAL_LIMIT_LEAST_MAXIMUM,
-      UCAL_LIMIT_MAXIMUM,
-      UCAL_LIMIT_COUNT
-    };
-
-    /**
-     * Subclass API for defining limits of different types.
-     * Subclasses must implement this method to return limits for the
-     * following fields:
-     *
-     * <pre>UCAL_ERA
-     * UCAL_YEAR
-     * UCAL_MONTH
-     * UCAL_WEEK_OF_YEAR
-     * UCAL_WEEK_OF_MONTH
-     * UCAL_DATE (DAY_OF_MONTH on Java)
-     * UCAL_DAY_OF_YEAR
-     * UCAL_DAY_OF_WEEK_IN_MONTH
-     * UCAL_YEAR_WOY
-     * UCAL_EXTENDED_YEAR</pre>
-     *
-     * @param field one of the above field numbers
-     * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,
-     * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
-     * @internal
-     */
-    virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const = 0;
-
-    /**
-     * Return a limit for a field.
-     * @param field the field, from <code>0..UCAL_MAX_FIELD</code>
-     * @param limitType the type specifier for the limit
-     * @see #ELimitType
-     * @internal
-     */
-    virtual int32_t getLimit(UCalendarDateFields field, ELimitType limitType) const;
-
-
-    /**
-     * Return the Julian day number of day before the first day of the
-     * given month in the given extended year.  Subclasses should override
-     * this method to implement their calendar system.
-     * @param eyear the extended year
-     * @param month the zero-based month, or 0 if useMonth is false
-     * @param useMonth if false, compute the day before the first day of
-     * the given year, otherwise, compute the day before the first day of
-     * the given month
-     * @return the Julian day number of the day before the first
-     * day of the given month and year
-     * @internal
-     */
-    virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
-                                                   UBool useMonth) const  = 0;
-
-    /**
-     * Return the number of days in the given month of the given extended
-     * year of this calendar system.  Subclasses should override this
-     * method if they can provide a more correct or more efficient
-     * implementation than the default implementation in Calendar.
-     * @internal
-     */
-    virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const ;
-
-    /**
-     * Return the number of days in the given extended year of this
-     * calendar system.  Subclasses should override this method if they can
-     * provide a more correct or more efficient implementation than the
-     * default implementation in Calendar.
-     * @stable ICU 2.0
-     */
-    virtual int32_t handleGetYearLength(int32_t eyear) const;
-
-
-    /**
-     * Return the extended year defined by the current fields.  This will
-     * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such
-     * as UCAL_ERA) specific to the calendar system, depending on which set of
-     * fields is newer.
-     * @return the extended year
-     * @internal
-     */
-    virtual int32_t handleGetExtendedYear() = 0;
-
-    /**
-     * Subclasses may override this.  This method calls
-     * handleGetMonthLength() to obtain the calendar-specific month
-     * length.
-     * @param bestField which field to use to calculate the date
-     * @return julian day specified by calendar fields.
-     * @internal
-     */
-    virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField);
-
-    /**
-     * Subclasses must override this to convert from week fields
-     * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case
-     * where YEAR, EXTENDED_YEAR are not set.
-     * The Calendar implementation assumes yearWoy is in extended gregorian form
-     * @internal
-     * @return the extended year, UCAL_EXTENDED_YEAR
-     */
-    virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
-
-    /**
-     * Compute the Julian day from fields.  Will determine whether to use
-     * the JULIAN_DAY field directly, or other fields.
-     * @return the julian day
-     * @internal
-     */
-    int32_t computeJulianDay();
-
-    /**
-     * Compute the milliseconds in the day from the fields.  This is a
-     * value from 0 to 23:59:59.999 inclusive, unless fields are out of
-     * range, in which case it can be an arbitrary value.  This value
-     * reflects local zone wall time.
-     * @internal
-     */
-    int32_t computeMillisInDay();
-
-    /**
-     * This method can assume EXTENDED_YEAR has been set.
-     * @param millis milliseconds of the date fields
-     * @param millisInDay milliseconds of the time fields; may be out
-     * or range.
-     * @param ec Output param set to failure code on function return
-     *          when this function fails.
-     * @internal
-     */
-    int32_t computeZoneOffset(double millis, int32_t millisInDay, UErrorCode &ec);
-
-
-    /**
-     * Determine the best stamp in a range.
-     * @param start first enum to look at
-     * @param end last enum to look at
-     * @param bestSoFar stamp prior to function call
-     * @return the stamp value of the best stamp
-     * @internal
-     */
-    int32_t newestStamp(UCalendarDateFields start, UCalendarDateFields end, int32_t bestSoFar) const;
-
-    /**
-     * Values for field resolution tables
-     * @see #resolveFields
-     * @internal
-     */
-    enum {
-      /** Marker for end of resolve set (row or group). */
-      kResolveSTOP = -1,
-      /** Value to be bitwised "ORed" against resolve table field values for remapping.  Example: (UCAL_DATE | kResolveRemap) in 1st column will cause 'UCAL_DATE' to be returned, but will not examine the value of UCAL_DATE.  */
-      kResolveRemap = 32
-    };
-
-    /**
-     * Precedence table for Dates
-     * @see #resolveFields
-     * @internal
-     */
-    static const UFieldResolutionTable kDatePrecedence[];
-
-    /**
-     * Precedence table for Year
-     * @see #resolveFields
-     * @internal
-     */
-    static const UFieldResolutionTable kYearPrecedence[];
-
-    /**
-     * Precedence table for Day of Week
-     * @see #resolveFields
-     * @internal
-     */
-    static const UFieldResolutionTable kDOWPrecedence[];
-
-    /**
-     * Given a precedence table, return the newest field combination in
-     * the table, or UCAL_FIELD_COUNT if none is found.
-     *
-     * <p>The precedence table is a 3-dimensional array of integers.  It
-     * may be thought of as an array of groups.  Each group is an array of
-     * lines.  Each line is an array of field numbers.  Within a line, if
-     * all fields are set, then the time stamp of the line is taken to be
-     * the stamp of the most recently set field.  If any field of a line is
-     * unset, then the line fails to match.  Within a group, the line with
-     * the newest time stamp is selected.  The first field of the line is
-     * returned to indicate which line matched.
-     *
-     * <p>In some cases, it may be desirable to map a line to field that
-     * whose stamp is NOT examined.  For example, if the best field is
-     * DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used.  In
-     * order to do this, insert the value <code>kResolveRemap | F</code> at
-     * the start of the line, where <code>F</code> is the desired return
-     * field value.  This field will NOT be examined; it only determines
-     * the return value if the other fields in the line are the newest.
-     *
-     * <p>If all lines of a group contain at least one unset field, then no
-     * line will match, and the group as a whole will fail to match.  In
-     * that case, the next group will be processed.  If all groups fail to
-     * match, then UCAL_FIELD_COUNT is returned.
-     * @internal
-     */
-    UCalendarDateFields resolveFields(const UFieldResolutionTable *precedenceTable);
-
-
-    /**
-     * @internal
-     */
-    virtual const UFieldResolutionTable* getFieldResolutionTable() const;
-
-    /**
-     * Return the field that is newer, either defaultField, or
-     * alternateField.  If neither is newer or neither is set, return defaultField.
-     * @internal
-     */
-    UCalendarDateFields newerField(UCalendarDateFields defaultField, UCalendarDateFields alternateField) const;
-
-
-private:
-    /**
-     * Helper function for calculating limits by trial and error
-     * @param field The field being investigated
-     * @param startValue starting (least max) value of field
-     * @param endValue ending (greatest max) value of field
-     * @param status return type
-     * @internal
-     */
-    int32_t getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t endValue, UErrorCode &status) const;
-
-
-protected:
-    /**
-     * The flag which indicates if the current time is set in the calendar.
-     * @stable ICU 2.0
-     */
-    UBool      fIsTimeSet;
-
-    /**
-     * True if the fields are in sync with the currently set time of this Calendar.
-     * If false, then the next attempt to get the value of a field will
-     * force a recomputation of all fields from the current value of the time
-     * field.
-     * <P>
-     * This should really be named areFieldsInSync, but the old name is retained
-     * for backward compatibility.
-     * @stable ICU 2.0
-     */
-    UBool      fAreFieldsSet;
-
-    /**
-     * True if all of the fields have been set.  This is initially false, and set to
-     * true by computeFields().
-     * @stable ICU 2.0
-     */
-    UBool      fAreAllFieldsSet;
-
-    /**
-     * True if all fields have been virtually set, but have not yet been
-     * computed.  This occurs only in setTimeInMillis().  A calendar set
-     * to this state will compute all fields from the time if it becomes
-     * necessary, but otherwise will delay such computation.
-     * @stable ICU 3.0
-     */
-    UBool fAreFieldsVirtuallySet;
-
-    /**
-     * Get the current time without recomputing.
-     *
-     * @return     the current time without recomputing.
-     * @stable ICU 2.0
-     */
-    UDate        internalGetTime(void) const     { return fTime; }
-
-    /**
-     * Set the current time without affecting flags or fields.
-     *
-     * @param time    The time to be set
-     * @return        the current time without recomputing.
-     * @stable ICU 2.0
-     */
-    void        internalSetTime(UDate time)     { fTime = time; }
-
-    /**
-     * The time fields containing values into which the millis is computed.
-     * @stable ICU 2.0
-     */
-    int32_t     fFields[UCAL_FIELD_COUNT];
-
-    /**
-     * The flags which tell if a specified time field for the calendar is set.
-     * @deprecated ICU 2.8 use (fStamp[n]!=kUnset)
-     */
-    UBool      fIsSet[UCAL_FIELD_COUNT];
-
-    /** Special values of stamp[]
-     * @stable ICU 2.0
-     */
-    enum {
-        kUnset                 = 0,
-        kInternallySet,
-        kMinimumUserStamp
-    };
-
-    /**
-     * Pseudo-time-stamps which specify when each field was set. There
-     * are two special values, UNSET and INTERNALLY_SET. Values from
-     * MINIMUM_USER_SET to Integer.MAX_VALUE are legal user set values.
-     * @stable ICU 2.0
-     */
-    int32_t        fStamp[UCAL_FIELD_COUNT];
-
-    /**
-     * Subclasses may override this method to compute several fields
-     * specific to each calendar system.  These are:
-     *
-     * <ul><li>ERA
-     * <li>YEAR
-     * <li>MONTH
-     * <li>DAY_OF_MONTH
-     * <li>DAY_OF_YEAR
-     * <li>EXTENDED_YEAR</ul>
-     *
-     * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which
-     * will be set when this method is called.  Subclasses can also call
-     * the getGregorianXxx() methods to obtain Gregorian calendar
-     * equivalents for the given Julian day.
-     *
-     * <p>In addition, subclasses should compute any subclass-specific
-     * fields, that is, fields from BASE_FIELD_COUNT to
-     * getFieldCount() - 1.
-     *
-     * <p>The default implementation in <code>Calendar</code> implements
-     * a pure proleptic Gregorian calendar.
-     * @internal
-     */
-    virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
-
-    /**
-     * Return the extended year on the Gregorian calendar as computed by
-     * <code>computeGregorianFields()</code>.
-     * @internal
-     */
-    int32_t getGregorianYear() const {
-        return fGregorianYear;
-    }
-
-    /**
-     * Return the month (0-based) on the Gregorian calendar as computed by
-     * <code>computeGregorianFields()</code>.
-     * @internal
-     */
-    int32_t getGregorianMonth() const {
-        return fGregorianMonth;
-    }
-
-    /**
-     * Return the day of year (1-based) on the Gregorian calendar as
-     * computed by <code>computeGregorianFields()</code>.
-     * @internal
-     */
-    int32_t getGregorianDayOfYear() const {
-        return fGregorianDayOfYear;
-    }
-
-    /**
-     * Return the day of month (1-based) on the Gregorian calendar as
-     * computed by <code>computeGregorianFields()</code>.
-     * @internal
-     */
-    int32_t getGregorianDayOfMonth() const {
-      return fGregorianDayOfMonth;
-    }
-
-    /**
-     * Called by computeJulianDay.  Returns the default month (0-based) for the year,
-     * taking year and era into account.  Defaults to 0 for Gregorian, which doesn't care.
-     * @param eyear The extended year
-     * @internal
-     */
-    virtual int32_t getDefaultMonthInYear(int32_t eyear) ;
-
-
-    /**
-     * Called by computeJulianDay.  Returns the default day (1-based) for the month,
-     * taking currently-set year and era into account.  Defaults to 1 for Gregorian.
-     * @param eyear the extended year
-     * @param month the month in the year
-     * @internal
-     */
-    virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month);
-
-    //-------------------------------------------------------------------------
-    // Protected utility methods for use by subclasses.  These are very handy
-    // for implementing add, roll, and computeFields.
-    //-------------------------------------------------------------------------
-
-    /**
-     * Adjust the specified field so that it is within
-     * the allowable range for the date to which this calendar is set.
-     * For example, in a Gregorian calendar pinning the {@link #UCalendarDateFields DAY_OF_MONTH}
-     * field for a calendar set to April 31 would cause it to be set
-     * to April 30.
-     * <p>
-     * <b>Subclassing:</b>
-     * <br>
-     * This utility method is intended for use by subclasses that need to implement
-     * their own overrides of {@link #roll roll} and {@link #add add}.
-     * <p>
-     * <b>Note:</b>
-     * <code>pinField</code> is implemented in terms of
-     * {@link #getActualMinimum getActualMinimum}
-     * and {@link #getActualMaximum getActualMaximum}.  If either of those methods uses
-     * a slow, iterative algorithm for a particular field, it would be
-     * unwise to attempt to call <code>pinField</code> for that field.  If you
-     * really do need to do so, you should override this method to do
-     * something more efficient for that field.
-     * <p>
-     * @param field The calendar field whose value should be pinned.
-     * @param status Output param set to failure code on function return
-     *          when this function fails.
-     *
-     * @see #getActualMinimum
-     * @see #getActualMaximum
-     * @stable ICU 2.0
-     */
-    virtual void pinField(UCalendarDateFields field, UErrorCode& status);
-
-    /**
-     * Return the week number of a day, within a period. This may be the week number in
-     * a year or the week number in a month. Usually this will be a value >= 1, but if
-     * some initial days of the period are excluded from week 1, because
-     * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1, then
-     * the week number will be zero for those
-     * initial days. This method requires the day number and day of week for some
-     * known date in the period in order to determine the day of week
-     * on the desired day.
-     * <p>
-     * <b>Subclassing:</b>
-     * <br>
-     * This method is intended for use by subclasses in implementing their
-     * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
-     * It is often useful in {@link #getActualMinimum getActualMinimum} and
-     * {@link #getActualMaximum getActualMaximum} as well.
-     * <p>
-     * This variant is handy for computing the week number of some other
-     * day of a period (often the first or last day of the period) when its day
-     * of the week is not known but the day number and day of week for some other
-     * day in the period (e.g. the current date) <em>is</em> known.
-     * <p>
-     * @param desiredDay    The {@link #UCalendarDateFields DAY_OF_YEAR} or
-     *              {@link #UCalendarDateFields DAY_OF_MONTH} whose week number is desired.
-     *              Should be 1 for the first day of the period.
-     *
-     * @param dayOfPeriod   The {@link #UCalendarDateFields DAY_OF_YEAR}
-     *              or {@link #UCalendarDateFields DAY_OF_MONTH} for a day in the period whose
-     *              {@link #UCalendarDateFields DAY_OF_WEEK} is specified by the
-     *              <code>knownDayOfWeek</code> parameter.
-     *              Should be 1 for first day of period.
-     *
-     * @param dayOfWeek  The {@link #UCalendarDateFields DAY_OF_WEEK} for the day
-     *              corresponding to the <code>knownDayOfPeriod</code> parameter.
-     *              1-based with 1=Sunday.
-     *
-     * @return      The week number (one-based), or zero if the day falls before
-     *              the first week because
-     *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
-     *              is more than one.
-     *
-     * @stable ICU 2.8
-     */
-    int32_t weekNumber(int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek);
-
-
-    /**
-     * Return the week number of a day, within a period. This may be the week number in
-     * a year, or the week number in a month. Usually this will be a value >= 1, but if
-     * some initial days of the period are excluded from week 1, because
-     * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1,
-     * then the week number will be zero for those
-     * initial days. This method requires the day of week for the given date in order to
-     * determine the result.
-     * <p>
-     * <b>Subclassing:</b>
-     * <br>
-     * This method is intended for use by subclasses in implementing their
-     * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
-     * It is often useful in {@link #getActualMinimum getActualMinimum} and
-     * {@link #getActualMaximum getActualMaximum} as well.
-     * <p>
-     * @param dayOfPeriod   The {@link #UCalendarDateFields DAY_OF_YEAR} or
-     *                      {@link #UCalendarDateFields DAY_OF_MONTH} whose week number is desired.
-     *                      Should be 1 for the first day of the period.
-     *
-     * @param dayOfWeek     The {@link #UCalendarDateFields DAY_OF_WEEK} for the day
-     *                      corresponding to the <code>dayOfPeriod</code> parameter.
-     *                      1-based with 1=Sunday.
-     *
-     * @return      The week number (one-based), or zero if the day falls before
-     *              the first week because
-     *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
-     *              is more than one.
-     * @internal
-     */
-    inline int32_t weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek);
-
-    /**
-     * returns the local DOW, valid range 0..6
-     * @internal
-     */
-    int32_t getLocalDOW();
-
-private:
-
-    /**
-     * The next available value for fStamp[]
-     */
-    int32_t fNextStamp;// = MINIMUM_USER_STAMP;
-
-    /**
-     * The current time set for the calendar.
-     */
-    UDate        fTime;
-
-    /**
-     * @see   #setLenient
-     */
-    UBool      fLenient;
-
-    /**
-     * Time zone affects the time calculation done by Calendar. Calendar subclasses use
-     * the time zone data to produce the local time.
-     */
-    TimeZone*   fZone;
-
-    /**
-     * Both firstDayOfWeek and minimalDaysInFirstWeek are locale-dependent. They are
-     * used to figure out the week count for a specific date for a given locale. These
-     * must be set when a Calendar is constructed. For example, in US locale,
-     * firstDayOfWeek is SUNDAY; minimalDaysInFirstWeek is 1. They are used to figure
-     * out the week count for a specific date for a given locale. These must be set when
-     * a Calendar is constructed.
-     */
-    UCalendarDaysOfWeek fFirstDayOfWeek;
-    uint8_t     fMinimalDaysInFirstWeek;
-    UCalendarDaysOfWeek fWeekendOnset;
-    int32_t fWeekendOnsetMillis;
-    UCalendarDaysOfWeek fWeekendCease;
-    int32_t fWeekendCeaseMillis;
-
-    /**
-     * Sets firstDayOfWeek and minimalDaysInFirstWeek. Called at Calendar construction
-     * time.
-     *
-     * @param desiredLocale  The given locale.
-     * @param type           The calendar type identifier, e.g: gregorian, buddhist, etc.
-     * @param success        Indicates the status of setting the week count data from
-     *                       the resource for the given locale. Returns U_ZERO_ERROR if
-     *                       constructed successfully.
-     */
-    void        setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& success);
-
-    /**
-     * Recompute the time and update the status fields isTimeSet
-     * and areFieldsSet.  Callers should check isTimeSet and only
-     * call this method if isTimeSet is false.
-     *
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid or restricted by
-     *                leniency, this will be set to an error status.
-     */
-    void updateTime(UErrorCode& status);
-
-    /**
-     * The Gregorian year, as computed by computeGregorianFields() and
-     * returned by getGregorianYear().
-     * @see #computeGregorianFields
-     */
-    int32_t fGregorianYear;
-
-    /**
-     * The Gregorian month, as computed by computeGregorianFields() and
-     * returned by getGregorianMonth().
-     * @see #computeGregorianFields
-     */
-    int32_t fGregorianMonth;
-
-    /**
-     * The Gregorian day of the year, as computed by
-     * computeGregorianFields() and returned by getGregorianDayOfYear().
-     * @see #computeGregorianFields
-     */
-    int32_t fGregorianDayOfYear;
-
-    /**
-     * The Gregorian day of the month, as computed by
-     * computeGregorianFields() and returned by getGregorianDayOfMonth().
-     * @see #computeGregorianFields
-     */
-    int32_t fGregorianDayOfMonth;
-
-    /* calculations */
-
-    /**
-     * Compute the Gregorian calendar year, month, and day of month from
-     * the given Julian day.  These values are not stored in fields, but in
-     * member variables gregorianXxx.  Also compute the DAY_OF_WEEK and
-     * DOW_LOCAL fields.
-     */
-    void computeGregorianAndDOWFields(int32_t julianDay, UErrorCode &ec);
-
-protected:
-
-    /**
-     * Compute the Gregorian calendar year, month, and day of month from the
-     * Julian day.  These values are not stored in fields, but in member
-     * variables gregorianXxx.  They are used for time zone computations and by
-     * subclasses that are Gregorian derivatives.  Subclasses may call this
-     * method to perform a Gregorian calendar millis->fields computation.
-     */
-    void computeGregorianFields(int32_t julianDay, UErrorCode &ec);
-
-private:
-
-    /**
-     * Compute the fields WEEK_OF_YEAR, YEAR_WOY, WEEK_OF_MONTH,
-     * DAY_OF_WEEK_IN_MONTH, and DOW_LOCAL from EXTENDED_YEAR, YEAR,
-     * DAY_OF_WEEK, and DAY_OF_YEAR.  The latter fields are computed by the
-     * subclass based on the calendar system.
-     *
-     * <p>The YEAR_WOY field is computed simplistically.  It is equal to YEAR
-     * most of the time, but at the year boundary it may be adjusted to YEAR-1
-     * or YEAR+1 to reflect the overlap of a week into an adjacent year.  In
-     * this case, a simple increment or decrement is performed on YEAR, even
-     * though this may yield an invalid YEAR value.  For instance, if the YEAR
-     * is part of a calendar system with an N-year cycle field CYCLE, then
-     * incrementing the YEAR may involve incrementing CYCLE and setting YEAR
-     * back to 0 or 1.  This is not handled by this code, and in fact cannot be
-     * simply handled without having subclasses define an entire parallel set of
-     * fields for fields larger than or equal to a year.  This additional
-     * complexity is not warranted, since the intention of the YEAR_WOY field is
-     * to support ISO 8601 notation, so it will typically be used with a
-     * proleptic Gregorian calendar, which has no field larger than a year.
-     */
-    void computeWeekFields(UErrorCode &ec);
-
-
-    /**
-     * Ensure that each field is within its valid range by calling {@link
-     * #validateField(int, int&)} on each field that has been set.  This method
-     * should only be called if this calendar is not lenient.
-     * @see #isLenient
-     * @see #validateField(int, int&)
-     * @internal
-     */
-    void validateFields(UErrorCode &status);
-
-    /**
-     * Validate a single field of this calendar.  Subclasses should
-     * override this method to validate any calendar-specific fields.
-     * Generic fields can be handled by
-     * <code>Calendar.validateField()</code>.
-     * @see #validateField(int, int, int, int&)
-     * @internal
-     */
-    virtual void validateField(UCalendarDateFields field, UErrorCode &status);
-
-    /**
-     * Validate a single field of this calendar given its minimum and
-     * maximum allowed value.  If the field is out of range,
-     * <code>U_ILLEGAL_ARGUMENT_ERROR</code> will be set.  Subclasses may
-     * use this method in their implementation of {@link
-     * #validateField(int, int&)}.
-     * @internal
-     */
-    void validateField(UCalendarDateFields field, int32_t min, int32_t max, UErrorCode& status);
-
- protected:
-    /**
-     * Convert a quasi Julian date to the day of the week. The Julian date used here is
-     * not a true Julian date, since it is measured from midnight, not noon. Return
-     * value is one-based.
-     *
-     * @param julian  The given Julian date number.
-     * @return   Day number from 1..7 (SUN..SAT).
-     * @internal
-     */
-    static uint8_t julianDayToDayOfWeek(double julian);
-
- private:
-    char validLocale[ULOC_FULLNAME_CAPACITY];
-    char actualLocale[ULOC_FULLNAME_CAPACITY];
-
- public:
-#if !UCONFIG_NO_SERVICE
-    /**
-     * INTERNAL FOR 2.6 --  Registration.
-     */
-
-    /**
-     * 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
-     * @internal
-     */
-    static StringEnumeration* getAvailableLocales(void);
-
-    /**
-     * Register a new Calendar factory.  The factory will be adopted.
-     * INTERNAL in 2.6
-     * @param toAdopt the factory 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 factory
-     * @internal
-     */
-    static URegistryKey registerFactory(ICUServiceFactory* toAdopt, UErrorCode& status);
-
-    /**
-     * Unregister a previously-registered CalendarFactory using the key returned from the
-     * register call.  Key becomes invalid after a successful call and should not be used again.
-     * The CalendarFactory corresponding to the key will be deleted.
-     * INTERNAL in 2.6
-     * @param key the registry key returned by a previous call to registerFactory
-     * @param status the in/out status code, no special meanings are assigned
-     * @return TRUE if the factory for the key was successfully unregistered
-     * @internal
-     */
-    static UBool unregister(URegistryKey key, UErrorCode& status);
-
-    /**
-     * Multiple Calendar Implementation
-     * @internal
-     */
-    friend class CalendarFactory;
-
-    /**
-     * Multiple Calendar Implementation
-     * @internal
-     */
-    friend class CalendarService;
-
-    /**
-     * Multiple Calendar Implementation
-     * @internal
-     */
-    friend class DefaultCalendarFactory;
-#endif /* !UCONFIG_NO_SERVICE */
-
-    /**
-     * @internal
-     * @return TRUE if this calendar has a default century (i.e. 03 -> 2003)
-     */
-    virtual UBool haveDefaultCentury() const = 0;
-
-    /**
-     * @internal
-     * @return the start of the default century, as a UDate
-     */
-    virtual UDate defaultCenturyStart() const = 0;
-    /**
-     * @internal
-     * @return the beginning year of the default century, as a year
-     */
-    virtual int32_t defaultCenturyStartYear() const = 0;
-
-    /** Get the locale for this calendar 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
-     *  @stable ICU 2.8
-     */
-    Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const;
-
-    /** Get the locale for this calendar 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;
-
-};
-
-// -------------------------------------
-
-inline Calendar*
-Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)
-{
-    // since the Locale isn't specified, use the default locale
-    return createInstance(zone, Locale::getDefault(), errorCode);
-}
-
-// -------------------------------------
-
-inline void
-Calendar::roll(UCalendarDateFields field, UBool up, UErrorCode& status)
-{
-    roll(field, (int32_t)(up ? +1 : -1), status);
-}
-
-inline void
-Calendar::roll(EDateFields field, UBool up, UErrorCode& status)
-{
-    roll((UCalendarDateFields) field, up, status);
-}
-
-
-// -------------------------------------
-
-/**
- * Fast method for subclasses.  The caller must maintain fUserSetDSTOffset and
- * fUserSetZoneOffset, as well as the isSet[] array.
- */
-
-inline void
-Calendar::internalSet(UCalendarDateFields field, int32_t value)
-{
-    fFields[field] = value;
-    fStamp[field] = kInternallySet;
-    fIsSet[field]     = TRUE; // Remove later
-}
-
-inline int32_t  Calendar::weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek)
-{
-  return weekNumber(dayOfPeriod, dayOfPeriod, dayOfWeek);
-}
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _CALENDAR
diff --git a/source/i18n/unicode/choicfmt.h b/source/i18n/unicode/choicfmt.h
deleted file mode 100644
index 921b0a9..0000000
--- a/source/i18n/unicode/choicfmt.h
+++ /dev/null
@@ -1,749 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File CHOICFMT.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*   03/20/97    helena      Finished first cut of implementation and got rid
-*                           of nextDouble/previousDouble and replaced with
-*                           boolean array.
-*   4/10/97     aliu        Clean up.  Modified to work on AIX.
-*   8/6/97      nos         Removed overloaded constructor, member var 'buffer'.
-*   07/22/98    stephen     Removed operator!= (implemented in Format)
-********************************************************************************
-*/
-
-#ifndef CHOICFMT_H
-#define CHOICFMT_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Choice Format.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/unistr.h"
-#include "unicode/numfmt.h"
-#include "unicode/fieldpos.h"
-#include "unicode/format.h"
-
-U_NAMESPACE_BEGIN
-
-class MessageFormat;
-
-/**
- * ChoiceFormat converts between ranges of numeric values
- * and string names for those ranges. A <code>ChoiceFormat</code> splits
- * the real number line <code>-Inf</code> to <code>+Inf</code> into two
- * or more contiguous ranges. Each range is mapped to a
- * string. <code>ChoiceFormat</code> is generally used in a
- * <code>MessageFormat</code> for displaying grammatically correct
- * plurals such as &quot;There are 2 files.&quot;</p>
- *
- * <p>There are two methods of defining a <code>ChoiceFormat</code>; both
- * are equivalent.  The first is by using a string pattern. This is the
- * preferred method in most cases.  The second method is through direct
- * specification of the arrays that make up the
- * <code>ChoiceFormat</code>.</p>
- *
- * <p><strong>Patterns</strong></p>
- *
- * <p>In most cases, the preferred way to define a
- * <code>ChoiceFormat</code> is with a pattern. Here is an example of a
- * <code>ChoiceFormat</code> pattern:</p>
- *
- * \htmlonly<pre>    0&#x2264;are no files|1&#x2264;is one file|1&lt;are many files</pre>\endhtmlonly
- *
- * <p>or equivalently,</p>
- *
- * \htmlonly<pre>    0#are no files|1#is one file|1&lt;are many files</pre>\endhtmlonly
- *
- * <p>The pattern consists of a number or <em>range specifiers</em>
- * separated by vertical bars '|' (U+007C). There is no
- * vertical bar after the last range.  Each range specifier is of the
- * form:</p>
- *
- * \htmlonly<blockquote><em>Number Separator String</em></blockquote>\endhtmlonly
- *
- * <p><em>Number</em> is a floating point number that can be parsed by a
- * default <code>NumberFormat</code> for the US locale. It gives the
- * lower limit of this range. The lower limit is either inclusive or
- * exclusive, depending on the <em>separator</em>. The upper limit is
- * given by the lower limit of the next range.  The Unicode infinity
- * sign \htmlonly&#x221E \endhtmlonly (U+221E) is recognized for positive infinity. It may be preceded by
- * '-' (U+002D) to indicate negative infinity.</p>
- *
- * <p><em>String</em> is the format string for this range, with special
- * characters enclosed in single quotes (<code>'The #
- * sign'</code>). Single quotes themselves are indicated by two single
- * quotes in a row (<code>'o''clock'</code>).</p>
- *
- * <p><em>Separator</em> is one of the following single characters:
- *
- * <ul>
- *   <li>\htmlonly'&#x2264;' \endhtmlonly (U+2264) or '#' (U+0023)
- *   indicates that the lower limit given by <em>Number</em> is
- *   inclusive.  (The two characters are equivalent to ChoiceFormat.)
- *   This means that the limit value <em>Number</em> belongs to this
- *   range.  Another way of saying this is that the corresponding
- *   closure is <code>FALSE</code>.</li>
- *
- *   <li>'<' (U+003C) indicates that the lower limit given by
- *   <em>Number</em> is exclusive.  This means that the value
- *   <em>Number</em> belongs to the prior range.</li> Another way of
- *   saying this is that the corresponding closure is
- *   <code>TRUE</code>.
- * </ul>
- *
- * <p>See below for more information about closures.</p>
- *
- * <p><strong>Arrays</strong></p>
- *
- * <p>A <code>ChoiceFormat</code> defining <code>n</code> intervals
- * (<code>n</code> &gt;= 2) is specified by three arrays of
- * <code>n</code> items:
- *
- * <ul>
- *   <li><code>double limits[]</code> gives the start of each
- *     interval. This must be a non-decreasing list of values, none of
- *     which may be <code>NaN</code>.</li>
- *   <li><code>UBool closures[]</code> determines whether each limit
- *     value is contained in the interval below it or in the interval
- *     above it. If <code>closures[i]</code> is <code>FALSE</code>, then
- *     <code>limits[i]</code> is a member of interval
- *     <code>i</code>. Otherwise it is a member of interval
- *     <code>i+1</code>. If no closures array is specified, this is
- *     equivalent to having all closures be <code>FALSE</code>. Closures
- *     allow one to specify half-open, open, or closed intervals.</li>
- *   <li><code>UnicodeString formats[]</code> gives the string label
- *     associated with each interval.</li>
- * </ul>
- *
- * <p><strong>Formatting and Parsing</strong></p>
- *
- * <p>During formatting, a number is converted to a
- * string. <code>ChoiceFormat</code> accomplishes this by mapping the
- * number to an interval using the following rule. Given a number
- * <code>X</code> and and index value <code>j</code> in the range
- * <code>0..n-1</code>, where <code>n</code> is the number of ranges:</p>
- *
- * \htmlonly<blockquote>\endhtmlonly<code>X</code> matches <code>j</code> if and only if
- * <code>limit[j] &lt;= X &lt; limit[j+1]</code>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * <p>(This assumes that all closures are <code>FALSE</code>.  If some
- * closures are <code>TRUE</code> then the relations must be changed to
- * <code>&lt;=</code> or <code>&lt;</code> as appropriate.) If there is
- * no match, then either the first or last index is used, depending on
- * whether the number is too low or too high. Once a number is mapped to
- * an interval <code>j</code>, the string <code>formats[j]</code> is
- * output.</p>
- *
- * <p>During parsing, a string is converted to a
- * number. <code>ChoiceFormat</code> finds the element
- * <code>formats[j]</code> equal to the string, and returns
- * <code>limits[j]</code> as the parsed value.</p>
- *
- * <p><strong>Notes</strong></p>
- *
- * <p>The first limit value does not define a range boundary. For
- * example, in the pattern \htmlonly&quot;<code>1.0#a|2.0#b</code>&quot;\endhtmlonly, the
- * intervals are [-Inf, 2.0) and [2.0, +Inf].  It appears that the first
- * interval should be [1.0, 2.0).  However, since all values that are too
- * small are mapped to range zero, the first interval is effectively
- * [-Inf, 2.0).  However, the first limit value <em>is</em> used during
- * formatting. In this example, <code>parse(&quot;a&quot;)</code> returns
- * 1.0.</p>
- *
- * <p>There are no gaps between intervals and the entire number line is
- * covered.  A <code>ChoiceFormat</code> maps <em>all</em> possible
- * double values to a finite set of intervals.</p>
- *
- * <p>The non-number <code>NaN</code> is mapped to interval zero during
- * formatting.</p>
- *
- * <p><strong>Examples</strong></p>
- *
- * <p>Here is an example of two arrays that map the number
- * <code>1..7</code> to the English day of the week abbreviations
- * <code>Sun..Sat</code>. No closures array is given; this is the same as
- * specifying all closures to be <code>FALSE</code>.</p>
- *
- * <pre>    {1,2,3,4,5,6,7},
- *     {&quot;Sun&quot;,&quot;Mon&quot;,&quot;Tue&quot;,&quot;Wed&quot;,&quot;Thur&quot;,&quot;Fri&quot;,&quot;Sat&quot;}</pre>
- *
- * <p>Here is an example that maps the ranges [-Inf, 1), [1, 1], and (1,
- * +Inf] to three strings. That is, the number line is split into three
- * ranges: x &lt; 1.0, x = 1.0, and x &gt; 1.0.</p>
- *
- * <pre>    {0, 1, 1},
- *     {FALSE, FALSE, TRUE},
- *     {&quot;no files&quot;, &quot;one file&quot;, &quot;many files&quot;}</pre>
- *
- * <p>Here is a simple example that shows formatting and parsing: </p>
- *
- * \code
- *   #include <unicode/choicfmt.h>
- *   #include <unicode/unistr.h>
- *   #include <iostream.h>
- *
- *   int main(int argc, char *argv[]) {
- *       double limits[] = {1,2,3,4,5,6,7};
- *       UnicodeString monthNames[] = {
- *           "Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
- *       ChoiceFormat fmt(limits, monthNames, 7);
- *       UnicodeString str;
- *       char buf[256];
- *       for (double x = 1.0; x <= 8.0; x += 1.0) {
- *           fmt.format(x, str);
- *           str.extract(0, str.length(), buf, 256, "");
- *           str.truncate(0);
- *           cout << x << " -> "
- *                << buf << endl;
- *       }
- *       cout << endl;
- *       return 0;
- *   }
- * \endcode
- *
- * <p>Here is a more complex example using a <code>ChoiceFormat</code>
- * constructed from a pattern together with a
- * <code>MessageFormat</code>.</p>
- *
- * \code
- *   #include <unicode/choicfmt.h>
- *   #include <unicode/msgfmt.h>
- *   #include <unicode/unistr.h>
- *   #include <iostream.h>
- *
- *   int main(int argc, char *argv[]) {
- *       UErrorCode status = U_ZERO_ERROR;
- *       double filelimits[] = {0,1,2};
- *       UnicodeString filepart[] =
- *           {"are no files","is one file","are {0} files"};
- *       ChoiceFormat* fileform = new ChoiceFormat(filelimits, filepart, 3 );
- *       Format* testFormats[] =
- *           {fileform, NULL, NumberFormat::createInstance(status)};
- *       MessageFormat pattform("There {0} on {1}", status );
- *       pattform.adoptFormats(testFormats, 3);
- *       Formattable testArgs[] = {0L, "Disk A"};
- *       FieldPosition fp(0);
- *       UnicodeString str;
- *       char buf[256];
- *       for (int32_t i = 0; i < 4; ++i) {
- *           Formattable fInt(i);
- *           testArgs[0] = fInt;
- *           pattform.format(testArgs, 2, str, fp, status );
- *           str.extract(0, str.length(), buf, "");
- *           str.truncate(0);
- *           cout << "Output for i=" << i << " : " << buf << endl;
- *       }
- *       cout << endl;
- *       return 0;
- *   }
- * \endcode
- *
- * <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 ChoiceFormat: public NumberFormat {
-public:
-    /**
-     * Construct a new ChoiceFormat with the limits and the corresponding formats
-     * based on the pattern.
-     *
-     * @param pattern   Pattern used to construct object.
-     * @param status    Output param to receive success code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    ChoiceFormat(const UnicodeString& pattern,
-                 UErrorCode& status);
-
-
-    /**
-     * Construct a new ChoiceFormat with the given limits and formats.  Copy
-     * the limits and formats instead of adopting them.
-     *
-     * @param limits    Array of limit values.
-     * @param formats   Array of formats.
-     * @param count     Size of 'limits' and 'formats' arrays.
-     * @stable ICU 2.0
-     */
-
-    ChoiceFormat(const double* limits,
-                 const UnicodeString* formats,
-                 int32_t count );
-
-    /**
-     * Construct a new ChoiceFormat with the given limits and formats.
-     * Copy the limits and formats (instead of adopting them).  By
-     * default, each limit in the array specifies the inclusive lower
-     * bound of its range, and the exclusive upper bound of the previous
-     * range.  However, if the isLimitOpen element corresponding to a
-     * limit is TRUE, then the limit is the exclusive lower bound of its
-     * range, and the inclusive upper bound of the previous range.
-     * @param limits Array of limit values
-     * @param closures Array of booleans specifying whether each
-     * element of 'limits' is open or closed.  If FALSE, then the
-     * corresponding limit is a member of the range above it.  If TRUE,
-     * then the limit belongs to the range below it.
-     * @param formats Array of formats
-     * @param count Size of 'limits', 'closures', and 'formats' arrays
-     * @stable ICU 2.4
-     */
-    ChoiceFormat(const double* limits,
-                 const UBool* closures,
-                 const UnicodeString* formats,
-                 int32_t count);
-
-    /**
-     * Copy constructor.
-     *
-     * @param that   ChoiceFormat object to be copied from
-     * @stable ICU 2.0
-     */
-    ChoiceFormat(const ChoiceFormat& that);
-
-    /**
-     * Assignment operator.
-     *
-     * @param that   ChoiceFormat object to be copied
-     * @stable ICU 2.0
-     */
-    const ChoiceFormat& operator=(const ChoiceFormat& that);
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~ChoiceFormat();
-
-    /**
-     * Clone this Format object polymorphically. The caller owns the
-     * result and should delete it when done.
-     *
-     * @return a copy of this object
-     * @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    ChoiceFormat object to be compared
-     * @return         true if other is the same as this.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const Format& other) const;
-
-    /**
-     * 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);
-
-    /**
-     * Sets the 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);
-    /**
-     * Gets the pattern.
-     *
-     * @param pattern    Output param which will recieve the pattern
-     *                   Previous contents are deleted.
-     * @return    A reference to 'pattern'
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& toPattern(UnicodeString &pattern) const;
-
-    /**
-     * Set the choices to be used in formatting.
-     *
-     * @param limitsToCopy      Contains the top value that you want
-     *                          parsed with that format,and should be in
-     *                          ascending sorted order. When formatting X,
-     *                          the choice will be the i, where limit[i]
-     *                          &lt;= X &lt; limit[i+1].
-     * @param formatsToCopy     The format strings you want to use for each limit.
-     * @param count             The size of the above arrays.
-     * @stable ICU 2.0
-     */
-    virtual void setChoices(const double* limitsToCopy,
-                            const UnicodeString* formatsToCopy,
-                            int32_t count );
-
-    /**
-     * Set the choices to be used in formatting.  See class description
-     * for documenatation of the limits, closures, and formats arrays.
-     * @param limits Array of limits
-     * @param closures Array of limit booleans
-     * @param formats Array of format string
-     * @param count The size of the above arrays
-     * @stable ICU 2.4
-     */
-    virtual void setChoices(const double* limits,
-                            const UBool* closures,
-                            const UnicodeString* formats,
-                            int32_t count);
-
-    /**
-     * Get the limits passed in the constructor.
-     *
-     * @param count    The size of the limits arrays
-     * @return the limits.
-     * @stable ICU 2.0
-     */
-    virtual const double* getLimits(int32_t& count) const;
-
-    /**
-     * Get the limit booleans passed in the constructor.  The caller
-     * must not delete the result.
-     *
-     * @param count   The size of the arrays
-     * @return the closures
-     * @stable ICU 2.4
-     */
-    virtual const UBool* getClosures(int32_t& count) const;
-
-    /**
-     * Get the formats passed in the constructor.
-     *
-     * @param count   The size of the arrays
-     * @return the formats.
-     * @stable ICU 2.0
-     */
-    virtual const UnicodeString* getFormats(int32_t& count) const;
-
-
-    using NumberFormat::format;
-
-    /**
-     * Format a double or long number using this object's choices.
-     *
-     * @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 int_32t number using this object's choices.
-     *
-     * @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_t number using this object's choices.
-     *
-     * @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 an array of objects using this object's choices.
-     *
-     * @param objs      The array of objects to be formatted.
-     * @param cnt       The size of objs.
-     * @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 success   Output param set to success/failure code on
-     *                  exit.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& format(const Formattable* objs,
-                                  int32_t cnt,
-                                  UnicodeString& appendTo,
-                                  FieldPosition& pos,
-                                  UErrorCode& success) const;
-    /**
-     * Format an object using this object's choices.
-     *
-     *
-     * @param obj       The object 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    Output param set to success/failure code on
-     *                  exit.
-     * @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.
-     *
-     * @param obj       The object to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Output param set to success/failure code on
-     *                  exit.
-     * @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. 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(  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;
-
-   /**
-    * Return a long if possible (e.g. within range LONG_MAX,
-    * LONG_MAX], and with no decimals), otherwise a double.  If
-    * IntegerOnly is set, will stop at a decimal point (or equivalent;
-    * e.g. for rational numbers "1 2/3", will stop after the 1).
-    * <P>
-    * If no object can be parsed, parsePosition is unchanged, and NULL is
-    * returned.
-    *
-    * @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                  NumberFormat::isParseIntegerOnly
-    * @stable ICU 2.0
-    */
-    virtual void parse(const UnicodeString& text,
-                       Formattable& result,
-                       ParsePosition& parsePosition) const;
-
-    /**
-    * Return a long if possible (e.g. within range LONG_MAX,
-    * LONG_MAX], and with no decimals), otherwise a double.  If
-    * IntegerOnly is set, will stop at a decimal point (or equivalent;
-    * e.g. for rational numbers "1 2/3", will stop after the 1).
-    * <P>
-    * If no object can be parsed, parsePosition is unchanged, and NULL is
-    * returned.
-    *
-    * @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 status         Output param with the formatted string.
-    * @see                  NumberFormat::isParseIntegerOnly
-    * @stable ICU 2.0
-    */
-    virtual void parse(const UnicodeString& text,
-                       Formattable& result,
-                       UErrorCode& status) const;
-
-
-public:
-    /**
-     * 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;
-
-    /**
-     * 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);
-
-private:
-    // static cache management (thread-safe)
-  //  static NumberFormat* getNumberFormat(UErrorCode &status); // call this function to 'check out' a numberformat from the cache.
-  //  static void          releaseNumberFormat(NumberFormat *adopt); // call this function to 'return' the number format to the cache.
-
-    /**
-     * Converts a string to a double value using a default NumberFormat object
-     * which is static (shared by all ChoiceFormat instances).
-     * @param string the string to be converted with.
-     * @return the converted double number.
-     */
-    static double stod(const UnicodeString& string);
-
-    /**
-     * Converts a double value to a string using a default NumberFormat object
-     * which is static (shared by all ChoiceFormat instances).
-     * @param value the double number to be converted with.
-     * @param string the result string.
-     * @return the converted string.
-     */
-    static UnicodeString& dtos(double value, UnicodeString& string);
-
-    ChoiceFormat(); // default constructor not implemented
-
-    /**
-     * Construct a new ChoiceFormat with the limits and the corresponding formats
-     * based on the pattern.
-     *
-     * @param newPattern   Pattern used to construct object.
-     * @param parseError   Struct to recieve information on position
-     *                     of error if an error is encountered.
-     * @param status       Output param to receive success code.  If the
-     *                     pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    ChoiceFormat(const UnicodeString& newPattern,
-                 UParseError& parseError,
-                 UErrorCode& status);
-
-    friend class MessageFormat;
-    /**
-     * Each ChoiceFormat divides the range -Inf..+Inf into fCount
-     * intervals.  The intervals are:
-     *
-     *         0: fChoiceLimits[0]..fChoiceLimits[1]
-     *         1: fChoiceLimits[1]..fChoiceLimits[2]
-     *        ...
-     *  fCount-2: fChoiceLimits[fCount-2]..fChoiceLimits[fCount-1]
-     *  fCount-1: fChoiceLimits[fCount-1]..+Inf
-     *
-     * Interval 0 is special; during formatting (mapping numbers to
-     * strings), it also contains all numbers less than
-     * fChoiceLimits[0], as well as NaN values.
-     *
-     * Interval i maps to and from string fChoiceFormats[i].  When
-     * parsing (mapping strings to numbers), then intervals map to
-     * their lower limit, that is, interval i maps to fChoiceLimit[i].
-     *
-     * The intervals may be closed, half open, or open.  This affects
-     * formatting but does not affect parsing.  Interval i is affected
-     * by fClosures[i] and fClosures[i+1].  If fClosures[i]
-     * is FALSE, then the value fChoiceLimits[i] is in interval i.
-     * That is, intervals i and i are:
-     *
-     *  i-1:                 ... x < fChoiceLimits[i]
-     *    i: fChoiceLimits[i] <= x ...
-     *
-     * If fClosures[i] is TRUE, then the value fChoiceLimits[i] is
-     * in interval i-1.  That is, intervals i-1 and i are:
-     *
-     *  i-1:                ... x <= fChoiceLimits[i]
-     *    i: fChoiceLimits[i] < x ...
-     *
-     * Because of the nature of interval 0, fClosures[0] has no
-     * effect.
-
-     */
-    double*         fChoiceLimits;
-    UBool*          fClosures;
-    UnicodeString*  fChoiceFormats;
-    int32_t         fCount;
-};
-
-inline UnicodeString&
-ChoiceFormat::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&
-ChoiceFormat::format(double number,
-                     UnicodeString& appendTo) const {
-    return NumberFormat::format(number, appendTo);
-}
-
-inline UnicodeString&
-ChoiceFormat::format(int32_t number,
-                     UnicodeString& appendTo) const {
-    return NumberFormat::format(number, appendTo);
-}
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _CHOICFMT
-//eof
diff --git a/source/i18n/unicode/coleitr.h b/source/i18n/unicode/coleitr.h
deleted file mode 100644
index 4025a41..0000000
--- a/source/i18n/unicode/coleitr.h
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- ******************************************************************************
- *   Copyright (C) 1997-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- ******************************************************************************
- */
-
-/**
- * \file 
- * \brief C++ API: Collation Element Iterator.
- */
-
-/**
-* File coleitr.h
-*
-* 
-*
-* Created by: Helena Shih
-*
-* Modification History:
-*
-*  Date       Name        Description
-*
-*  8/18/97    helena      Added internal API documentation.
-* 08/03/98    erm         Synched with 1.2 version CollationElementIterator.java
-* 12/10/99    aliu        Ported Thai collation support from Java.
-* 01/25/01    swquek      Modified into a C++ wrapper calling C APIs (ucoliter.h)
-* 02/19/01    swquek      Removed CollationElementsIterator() since it is 
-*                         private constructor and no calls are made to it
-*/
-
-#ifndef COLEITR_H
-#define COLEITR_H
-
-#include "unicode/utypes.h"
-
- 
-#if !UCONFIG_NO_COLLATION
-
-#include "unicode/uobject.h"
-#include "unicode/tblcoll.h"
-#include "unicode/ucoleitr.h"
-
-/** 
- * The UCollationElements struct.
- * For usage in C programs.
- * @stable ICU 2.0
- */
-typedef struct UCollationElements UCollationElements;
-
-U_NAMESPACE_BEGIN
-
-/**
-* The CollationElementIterator class is used as an iterator to walk through     
-* each character of an international string. Use the iterator to return the
-* ordering priority of the positioned character. The ordering priority of a 
-* character, which we refer to as a key, defines how a character is collated in 
-* the given collation object.
-* For example, consider the following in Spanish:
-* <pre>
-*        "ca" -> the first key is key('c') and second key is key('a').
-*        "cha" -> the first key is key('ch') and second key is key('a').</pre>
-* And in German,
-* <pre> \htmlonly       "&#x00E6;b"-> the first key is key('a'), the second key is key('e'), and
-*        the third key is key('b'). \endhtmlonly </pre>
-* The key of a character, is an integer composed of primary order(short),
-* secondary order(char), and tertiary order(char). Java strictly defines the 
-* size and signedness of its primitive data types. Therefore, the static
-* functions primaryOrder(), secondaryOrder(), and tertiaryOrder() return 
-* int32_t to ensure the correctness of the key value.
-* <p>Example of the iterator usage: (without error checking)
-* <pre>
-* \code
-*   void CollationElementIterator_Example()
-*   {
-*       UnicodeString str = "This is a test";
-*       UErrorCode success = U_ZERO_ERROR;
-*       RuleBasedCollator* rbc =
-*           (RuleBasedCollator*) RuleBasedCollator::createInstance(success);
-*       CollationElementIterator* c =
-*           rbc->createCollationElementIterator( str );
-*       int32_t order = c->next(success);
-*       c->reset();
-*       order = c->previous(success);
-*       delete c;
-*       delete rbc;
-*   }
-* \endcode
-* </pre>
-* <p>
-* CollationElementIterator::next returns the collation order of the next
-* character based on the comparison level of the collator. 
-* CollationElementIterator::previous returns the collation order of the 
-* previous character based on the comparison level of the collator. 
-* The Collation Element Iterator moves only in one direction between calls to
-* CollationElementIterator::reset. That is, CollationElementIterator::next() 
-* and CollationElementIterator::previous can not be inter-used. Whenever 
-* CollationElementIterator::previous is to be called after 
-* CollationElementIterator::next() or vice versa, 
-* CollationElementIterator::reset has to be called first to reset the status, 
-* shifting pointers to either the end or the start of the string. Hence at the 
-* next call of CollationElementIterator::previous or 
-* CollationElementIterator::next(), the first or last collation order will be 
-* returned. 
-* If a change of direction is done without a CollationElementIterator::reset(), 
-* the result is undefined.
-* The result of a forward iterate (CollationElementIterator::next) and 
-* reversed result of the backward iterate (CollationElementIterator::previous) 
-* on the same string are equivalent, if collation orders with the value 
-* UCOL_IGNORABLE are ignored.
-* Character based on the comparison level of the collator.  A collation order 
-* consists of primary order, secondary order and tertiary order.  The data 
-* type of the collation order is <strong>t_int32</strong>. 
-*
-* Note, CollationElementIterator should not be subclassed.
-* @see     Collator
-* @see     RuleBasedCollator
-* @version 1.8 Jan 16 2001
-*/
-class U_I18N_API CollationElementIterator : public UObject {
-public: 
-
-    // CollationElementIterator public data member ------------------------------
-
-    enum {
-        /**
-         * NULLORDER indicates that an error has occured while processing
-         * @stable ICU 2.0
-         */
-        NULLORDER = (int32_t)0xffffffff
-    };
-
-    // CollationElementIterator public constructor/destructor -------------------
-
-    /**
-    * Copy constructor.
-    *
-    * @param other    the object to be copied from
-    * @stable ICU 2.0
-    */
-    CollationElementIterator(const CollationElementIterator& other);
-
-    /** 
-    * Destructor
-    * @stable ICU 2.0
-    */
-    virtual ~CollationElementIterator();
-
-    // CollationElementIterator public methods ----------------------------------
-
-    /**
-    * Returns true if "other" is the same as "this"
-    *
-    * @param other    the object to be compared
-    * @return         true if "other" is the same as "this"
-    * @stable ICU 2.0
-    */
-    UBool operator==(const CollationElementIterator& other) const;
-
-    /**
-    * Returns true if "other" is not the same as "this".
-    *
-    * @param other    the object to be compared
-    * @return         true if "other" is not the same as "this"
-    * @stable ICU 2.0
-    */
-    UBool operator!=(const CollationElementIterator& other) const;
-
-    /**
-    * Resets the cursor to the beginning of the string.
-    * @stable ICU 2.0
-    */
-    void reset(void);
-
-    /**
-    * Gets the ordering priority of the next character in the string.
-    * @param status the error code status.
-    * @return the next character's ordering. otherwise returns NULLORDER if an 
-    *         error has occured or if the end of string has been reached
-    * @stable ICU 2.0
-    */
-    int32_t next(UErrorCode& status);
-
-    /**
-    * Get the ordering priority of the previous collation element in the string.
-    * @param status the error code status.
-    * @return the previous element's ordering. otherwise returns NULLORDER if an 
-    *         error has occured or if the start of string has been reached
-    * @stable ICU 2.0
-    */
-    int32_t previous(UErrorCode& status);
-
-    /**
-    * Gets the primary order of a collation order.
-    * @param order the collation order
-    * @return the primary order of a collation order.
-    * @stable ICU 2.0
-    */
-    static inline int32_t primaryOrder(int32_t order);
-
-    /**
-    * Gets the secondary order of a collation order.
-    * @param order the collation order
-    * @return the secondary order of a collation order.
-    * @stable ICU 2.0
-    */
-    static inline int32_t secondaryOrder(int32_t order);
-
-    /**
-    * Gets the tertiary order of a collation order.
-    * @param order the collation order
-    * @return the tertiary order of a collation order.
-    * @stable ICU 2.0
-    */
-    static inline int32_t tertiaryOrder(int32_t order);
-
-    /**
-    * Return the maximum length of any expansion sequences that end with the 
-    * specified comparison order.
-    * @param order a collation order returned by previous or next.
-    * @return maximum size of the expansion sequences ending with the collation 
-    *         element or 1 if collation element does not occur at the end of any 
-    *         expansion sequence
-    * @stable ICU 2.0
-    */
-    int32_t getMaxExpansion(int32_t order) const;
-
-    /**
-    * Gets the comparison order in the desired strength. Ignore the other
-    * differences.
-    * @param order The order value
-    * @stable ICU 2.0
-    */
-    int32_t strengthOrder(int32_t order) const;
-
-    /**
-    * Sets the source string.
-    * @param str the source string.
-    * @param status the error code status.
-    * @stable ICU 2.0
-    */
-    void setText(const UnicodeString& str, UErrorCode& status);
-
-    /**
-    * Sets the source string.
-    * @param str the source character iterator.
-    * @param status the error code status.
-    * @stable ICU 2.0
-    */
-    void setText(CharacterIterator& str, UErrorCode& status);
-
-    /**
-    * Checks if a comparison order is ignorable.
-    * @param order the collation order.
-    * @return TRUE if a character is ignorable, FALSE otherwise.
-    * @stable ICU 2.0
-    */
-    static inline UBool isIgnorable(int32_t order);
-
-    /**
-    * Gets the offset of the currently processed character in the source string.
-    * @return the offset of the character.
-    * @stable ICU 2.0
-    */
-    int32_t getOffset(void) const;
-
-    /**
-    * Sets the offset of the currently processed character in the source string.
-    * @param newOffset the new offset.
-    * @param status the error code status.
-    * @return the offset of the character.
-    * @stable ICU 2.0
-    */
-    void setOffset(int32_t newOffset, UErrorCode& status);
-
-    /**
-    * ICU "poor man's RTTI", returns a UClassID for the actual class.
-    *
-    * @stable ICU 2.2
-    */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-    * ICU "poor man's RTTI", returns a UClassID for this class.
-    *
-    * @stable ICU 2.2
-    */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-protected:
-  
-    // CollationElementIterator protected constructors --------------------------
-    /**
-    * @stable ICU 2.0
-    */
-    friend class RuleBasedCollator;
-
-    /**
-    * CollationElementIterator constructor. This takes the source string and the 
-    * collation object. The cursor will walk thru the source string based on the 
-    * predefined collation rules. If the source string is empty, NULLORDER will 
-    * be returned on the calls to next().
-    * @param sourceText    the source string.
-    * @param order         the collation object.
-    * @param status        the error code status.
-    * @stable ICU 2.0
-    */
-    CollationElementIterator(const UnicodeString& sourceText,
-        const RuleBasedCollator* order, UErrorCode& status);
-
-    /**
-    * CollationElementIterator constructor. This takes the source string and the 
-    * collation object.  The cursor will walk thru the source string based on the 
-    * predefined collation rules.  If the source string is empty, NULLORDER will 
-    * be returned on the calls to next().
-    * @param sourceText    the source string.
-    * @param order         the collation object.
-    * @param status        the error code status.
-    * @stable ICU 2.0
-    */
-    CollationElementIterator(const CharacterIterator& sourceText,
-        const RuleBasedCollator* order, UErrorCode& status);
-
-    // CollationElementIterator protected methods -------------------------------
-
-    /**
-    * Assignment operator
-    *
-    * @param other    the object to be copied
-    * @stable ICU 2.0
-    */
-    const CollationElementIterator&
-        operator=(const CollationElementIterator& other);
-
-private:
-    CollationElementIterator(); // default constructor not implemented
-
-    // CollationElementIterator private data members ----------------------------
-
-    /**
-    * Data wrapper for collation elements
-    */
-    UCollationElements *m_data_;
-
-    /**
-    * Indicates if m_data_ belongs to this object.
-    */
-    UBool isDataOwned_;
-
-};
-
-// CollationElementIterator inline method defination --------------------------
-
-/**
-* Get the primary order of a collation order.
-* @param order the collation order
-* @return the primary order of a collation order.
-*/
-inline int32_t CollationElementIterator::primaryOrder(int32_t order)
-{
-    order &= RuleBasedCollator::PRIMARYORDERMASK;
-    return (order >> RuleBasedCollator::PRIMARYORDERSHIFT);
-}
-
-/**
-* Get the secondary order of a collation order.
-* @param order the collation order
-* @return the secondary order of a collation order.
-*/
-inline int32_t CollationElementIterator::secondaryOrder(int32_t order)
-{
-    order = order & RuleBasedCollator::SECONDARYORDERMASK;
-    return (order >> RuleBasedCollator::SECONDARYORDERSHIFT);
-}
-
-/**
-* Get the tertiary order of a collation order.
-* @param order the collation order
-* @return the tertiary order of a collation order.
-*/
-inline int32_t CollationElementIterator::tertiaryOrder(int32_t order)
-{
-    return (order &= RuleBasedCollator::TERTIARYORDERMASK);
-}
-
-inline int32_t CollationElementIterator::getMaxExpansion(int32_t order) const
-{
-    return ucol_getMaxExpansion(m_data_, (uint32_t)order);
-}
-
-inline UBool CollationElementIterator::isIgnorable(int32_t order)
-{
-    return (primaryOrder(order) == RuleBasedCollator::PRIMIGNORABLE);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
diff --git a/source/i18n/unicode/coll.h b/source/i18n/unicode/coll.h
deleted file mode 100644
index 357af13..0000000
--- a/source/i18n/unicode/coll.h
+++ /dev/null
@@ -1,1113 +0,0 @@
-/*
-******************************************************************************
-*   Copyright (C) 1996-2010, 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"
-#include "unicode/uiter.h"
-#include "unicode/stringpiece.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;
-
-    /**
-     * Compares two strings using the Collator.
-     * Returns whether the first one compares less than/equal to/greater than
-     * the second one.
-     * This version takes UCharIterator input.
-     * @param sIter the first ("source") string iterator
-     * @param tIter the second ("target") string iterator
-     * @param status ICU status
-     * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER
-     * @stable ICU 4.2
-     */
-    virtual UCollationResult compare(UCharIterator &sIter,
-                                     UCharIterator &tIter,
-                                     UErrorCode &status) const;
-
-    /**
-     * Compares two UTF-8 strings using the Collator.
-     * Returns whether the first one compares less than/equal to/greater than
-     * the second one.
-     * This version takes UTF-8 input.
-     * Note that a StringPiece can be implicitly constructed
-     * from a std::string or a NUL-terminated const char * string.
-     * @param source the first UTF-8 string
-     * @param target the second UTF-8 string
-     * @param status ICU status
-     * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER
-     * @stable ICU 4.2
-     */
-    virtual UCollationResult compareUTF8(const StringPiece &source,
-                                         const StringPiece &target,
-                                         UErrorCode &status) const;
-
-    /**
-     * 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 the current reordering of scripts (if one has been set).
-     * @param dest The array to fill with the script ordering.
-     * @param destCapacity The length of dest. 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 (pre-flighting).
-     * @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 array of the script ordering.
-     * @see ucol_getReorderCodes
-     * @internal 
-     */
-    virtual int32_t getReorderCodes(int32_t *dest,
-                                    int32_t destCapacity,
-                                    UErrorCode& status) const;
-
-    /**
-     * Set the ordering of scripts for this collator.
-     * @param reorderCodes An array of reorder codes in the new order.
-     * @param reorderCodesLength The length of reorderCodes.
-     * @see ucol_setReorderCodes
-     * @internal 
-     */
-    virtual void setReorderCodes(const int32_t* reorderCodes,
-                                int32_t reorderCodesLength,
-                                UErrorCode& status) ;
-
-    /**
-     * 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);
-
-    /**
-     * Given a key and a locale, returns an array of string values in a preferred
-     * order that would make a difference. These are all and only those values where
-     * the open (creation) of the service with the locale formed from the input locale
-     * plus input keyword and that value has different behavior than creation with the
-     * input locale alone.
-     * @param keyword        one of the keys supported by this service.  For now, only
-     *                      "collation" is supported.
-     * @param locale        the locale
-     * @param commonlyUsed  if set to true it will return only commonly used values
-     *                      with the given locale in preferred order.  Otherwise,
-     *                      it will return all the available values for the locale.
-     * @param status ICU status
-     * @return a string enumeration over keyword values for the given key and the locale.
-     * @stable ICU 4.2
-     */
-    static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
-                                                                    UBool commonlyUsed, 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 requested locale
-    * @param validLocale the valid locale
-    * @param actualLocale the actual 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
diff --git a/source/i18n/unicode/colldata.h b/source/i18n/unicode/colldata.h
deleted file mode 100644
index af465f5..0000000
--- a/source/i18n/unicode/colldata.h
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- ******************************************************************************
- *   Copyright (C) 1996-2010, International Business Machines                 *
- *   Corporation and others.  All Rights Reserved.                            *
- ******************************************************************************
- */
-
-/**
- * \file 
- * \brief C++ API: Collation data used to compute minLengthInChars.
- * \internal
- */
- 
-#ifndef COLL_DATA_H
-#define COLL_DATA_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_COLLATION
-
-#include "unicode/uobject.h"
-#include "unicode/ucol.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * The size of the internal buffer for the Collator's short description string.
- * @internal ICU 4.0.1 technology preview
- */
-#define KEY_BUFFER_SIZE 64
-
- /**
-  * The size of the internal CE buffer in a <code>CEList</code> object
-  * @internal ICU 4.0.1 technology preview
-  */
-#define CELIST_BUFFER_SIZE 4
-
-/**
- * \def INSTRUMENT_CELIST
- * Define this to enable the <code>CEList</code> objects to collect
- * statistics.
- * @internal ICU 4.0.1 technology preview
- */
-//#define INSTRUMENT_CELIST
-
- /**
-  * The size of the initial list in a <code>StringList</code> object.
-  * @internal ICU 4.0.1 technology preview
-  */
-#define STRING_LIST_BUFFER_SIZE 16
-
-/**
- * \def INSTRUMENT_STRING_LIST
- * Define this to enable the <code>StringList</code> objects to
- * collect statistics.
- * @internal ICU 4.0.1 technology preview
- */
-//#define INSTRUMENT_STRING_LIST
-
- /**
-  * This object holds a list of CEs generated from a particular
-  * <code>UnicodeString</code>
-  *
-  * @internal ICU 4.0.1 technology preview
-  */
-class U_I18N_API CEList : public UObject
-{
-public:
-    /**
-     * Construct a <code>CEList</code> object.
-     *
-     * @param coll - the Collator used to collect the CEs.
-     * @param string - the string for which to collect the CEs.
-     * @param status - will be set if any errors occur. 
-     *
-     * Note: if on return, status is set to an error code,
-     * the only safe thing to do with this object is to call
-     * the destructor.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    CEList(UCollator *coll, const UnicodeString &string, UErrorCode &status);
-
-    /**
-     * The destructor.
-     * @internal ICU 4.0.1 technology preview
-     */
-    ~CEList();
-
-    /**
-     * Return the number of CEs in the list.
-     *
-     * @return the number of CEs in the list.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    int32_t size() const;
-
-    /**
-     * Get a particular CE from the list.
-     *
-     * @param index - the index of the CE to return
-     *
-     * @return the CE, or <code>0</code> if <code>index</code> is out of range
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    uint32_t get(int32_t index) const;
-
-    /**
-     * Check if the CEs in another <code>CEList</code> match the
-     * suffix of this list starting at a give offset.
-     *
-     * @param offset - the offset of the suffix
-     * @param other - the other <code>CEList</code>
-     *
-     * @return <code>TRUE</code> if the CEs match, <code>FALSE</code> otherwise.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    UBool matchesAt(int32_t offset, const CEList *other) const; 
-
-    /**
-     * The index operator.
-     *
-     * @param index - the index
-     *
-     * @return a reference to the given CE in the list
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    uint32_t &operator[](int32_t index) const;
-
-    /**
-     * UObject glue...
-     * @internal ICU 4.0.1 technology preview
-     */
-    virtual UClassID getDynamicClassID() const;
-    /**
-     * UObject glue...
-     * @internal ICU 4.0.1 technology preview
-     */
-    static UClassID getStaticClassID();
-
-private:
-    void add(uint32_t ce, UErrorCode &status);
-
-    uint32_t ceBuffer[CELIST_BUFFER_SIZE];
-    uint32_t *ces;
-    int32_t listMax;
-    int32_t listSize;
-
-#ifdef INSTRUMENT_CELIST
-    static int32_t _active;
-    static int32_t _histogram[10];
-#endif
-};
-
-/**
- * StringList
- *
- * This object holds a list of <code>UnicodeString</code> objects.
- *
- * @internal ICU 4.0.1 technology preview
- */
-class U_I18N_API StringList : public UObject
-{
-public:
-    /**
-     * Construct an empty <code>StringList</code>
-     *
-     * @param status - will be set if any errors occur. 
-     *
-     * Note: if on return, status is set to an error code,
-     * the only safe thing to do with this object is to call
-     * the destructor.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    StringList(UErrorCode &status);
-
-    /**
-     * The destructor.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    ~StringList();
-
-    /**
-     * Add a string to the list.
-     *
-     * @param string - the string to add
-     * @param status - will be set if any errors occur. 
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    void add(const UnicodeString *string, UErrorCode &status);
-
-    /**
-     * Add an array of Unicode code points to the list.
-     *
-     * @param chars - the address of the array of code points
-     * @param count - the number of code points in the array
-     * @param status - will be set if any errors occur. 
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    void add(const UChar *chars, int32_t count, UErrorCode &status);
-
-    /**
-     * Get a particular string from the list.
-     *
-     * @param index - the index of the string
-     *
-     * @return a pointer to the <code>UnicodeString</code> or <code>NULL</code> 
-     *         if <code>index</code> is out of bounds.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    const UnicodeString *get(int32_t index) const;
-
-    /**
-     * Get the number of stings in the list.
-     *
-     * @return the number of strings in the list.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    int32_t size() const;
-
-    /**
-     * the UObject glue...
-     * @internal ICU 4.0.1 technology preview
-     */
-    virtual UClassID getDynamicClassID() const;
-    /**
-     * the UObject glue...
-     * @internal ICU 4.0.1 technology preview
-     */
-    static UClassID getStaticClassID();
-
-private:
-    UnicodeString *strings;
-    int32_t listMax;
-    int32_t listSize;
-
-#ifdef INSTRUMENT_STRING_LIST
-    static int32_t _lists;
-    static int32_t _strings;
-    static int32_t _histogram[101];
-#endif
-};
-
-/*
- * Forward references to internal classes.
- */
-class StringToCEsMap;
-class CEToStringsMap;
-class CollDataCache;
-
-/**
- * CollData
- *
- * This class holds the Collator-specific data needed to
- * compute the length of the shortest string that can
- * generate a partcular list of CEs.
- *
- * <code>CollData</code> objects are quite expensive to compute. Because
- * of this, they are cached. When you call <code>CollData::open</code> it
- * returns a reference counted cached object. When you call <code>CollData::close</code>
- * the reference count on the object is decremented but the object is not deleted.
- *
- * If you do not need to reuse any unreferenced objects in the cache, you can call
- * <code>CollData::flushCollDataCache</code>. If you no longer need any <code>CollData</code>
- * objects, you can call <code>CollData::freeCollDataCache</code>
- *
- * @internal ICU 4.0.1 technology preview
- */
-class U_I18N_API CollData : public UObject
-{
-public:
-    /**
-     * Construct a <code>CollData</code> object.
-     *
-     * @param collator - the collator
-     * @param status - will be set if any errors occur. 
-     *
-     * @return the <code>CollData</code> object. You must call
-     *         <code>close</code> when you are done using the object.
-     *
-     * Note: if on return, status is set to an error code,
-     * the only safe thing to do with this object is to call
-     * <code>CollData::close</code>.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    static CollData *open(UCollator *collator, UErrorCode &status);
-
-    /**
-     * Release a <code>CollData</code> object.
-     *
-     * @param collData - the object
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    static void close(CollData *collData);
-
-    /**
-     * Get the <code>UCollator</code> object used to create this object.
-     * The object returned may not be the exact object that was used to
-     * create this object, but it will have the same behavior.
-     * @internal ICU 4.0.1 technology preview
-     */
-    UCollator *getCollator() const;
-
-    /**
-     * Get a list of all the strings which generate a list
-     * of CEs starting with a given CE.
-     *
-     * @param ce - the CE
-     *
-     * return a <code>StringList</code> object containing all
-     *        the stirngs, or <code>NULL</code> if there are
-     *        no such strings.
-     *
-     * @internal ICU 4.0.1 technology preview.
-     */
-    const StringList *getStringList(int32_t ce) const;
-
-    /**
-     * Get a list of the CEs generated by a partcular stirng.
-     *
-     * @param string - the string
-     *
-     * @return a <code>CEList</code> object containt the CEs. You
-     *         must call <code>freeCEList</code> when you are finished
-     *         using the <code>CEList</code>/
-     *
-     * @internal ICU 4.0.1 technology preview.
-     */
-    const CEList *getCEList(const UnicodeString *string) const;
-
-    /**
-     * Release a <code>CEList</code> returned by <code>getCEList</code>.
-     *
-     * @param list - the <code>CEList</code> to free.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    void freeCEList(const CEList *list);
-
-    /**
-     * Return the length of the shortest string that will generate
-     * the given list of CEs.
-     *
-     * @param ces - the CEs
-     * @param offset - the offset of the first CE in the list to use.
-     *
-     * @return the length of the shortest string.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-    int32_t minLengthInChars(const CEList *ces, int32_t offset) const;
-
- 
-    /**
-     * Return the length of the shortest string that will generate
-     * the given list of CEs.
-     *
-     * Note: the algorithm used to do this computation is recursive. To
-     * limit the amount of recursion, a "history" list is used to record
-     * the best answer starting at a particular offset in the list of CEs.
-     * If the same offset is visited again during the recursion, the answer
-     * in the history list is used.
-     *
-     * @param ces - the CEs
-     * @param offset - the offset of the first CE in the list to use.
-     * @param history - the history list. Must be at least as long as
-     *                 the number of cEs in the <code>CEList</code>
-     *
-     * @return the length of the shortest string.
-     *
-     * @internal ICU 4.0.1 technology preview
-     */
-   int32_t minLengthInChars(const CEList *ces, int32_t offset, int32_t *history) const;
-
-   /**
-    * UObject glue...
-    * @internal ICU 4.0.1 technology preview
-    */
-    virtual UClassID getDynamicClassID() const;
-   /**
-    * UObject glue...
-    * @internal ICU 4.0.1 technology preview
-    */
-    static UClassID getStaticClassID();
-
-    /**
-     * <code>CollData</code> objects are expensive to compute, and so
-     * may be cached. This routine will free the cached objects and delete
-     * the cache.
-     *
-     * WARNING: Don't call this until you are have called <code>close</code>
-     * for each <code>CollData</code> object that you have used. also,
-     * DO NOT call this if another thread may be calling <code>flushCollDataCache</code>
-     * at the same time.
-     *
-     * @internal 4.0.1 technology preview
-     */
-    static void freeCollDataCache();
-
-    /**
-     * <code>CollData</code> objects are expensive to compute, and so
-     * may be cached. This routine will remove any unused <code>CollData</code>
-     * objects from the cache.
-     *
-     * @internal 4.0.1 technology preview
-     */
-    static void flushCollDataCache();
-
-private:
-    friend class CollDataCache;
-    friend class CollDataCacheEntry;
-
-    CollData(UCollator *collator, char *cacheKey, int32_t cachekeyLength, UErrorCode &status);
-    ~CollData();
-
-    CollData();
-
-    static char *getCollatorKey(UCollator *collator, char *buffer, int32_t bufferLength);
-
-    static CollDataCache *getCollDataCache();
-
-    UCollator      *coll;
-    StringToCEsMap *charsToCEList;
-    CEToStringsMap *ceToCharsStartingWith;
-
-    char keyBuffer[KEY_BUFFER_SIZE];
-    char *key;
-
-    static CollDataCache *collDataCache;
-
-    uint32_t minHan;
-    uint32_t maxHan;
-
-    uint32_t jamoLimits[4];
-};
-
-U_NAMESPACE_END
-
-#endif // #if !UCONFIG_NO_COLLATION
-#endif // #ifndef COLL_DATA_H
diff --git a/source/i18n/unicode/curramt.h b/source/i18n/unicode/curramt.h
deleted file mode 100644
index c33e6f1..0000000
--- a/source/i18n/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__
diff --git a/source/i18n/unicode/currpinf.h b/source/i18n/unicode/currpinf.h
deleted file mode 100644
index fd9e5da..0000000
--- a/source/i18n/unicode/currpinf.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 2009-2010, International Business Machines Corporation and         *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-#ifndef CURRPINF_H
-#define CURRPINF_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Currency Plural Information used by Decimal Format
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/unistr.h"
-
-union UHashTok;
-
-U_NAMESPACE_BEGIN
-
-class Locale;
-class PluralRules;
-class Hashtable;
-
-/**
- * This class represents the information needed by 
- * DecimalFormat to format currency plural, 
- * such as "3.00 US dollars" or "1.00 US dollar". 
- * DecimalFormat creates for itself an instance of
- * CurrencyPluralInfo from its locale data.  
- * If you need to change any of these symbols, you can get the
- * CurrencyPluralInfo object from your 
- * DecimalFormat and modify it.
- *
- * Following are the information needed for currency plural format and parse:
- * locale information,
- * plural rule of the locale,
- * currency plural pattern of the locale.
- *
- * @stable ICU 4.2
- */
-class  U_I18N_API CurrencyPluralInfo : public UObject {
-public:
-
-    /**
-     * Create a CurrencyPluralInfo object for the default locale.
-     * @param status output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    CurrencyPluralInfo(UErrorCode& status);
-
-    /**
-     * Create a CurrencyPluralInfo object for the given locale.
-     * @param locale the locale
-     * @param status output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    CurrencyPluralInfo(const Locale& locale, UErrorCode& status); 
-
-    /**
-     * Copy constructor
-     *
-     * @stable ICU 4.2
-     */
-    CurrencyPluralInfo(const CurrencyPluralInfo& info);
-
-
-    /**
-     * Assignment operator
-     *
-     * @stable ICU 4.2
-     */
-    CurrencyPluralInfo& operator=(const CurrencyPluralInfo& info);
-
-
-    /**
-     * Destructor
-     *
-     * @stable ICU 4.2
-     */
-    virtual ~CurrencyPluralInfo();
-
-
-    /**
-     * Equal operator.
-     *
-     * @stable ICU 4.2
-     */
-    UBool operator==(const CurrencyPluralInfo& info) const;
-
-
-    /**
-     * Not equal operator
-     *
-     * @stable ICU 4.2
-     */
-    UBool operator!=(const CurrencyPluralInfo& info) const;
-
-
-    /**
-     * Clone
-     *
-     * @stable ICU 4.2
-     */
-    CurrencyPluralInfo* clone() const;
-
-
-    /**
-     * Gets plural rules of this locale, used for currency plural format
-     *
-     * @return plural rule
-     * @stable ICU 4.2
-     */
-    const PluralRules* getPluralRules() const;
-
-    /**
-     * Given a plural count, gets currency plural pattern of this locale, 
-     * used for currency plural format
-     *
-     * @param  pluralCount currency plural count
-     * @param  result      output param to receive the pattern
-     * @return a currency plural pattern based on plural count
-     * @stable ICU 4.2
-     */
-    UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount,
-                                            UnicodeString& result) const; 
-
-    /**
-     * Get locale 
-     *
-     * @return locale
-     * @stable ICU 4.2
-     */
-    const Locale& getLocale() const;
-
-    /**
-     * Set plural rules.
-     * The plural rule is set when CurrencyPluralInfo
-     * instance is created.
-     * You can call this method to reset plural rules only if you want
-     * to modify the default plural rule of the locale.
-     *
-     * @param ruleDescription new plural rule description
-     * @param status output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    void setPluralRules(const UnicodeString& ruleDescription,
-                        UErrorCode& status);
-
-    /**
-     * Set currency plural pattern.
-     * The currency plural pattern is set when CurrencyPluralInfo
-     * instance is created.
-     * You can call this method to reset currency plural pattern only if 
-     * you want to modify the default currency plural pattern of the locale.
-     *
-     * @param pluralCount the plural count for which the currency pattern will 
-     *                    be overridden.
-     * @param pattern     the new currency plural pattern
-     * @param status      output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    void setCurrencyPluralPattern(const UnicodeString& pluralCount, 
-                                  const UnicodeString& pattern,
-                                  UErrorCode& status);
-
-    /**
-     * Set locale
-     *
-     * @param loc     the new locale to set
-     * @param status  output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    void setLocale(const Locale& loc, UErrorCode& status);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 4.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 4.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-    friend class DecimalFormat;
-
-    void initialize(const Locale& loc, UErrorCode& status);
-   
-    void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status);
-
-    /*
-     * delete hash table
-     *
-     * @param hTable  hash table to be deleted
-     */
-    void deleteHash(Hashtable* hTable);
-
-
-    /*
-     * initialize hash table
-     *
-     * @param status   output param set to success/failure code on exit
-     * @return         hash table initialized
-     */
-    Hashtable* initHash(UErrorCode& status);
-
-
-
-    /**
-     * copy hash table
-     *
-     * @param source   the source to copy from
-     * @param target   the target to copy to
-     */
-    void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
-
-    //-------------------- private data member ---------------------
-    // map from plural count to currency plural pattern, for example
-    // a plural pattern defined in "CurrencyUnitPatterns" is
-    // "one{{0} {1}}", in which "one" is a plural count
-    // and "{0} {1}" is a currency plural pattern".
-    // The currency plural pattern saved in this mapping is the pattern
-    // defined in "CurrencyUnitPattern" by replacing
-    // {0} with the number format pattern,
-    // and {1} with 3 currency sign.
-    Hashtable* fPluralCountToCurrencyUnitPattern;
-
-    /*
-     * The plural rule is used to format currency plural name,
-     * for example: "3.00 US Dollars".
-     * If there are 3 currency signs in the currency patttern,
-     * the 3 currency signs will be replaced by currency plural name.
-     */
-    PluralRules* fPluralRules;
-
-    // locale
-    Locale* fLocale;
-};
-
-
-inline UBool
-CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {              return !operator==(info);                                                   }  
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _CURRPINFO
-//eof
diff --git a/source/i18n/unicode/currunit.h b/source/i18n/unicode/currunit.h
deleted file mode 100644
index ecd9411..0000000
--- a/source/i18n/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__
diff --git a/source/i18n/unicode/datefmt.h b/source/i18n/unicode/datefmt.h
deleted file mode 100644
index d21133a..0000000
--- a/source/i18n/unicode/datefmt.h
+++ /dev/null
@@ -1,751 +0,0 @@
-/*
- ********************************************************************************
- *   Copyright (C) 1997-2010, 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;
-class DateTimePatternGenerator;
-
-/**
- * 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,
-     * the default date-time pattern, and 4 date-time patterns. 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,
-     // Default DateTime
-
-        kDateTimeOffset = kDateTime + 1,
-     // kFull   + kDateTimeOffset = 9
-     // kLong   + kDateTimeOffset = 10
-     // kMedium + kDateTimeOffset = 11
-     // kShort  + kDateTimeOffset = 12
-
-        // 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;
-
-
-    using Format::format;
-
-    /**
-     * 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;
-
-    /**
-     * 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 posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.  Field values
-     *                  are defined in UDateFormatField.  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& format(const Formattable& obj,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  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.  When the calendar type is
-     *                      different from the internal calendar held by this
-     *                      DateFormat instance, the date and the time zone will
-     *                      be inherited from the input calendar, but other calendar
-     *                      field values will be calculated by the internal calendar.
-     * @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 date into a date/time string. Subclasses should implement this method.
-     *
-     * @param cal       Calendar set to the date and time to be formatted
-     *                  into a date/time string.  When the calendar type is
-     *                  different from the internal calendar held by this
-     *                  DateFormat instance, the date and the time zone will
-     *                  be inherited from the input calendar, but other calendar
-     *                  field values will be calculated by the internal calendar.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.  Field values
-     *                  are defined in UDateFormatField.  Can be NULL.
-     * @param status    error status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& format(Calendar& cal,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-    /**
-     * 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.
-     *
-     * @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 posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.  Field values
-     *                  are defined in UDateFormatField.  Can be NULL.
-     * @param status    error status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    UnicodeString& format(UDate date,
-                          UnicodeString& appendTo,
-                          FieldPositionIterator* posIter,
-                          UErrorCode& status) 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.  When the calendar type
-     *              is different from the internal calendar held by this
-     *              DateFormat instance, calendar field values will be
-     *              parsed based on the internal calendar, then the result
-     *              (time in milliseconds and time zone) will be set in
-     *              this calendar.
-     * @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);
-
-    /**
-     * 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. Relative
-     *                  time styles are not currently supported.
-     * @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. Relative
-     *                  time styles are not currently supported.
-     * @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
diff --git a/source/i18n/unicode/dcfmtsym.h b/source/i18n/unicode/dcfmtsym.h
deleted file mode 100644
index dd554c5..0000000
--- a/source/i18n/unicode/dcfmtsym.h
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File DCFMTSYM.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*   03/18/97    clhuang     Updated per C++ implementation.
-*   03/27/97    helena      Updated to pass the simple test after code review.
-*   08/26/97    aliu        Added currency/intl currency symbol support.
-*   07/22/98    stephen     Changed to match C++ style
-*                            currencySymbol -> fCurrencySymbol
-*                            Constants changed from CAPS to kCaps
-*   06/24/99    helena      Integrated Alan's NF enhancements and Java2 bug fixes
-*   09/22/00    grhoten     Marked deprecation tags with a pointer to replacement
-*                            functions.
-********************************************************************************
-*/
-
-#ifndef DCFMTSYM_H
-#define DCFMTSYM_H
-
-#include "unicode/utypes.h"
-#include "unicode/uchar.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-#include "unicode/locid.h"
-
-/**
- * \file
- * \brief C++ API: Symbols for formatting numbers.
- */
-
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class represents the set of symbols needed by DecimalFormat
- * to format numbers. DecimalFormat creates for itself an instance of
- * DecimalFormatSymbols from its locale data.  If you need to change any
- * of these symbols, you can get the DecimalFormatSymbols object from
- * your DecimalFormat and modify it.
- * <P>
- * Here are the special characters used in the parts of the
- * subpattern, with notes on their usage.
- * <pre>
- * \code
- *        Symbol   Meaning
- *          0      a digit
- *          #      a digit, zero shows as absent
- *          .      placeholder for decimal separator
- *          ,      placeholder for grouping separator.
- *          ;      separates formats.
- *          -      default negative prefix.
- *          %      divide by 100 and show as percentage
- *          X      any other characters can be used in the prefix or suffix
- *          '      used to quote special characters in a prefix or suffix.
- * \endcode
- *  </pre>
- * [Notes]
- * <P>
- * If there is no explicit negative subpattern, - is prefixed to the
- * positive form. That is, "0.00" alone is equivalent to "0.00;-0.00".
- * <P>
- * The grouping separator is commonly used for thousands, but in some
- * countries for ten-thousands. The interval is a constant number of
- * digits between the grouping characters, such as 100,000,000 or 1,0000,0000.
- * If you supply a pattern with multiple grouping characters, the interval
- * between the last one and the end of the integer is the one that is
- * used. So "#,##,###,####" == "######,####" == "##,####,####".
- * <P>
- * This class only handles localized digits where the 10 digits are
- * contiguous in Unicode, from 0 to 9. Other digits sets (such as
- * superscripts) would need a different subclass.
- */
-class U_I18N_API DecimalFormatSymbols : public UObject {
-public:
-    /**
-     * Constants for specifying a number format symbol.
-     * @stable ICU 2.0
-     */
-    enum ENumberFormatSymbol {
-        /** The decimal separator */
-        kDecimalSeparatorSymbol,
-        /** The grouping separator */
-        kGroupingSeparatorSymbol,
-        /** The pattern separator */
-        kPatternSeparatorSymbol,
-        /** The percent sign */
-        kPercentSymbol,
-        /** Zero*/
-        kZeroDigitSymbol,
-        /** Character representing a digit in the pattern */
-        kDigitSymbol,
-        /** The minus sign */
-        kMinusSignSymbol,
-        /** The plus sign */
-        kPlusSignSymbol,
-        /** The currency symbol */
-        kCurrencySymbol,
-        /** The international currency symbol */
-        kIntlCurrencySymbol,
-        /** The monetary separator */
-        kMonetarySeparatorSymbol,
-        /** The exponential symbol */
-        kExponentialSymbol,
-        /** Per mill symbol - replaces kPermillSymbol */
-        kPerMillSymbol,
-        /** Escape padding character */
-        kPadEscapeSymbol,
-        /** Infinity symbol */
-        kInfinitySymbol,
-        /** Nan symbol */
-        kNaNSymbol,
-        /** Significant digit symbol
-         * @stable ICU 3.0 */
-        kSignificantDigitSymbol,
-        /** The monetary grouping separator
-         * @stable ICU 3.6
-         */
-        kMonetaryGroupingSeparatorSymbol,
-        /** One
-         * @draft ICU 4.6
-         */
-        kOneDigitSymbol,
-        /** Two
-         * @draft ICU 4.6
-         */
-        kTwoDigitSymbol,
-        /** Three
-         * @draft ICU 4.6
-         */
-        kThreeDigitSymbol,
-        /** Four
-         * @draft ICU 4.6
-         */
-        kFourDigitSymbol,
-        /** Five
-         * @draft ICU 4.6
-         */
-        kFiveDigitSymbol,
-        /** Six
-         * @draft ICU 4.6
-         */
-        kSixDigitSymbol,
-        /** Seven
-         * @draft ICU 4.6
-         */
-        kSevenDigitSymbol,
-        /** Eight
-         * @draft ICU 4.6
-         */
-        kEightDigitSymbol,
-        /** Nine
-         * @draft ICU 4.6
-         */
-        kNineDigitSymbol,
-        /** count symbol constants */
-        kFormatSymbolCount
-    };
-
-    /**
-      * Constants for specifying currency spacing
-      * @draft ICU 4.2
-      */
-     enum ECurrencySpacing {
-       kCurrencyMatch,
-       kSurroundingMatch,
-       kInsert,
-       kCurrencySpacingCount
-     };
-
-    /**
-     * Create a DecimalFormatSymbols object for the given locale.
-     *
-     * @param locale    The locale to get symbols for.
-     * @param status    Input/output parameter, set to success or
-     *                  failure code upon return.
-     * @stable ICU 2.0
-     */
-    DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
-
-    /**
-     * Create a DecimalFormatSymbols object for the default locale.
-     * This constructor will not fail.  If the resource file data is
-     * not available, it will use hard-coded last-resort data and
-     * set status to U_USING_FALLBACK_ERROR.
-     *
-     * @param status    Input/output parameter, set to success or
-     *                  failure code upon return.
-     * @stable ICU 2.0
-     */
-    DecimalFormatSymbols( UErrorCode& status);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 2.0
-     */
-    DecimalFormatSymbols(const DecimalFormatSymbols&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 2.0
-     */
-    DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~DecimalFormatSymbols();
-
-    /**
-     * Return true if another object is semantically equal to this one.
-     *
-     * @param other    the object to be compared with.
-     * @return         true if another object is semantically equal to this one.
-     * @stable ICU 2.0
-     */
-    UBool operator==(const DecimalFormatSymbols& other) const;
-
-    /**
-     * Return true if another object is semantically unequal to this one.
-     *
-     * @param other    the object to be compared with.
-     * @return         true if another object is semantically unequal to this one.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
-
-    /**
-     * Get one of the format symbols by its enum constant.
-     * Each symbol is stored as a string so that graphemes
-     * (characters with modifier letters) can be used.
-     *
-     * @param symbol    Constant to indicate a number format symbol.
-     * @return    the format symbols by the param 'symbol'
-     * @stable ICU 2.0
-     */
-    inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
-
-    /**
-     * Set one of the format symbols by its enum constant.
-     * Each symbol is stored as a string so that graphemes
-     * (characters with modifier letters) can be used.
-     *
-     * @param symbol    Constant to indicate a number format symbol.
-     * @param value     value of the format symbol
-     * @param propogateDigits If false, setting the zero digit will not automatically set 1-9.
-     *     The default behavior is to automatically set 1-9 if zero is being set and the value
-     *     it is being set to corresponds to a known Unicode zero digit.
-     * @stable ICU 2.0
-     */
-    void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
-
-    /**
-     * Returns the locale for which this object was constructed.
-     * @stable ICU 2.6
-     */
-    inline Locale getLocale() const;
-
-    /**
-     * Returns the locale for this object. Two flavors are available:
-     * valid and actual locale.
-     * @stable ICU 2.8
-     */
-    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
-
-    /**
-      * Get pattern string for 'CurrencySpacing' that can be applied to
-      * currency format.
-      * This API gets the CurrencySpacing data from ResourceBundle. The pattern can
-      * be empty if there is no data from current locale and its parent locales.
-      *
-      * @param type :  kCurrencyMatch, kSurroundingMatch or kInsert.
-      * @param beforeCurrency : true if the pattern is for before currency symbol.
-      *                         false if the pattern is for after currency symbol.
-      * @param status: Input/output parameter, set to success or
-      *                  failure code upon return.
-      * @return pattern string for currencyMatch, surroundingMatch or spaceInsert.
-      *     Return empty string if there is no data for this locale and its parent
-      *     locales.
-      * @draft ICU 4.2
-      */
-     const UnicodeString& getPatternForCurrencySpacing(ECurrencySpacing type,
-                                                 UBool beforeCurrency,
-                                                 UErrorCode& status) const;
-     /**
-       * Set pattern string for 'CurrencySpacing' that can be applied to
-       * currency format.
-       *
-       * @param type : kCurrencyMatch, kSurroundingMatch or kInsert.
-       * @param beforeCurrency : true if the pattern is for before currency symbol.
-       *                         false if the pattern is for after currency symbol.
-       * @param pattern : pattern string to override current setting.
-       * @draft ICU 4.2
-       */
-     void setPatternForCurrencySpacing(ECurrencySpacing type,
-                                       UBool beforeCurrency,
-                                       const UnicodeString& pattern);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-    DecimalFormatSymbols(); // default constructor not implemented
-
-    /**
-     * Initializes the symbols from the LocaleElements resource bundle.
-     * Note: The organization of LocaleElements badly needs to be
-     * cleaned up.
-     *
-     * @param locale               The locale to get symbols for.
-     * @param success              Input/output parameter, set to success or
-     *                             failure code upon return.
-     * @param useLastResortData    determine if use last resort data
-     */
-    void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
-
-    /**
-     * Initialize the symbols with default values.
-     */
-    void initialize();
-
-    void setCurrencyForSymbols();
-
-public:
-    /**
-     * _Internal_ function - more efficient version of getSymbol,
-     * returning a const reference to one of the symbol strings.
-     * The returned reference becomes invalid when the symbol is changed
-     * or when the DecimalFormatSymbols are destroyed.
-     * ### TODO markus 2002oct11: Consider proposing getConstSymbol() to be really public.
-     *
-     * @param symbol Constant to indicate a number format symbol.
-     * @return the format symbol by the param 'symbol'
-     * @internal
-     */
-    inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
-
-    /**
-     * Returns that pattern stored in currecy info. Internal API for use by NumberFormat API.
-     * @internal
-     */
-    inline const UChar* getCurrencyPattern(void) const;
-
-private:
-    /**
-     * Private symbol strings.
-     * They are either loaded from a resource bundle or otherwise owned.
-     * setSymbol() clones the symbol string.
-     * Readonly aliases can only come from a resource bundle, so that we can always
-     * use fastCopyFrom() with them.
-     *
-     * If DecimalFormatSymbols becomes subclassable and the status of fSymbols changes
-     * from private to protected,
-     * or when fSymbols can be set any other way that allows them to be readonly aliases
-     * to non-resource bundle strings,
-     * then regular UnicodeString copies must be used instead of fastCopyFrom().
-     *
-     * @internal
-     */
-    UnicodeString fSymbols[kFormatSymbolCount];
-
-    /**
-     * Non-symbol variable for getConstSymbol(). Always empty.
-     * @internal
-     */
-    UnicodeString fNoSymbol;
-
-    Locale locale;
-
-    char actualLocale[ULOC_FULLNAME_CAPACITY];
-    char validLocale[ULOC_FULLNAME_CAPACITY];
-    const UChar* currPattern;
-
-    UnicodeString currencySpcBeforeSym[kCurrencySpacingCount];
-    UnicodeString currencySpcAfterSym[kCurrencySpacingCount];
-};
-
-// -------------------------------------
-
-inline UnicodeString
-DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
-    const UnicodeString *strPtr;
-    if(symbol < kFormatSymbolCount) {
-        strPtr = &fSymbols[symbol];
-    } else {
-        strPtr = &fNoSymbol;
-    }
-    return *strPtr;
-}
-
-inline const UnicodeString &
-DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
-    const UnicodeString *strPtr;
-    if(symbol < kFormatSymbolCount) {
-        strPtr = &fSymbols[symbol];
-    } else {
-        strPtr = &fNoSymbol;
-    }
-    return *strPtr;
-}
-
-// -------------------------------------
-
-inline void
-DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
-    if(symbol<kFormatSymbolCount) {
-        fSymbols[symbol]=value;
-    }
-
-    // If the zero digit is being set to a known zero digit according to Unicode,
-    // then we automatically set the corresponding 1-9 digits
-    if ( propogateDigits && symbol == kZeroDigitSymbol && value.countChar32() == 1 ) {
-        UChar32 sym = value.char32At(0);
-        if ( u_charDigitValue(sym) == 0 ) {
-            for ( int8_t i = 1 ; i<= 9 ; i++ ) {
-                sym++;
-                fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
-            }
-        }
-    }
-}
-
-// -------------------------------------
-
-inline Locale
-DecimalFormatSymbols::getLocale() const {
-    return locale;
-}
-
-inline const UChar*
-DecimalFormatSymbols::getCurrencyPattern() const {
-    return currPattern;
-}
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _DCFMTSYM
-//eof
diff --git a/source/i18n/unicode/decimfmt.h b/source/i18n/unicode/decimfmt.h
deleted file mode 100644
index 778bf22..0000000
--- a/source/i18n/unicode/decimfmt.h
+++ /dev/null
@@ -1,2310 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1997-2010, 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"
-#include "unicode/fpositer.h"
-#include "unicode/stringpiece.h"
-
-union UHashTok;
-
-U_NAMESPACE_BEGIN
-
-class DigitList;
-class ChoiceFormat;
-class CurrencyPluralInfo;
-class Hashtable;
-class FieldPositionHandler;
-
-/**
- * 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", "USD123",
- * "123 US dollars").  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>
- * Another example use createInstance(style)
- * <P>
- * <pre>
- * <strong>// Print out a number using the localized number, currency,
- * // percent, scientific, integer, iso currency, and plural currency
- * // format for each locale</strong>
- * Locale* locale = new Locale("en", "US");
- * double myNumber = 1234.56;
- * UErrorCode success = U_ZERO_ERROR;
- * UnicodeString str;
- * Formattable fmtable;
- * for (int j=NumberFormat::kNumberStyle;
- *      j<=NumberFormat::kPluralCurrencyStyle;
- *      ++j) {
- *     NumberFormat* format = NumberFormat::createInstance(locale, j, success);
- *     str.remove();
- *     cout << "format result " << form->format(myNumber, str) << endl;
- *     format->parse(form->format(myNumber, str), fmtable, success);
- * }</pre>
- *
- *
- * <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 tripled, replaced by currency plural names, for example,
- *         "US dollar" or "US dollars" for America.
- *         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>For currency parsing, the formatter is able to parse every currency
- * style formats no matter which style the formatter is constructed with.
- * For example, a formatter instance gotten from
- * NumberFormat.getInstance(ULocale, NumberFormat.CURRENCYSTYLE) can parse
- * formats such as "USD1.00" and "3.00 US dollars".
- *
- * <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 rounding is 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/or 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.
- *
- * <p>In the absense of an explicit rounding increment numbers are
- * rounded to their formatted width.
- *
- * <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.  The default rounding mode is
- * DecimalFormat::kRoundHalfEven.  The rounding mode can only be set
- * through the API; it can not be set with a pattern.
- *
- * <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);
-
-    /**
-     * This API is for ICU use only.
-     * Create a DecimalFormat from the given pattern, symbols, and style.
-     *
-     * @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 style             style of decimal format, kNumberStyle etc.
-     * @param status            Output param set to success/failure code. If the
-     *                          pattern is invalid this will be set to a failure code.
-     * @internal ICU 4.2
-     */
-    DecimalFormat(  const UnicodeString& pattern,
-                    DecimalFormatSymbols* symbolsToAdopt,
-                    NumberFormat::EStyles style,
-                    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;
-
-
-    using NumberFormat::format;
-
-    /**
-     * 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 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 posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(double number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) 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 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 posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(int32_t number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) 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 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 posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(int64_t number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-    /**
-     * Format a decimal number.
-     * The syntax of the unformatted number is a "numeric string"
-     * as defined in the Decimal Arithmetic Specification, available at
-     * http://speleotrove.com/decimal
-     *
-     * @param number    The unformatted number, as a string.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(const StringPiece &number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-
-    /**
-     * Format a decimal number. 
-     * The number is a DigitList wrapper onto a floating point decimal number.
-     * The default implementation in NumberFormat converts the decimal number
-     * to a double and formats that.
-     *
-     * @param number    The number, a DigitList format Decimal Floating Point.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @internal
-     */
-    virtual UnicodeString& format(const DigitList &number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-    /**
-     * Format a decimal number. 
-     * The number is a DigitList wrapper onto a floating point decimal number.
-     * The default implementation in NumberFormat converts the decimal number
-     * to a double and formats that.  
-     *
-     * @param number    The number, a DigitList format Decimal Floating Point.
-     * @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.
-     * @internal
-     */
-    virtual UnicodeString& format(const DigitList &number,
-                                  UnicodeString& appendTo,
-                                  FieldPosition& pos,
-                                  UErrorCode& status) 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);
-
-
-    /**
-     * Returns the currency plural format information,
-     * which is generally not changed by the programmer or user.
-     * @return desired CurrencyPluralInfo
-     * @stable ICU 4.2
-     */
-    virtual const CurrencyPluralInfo* getCurrencyPluralInfo(void) const;
-
-    /**
-     * Sets the currency plural format information,
-     * which is generally not changed by the programmer or user.
-     * @param toAdopt CurrencyPluralInfo to be adopted.
-     * @stable ICU 4.2
-     */
-    virtual void adoptCurrencyPluralInfo(CurrencyPluralInfo* toAdopt);
-
-    /**
-     * Sets the currency plural format information,
-     * which is generally not changed by the programmer or user.
-     * @param info Currency Plural Info.
-     * @stable ICU 4.2
-     */
-    virtual void setCurrencyPluralInfo(const CurrencyPluralInfo& info);
-
-
-    /**
-     * 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 a rounding
-     * increment is not in effect.
-     * @see #setRoundingIncrement
-     * @see #getRoundingMode
-     * @see #setRoundingMode
-     * @stable ICU 2.0
-     */
-    virtual double getRoundingIncrement(void) const;
-
-    /**
-     * Set the rounding increment.  In the absence of a rounding increment,
-     *    numbers will be rounded to the number of digits displayed.
-     * @param newValue A positive rounding increment.
-     * 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.  
-     * @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() const;
-
-    /**
-     *   Initialize all fields of a new DecimalFormatter.
-     *      Common code for use by constructors.
-     */
-    void init();
-
-    /**
-     * 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);
-
-    /*
-     * similar to applyPattern, but without re-gen affix for currency
-     */
-    void applyPatternInternally(const UnicodeString& pluralCount,
-                                const UnicodeString& pattern,
-                                UBool localized,
-                                UParseError& parseError,
-                                UErrorCode& status);
-
-    /*
-     * only apply pattern without expand affixes
-     */
-    void applyPatternWithoutExpandAffix(const UnicodeString& pattern,
-                                        UBool localized,
-                                        UParseError& parseError,
-                                        UErrorCode& status);
-
-
-    /*
-     * expand affixes (after apply patter) and re-compute fFormatWidth
-     */
-    void expandAffixAdjustWidth(const UnicodeString* pluralCount);
-
-
-    /**
-     * 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 handler        Records information about field positions.
-     * @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,
-                             FieldPositionHandler& handler,
-                             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,
-                   const UnicodeString* negPrefix,
-                   const UnicodeString* negSuffix,
-                   const UnicodeString* posPrefix,
-                   const UnicodeString* posSuffix,
-                   UBool currencyParsing,
-                   int8_t type,
-                   ParsePosition& parsePosition,
-                   DigitList& digits, UBool* status,
-                   UChar* currency) const;
-
-    // Mixed style parsing for currency.
-    // It parses against the current currency pattern
-    // using complex affix comparison
-    // parses against the currency plural patterns using complex affix comparison,
-    // and parses against the current pattern using simple affix comparison.
-    UBool parseForCurrency(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,
-                         const UnicodeString* affixPat,
-                         UBool currencyParsing,
-                         int8_t type,
-                         UChar* currency) const;
-
-    static int32_t compareSimpleAffix(const UnicodeString& affix,
-                                      const UnicodeString& input,
-                                      int32_t pos);
-
-    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,
-                                int8_t type,
-                                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);
-
-    /**
-     * 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,
-                        FieldPositionHandler& handler,
-                        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,
-                     FieldPositionHandler& handler,
-                     UBool doFormat,
-                     const UnicodeString* pluralCount) const;
-
-    void expandAffixes(const UnicodeString* pluralCount);
-
-    void addPadding(UnicodeString& appendTo,
-                    FieldPositionHandler& handler,
-                    int32_t prefixLen, int32_t suffixLen) const;
-
-    UBool isGroupingPosition(int32_t pos) const;
-
-    void setCurrencyForSymbols();
-
-    // similar to setCurrency without re-compute the affixes for currency.
-    // If currency changes, the affix pattern for currency is not changed,
-    // but the affix will be changed. So, affixes need to be
-    // re-computed in setCurrency(), but not in setCurrencyInternally().
-    virtual void setCurrencyInternally(const UChar* theCurrency, UErrorCode& ec);
-
-    // set up currency affix patterns for mix parsing.
-    // The patterns saved here are the affix patterns of default currency
-    // pattern and the unique affix patterns of the plural currency patterns.
-    // Those patterns are used by parseForCurrency().
-    void setupCurrencyAffixPatterns(UErrorCode& status);
-
-    // set up the currency affixes used in currency plural formatting.
-    // It sets up both fAffixesForCurrency for currency pattern if the current
-    // pattern contains 3 currency signs,
-    // and it sets up fPluralAffixesForCurrency for currency plural patterns.
-    void setupCurrencyAffixes(const UnicodeString& pattern,
-                              UBool setupForCurrentPattern,
-                              UBool setupForPluralPattern,
-                              UErrorCode& status);
-
-    // hashtable operations
-    Hashtable* initHashForAffixPattern(UErrorCode& status);
-    Hashtable* initHashForAffix(UErrorCode& status);
-
-    void deleteHashForAffixPattern();
-    void deleteHashForAffix(Hashtable*& table);
-
-    void copyHashForAffixPattern(const Hashtable* source,
-                                 Hashtable* target, UErrorCode& status);
-    void copyHashForAffix(const Hashtable* source,
-                          Hashtable* target, UErrorCode& status);
-
-    UnicodeString& _format(int64_t number,
-                           UnicodeString& appendTo,
-                           FieldPositionHandler& handler) const;
-    UnicodeString& _format(double number,
-                           UnicodeString& appendTo,
-                           FieldPositionHandler& handler) const;
-    UnicodeString& _format(const DigitList &number,
-                           UnicodeString& appendTo,
-                           FieldPositionHandler& handler,
-                           UErrorCode &status) const;
-
-    // currency sign count
-    enum {
-        fgCurrencySignCountZero,
-        fgCurrencySignCountInSymbolFormat,
-        fgCurrencySignCountInISOFormat,
-        fgCurrencySignCountInPluralFormat
-    } CurrencySignCount;
-
-    /**
-     * Constants.
-     */
-
-    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;
-
-    DigitList *             fMultiplier;   // NULL for multiplier of one
-    int32_t                 fGroupingSize;
-    int32_t                 fGroupingSize2;
-    UBool                   fDecimalSeparatorAlwaysShown;
-    DecimalFormatSymbols*   fSymbols;
-
-    UBool                   fUseSignificantDigits;
-    int32_t                 fMinSignificantDigits;
-    int32_t                 fMaxSignificantDigits;
-
-    UBool                   fUseExponentialNotation;
-    int8_t                  fMinExponentDigits;
-    UBool                   fExponentSignAlwaysShown;
-
-    DigitList*              fRoundingIncrement;  // NULL if no rounding increment specified.
-    ERoundingMode           fRoundingMode;
-
-    UChar32                 fPad;
-    int32_t                 fFormatWidth;
-    EPadPosition            fPadPosition;
-
-    /*
-     * Following are used for currency format
-     */
-    // pattern used in this formatter
-    UnicodeString fFormatPattern;
-    // style is only valid when decimal formatter is constructed by
-    // DecimalFormat(pattern, decimalFormatSymbol, style)
-    int fStyle;
-    /*
-     * Represents whether this is a currency format, and which
-     * currency format style.
-     * 0: not currency format type;
-     * 1: currency style -- symbol name, such as "$" for US dollar.
-     * 2: currency style -- ISO name, such as USD for US dollar.
-     * 3: currency style -- plural long name, such as "US Dollar" for
-     *                      "1.00 US Dollar", or "US Dollars" for
-     *                      "3.00 US Dollars".
-     */
-    int fCurrencySignCount;
-
-
-    /* For currency parsing purose,
-     * Need to remember all prefix patterns and suffix patterns of
-     * every currency format pattern,
-     * including the pattern of default currecny style
-     * and plural currency style. And the patterns are set through applyPattern.
-     */
-    // TODO: innerclass?
-	/* This is not needed in the class declaration, so it is moved into decimfmp.cpp
-    struct AffixPatternsForCurrency : public UMemory {
-        // negative prefix pattern
-        UnicodeString negPrefixPatternForCurrency;
-        // negative suffix pattern
-        UnicodeString negSuffixPatternForCurrency;
-        // positive prefix pattern
-        UnicodeString posPrefixPatternForCurrency;
-        // positive suffix pattern
-        UnicodeString posSuffixPatternForCurrency;
-        int8_t patternType;
-
-        AffixPatternsForCurrency(const UnicodeString& negPrefix,
-                                 const UnicodeString& negSuffix,
-                                 const UnicodeString& posPrefix,
-                                 const UnicodeString& posSuffix,
-                                 int8_t type) {
-            negPrefixPatternForCurrency = negPrefix;
-            negSuffixPatternForCurrency = negSuffix;
-            posPrefixPatternForCurrency = posPrefix;
-            posSuffixPatternForCurrency = posSuffix;
-            patternType = type;
-        }
-    };
-    */
-
-    /* affix for currency formatting when the currency sign in the pattern
-     * equals to 3, such as the pattern contains 3 currency sign or
-     * the formatter style is currency plural format style.
-     */
-	/* This is not needed in the class declaration, so it is moved into decimfmp.cpp
-    struct AffixesForCurrency : public UMemory {
-        // negative prefix
-        UnicodeString negPrefixForCurrency;
-        // negative suffix
-        UnicodeString negSuffixForCurrency;
-        // positive prefix
-        UnicodeString posPrefixForCurrency;
-        // positive suffix
-        UnicodeString posSuffixForCurrency;
-
-        int32_t formatWidth;
-
-        AffixesForCurrency(const UnicodeString& negPrefix,
-                           const UnicodeString& negSuffix,
-                           const UnicodeString& posPrefix,
-                           const UnicodeString& posSuffix) {
-            negPrefixForCurrency = negPrefix;
-            negSuffixForCurrency = negSuffix;
-            posPrefixForCurrency = posPrefix;
-            posSuffixForCurrency = posSuffix;
-        }
-    };
-    */
-
-    // Affix pattern set for currency.
-    // It is a set of AffixPatternsForCurrency,
-    // each element of the set saves the negative prefix pattern,
-    // negative suffix pattern, positive prefix pattern,
-    // and positive suffix  pattern of a pattern.
-    // It is used for currency mixed style parsing.
-    // It is actually is a set.
-    // The set contains the default currency pattern from the locale,
-    // and the currency plural patterns.
-    // Since it is a set, it does not contain duplicated items.
-    // For example, if 2 currency plural patterns are the same, only one pattern
-    // is included in the set. When parsing, we do not check whether the plural
-    // count match or not.
-    Hashtable* fAffixPatternsForCurrency;
-
-    // Following 2 are affixes for currency.
-    // It is a hash map from plural count to AffixesForCurrency.
-    // AffixesForCurrency saves the negative prefix,
-    // negative suffix, positive prefix, and positive suffix of a pattern.
-    // It is used during currency formatting only when the currency sign count
-    // is 3. In which case, the affixes are getting from here, not
-    // from the fNegativePrefix etc.
-    Hashtable* fAffixesForCurrency;  // for current pattern
-    Hashtable* fPluralAffixesForCurrency;  // for plural pattern
-
-    // Information needed for DecimalFormat to format/parse currency plural.
-    CurrencyPluralInfo* fCurrencyPluralInfo;
-
-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
diff --git a/source/i18n/unicode/dtfmtsym.h b/source/i18n/unicode/dtfmtsym.h
deleted file mode 100644
index d858ba9..0000000
--- a/source/i18n/unicode/dtfmtsym.h
+++ /dev/null
@@ -1,755 +0,0 @@
-/*  
-********************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File DTFMTSYM.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*    07/21/98    stephen        Added getZoneIndex()
-*                            Changed to match C++ conventions
-********************************************************************************
-*/
-     
-#ifndef DTFMTSYM_H
-#define DTFMTSYM_H
- 
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/calendar.h"
-#include "unicode/uobject.h"
-#include "unicode/locid.h"
-#include "unicode/ures.h"
-
-/**
- * \file 
- * \brief C++ API: Symbols for formatting dates.
- */
-
-U_NAMESPACE_BEGIN
-
-/* forward declaration */
-class SimpleDateFormat;
-class Hashtable;
-class ZoneStringFormat;
-class SafeZoneStringFormatPtr;
-
-/**
- * DateFormatSymbols is a public class for encapsulating localizable date-time
- * formatting data -- including timezone data. DateFormatSymbols is used by
- * DateFormat and SimpleDateFormat.
- * <P>
- * Rather than first creating a DateFormatSymbols to get a date-time formatter
- * by using a SimpleDateFormat constructor, clients are encouraged to create a
- * date-time formatter using the getTimeInstance(), getDateInstance(), or
- * getDateTimeInstance() method in DateFormat. Each of these methods can return a
- * date/time formatter initialized with a default format pattern along with the
- * date-time formatting data for a given or default locale. After a formatter is
- * created, clients may modify the format pattern using the setPattern function
- * as so desired. For more information on using these formatter factory
- * functions, see DateFormat.
- * <P>
- * If clients decide to create a date-time formatter with a particular format
- * pattern and locale, they can do so with new SimpleDateFormat(aPattern,
- * new DateFormatSymbols(aLocale)).  This will load the appropriate date-time
- * formatting data from the locale.
- * <P>
- * DateFormatSymbols objects are clonable. When clients obtain a
- * DateFormatSymbols object, they can feel free to modify the date-time
- * formatting data as necessary. For instance, clients can
- * replace the localized date-time format pattern characters with the ones that
- * they feel easy to remember. Or they can change the representative cities
- * originally picked by default to using their favorite ones.
- * <P>
- * DateFormatSymbols are not expected to be subclassed. Data for a calendar is
- * loaded out of resource bundles.  The 'type' parameter indicates the type of
- * calendar, for example, "gregorian" or "japanese".  If the type is not gregorian
- * (or NULL, or an empty string) then the type is appended to the resource name,
- * for example,  'Eras_japanese' instead of 'Eras'.   If the resource 'Eras_japanese' did
- * not exist (even in root), then this class will fall back to just 'Eras', that is,
- * Gregorian data.  Therefore, the calendar implementor MUST ensure that the root
- * locale at least contains any resources that are to be particularized for the
- * calendar type.
- */
-class U_I18N_API DateFormatSymbols : public UObject {
-public:
-    /**
-     * Construct a DateFormatSymbols object by loading format data from
-     * resources for the default locale, in the default calendar (Gregorian).
-     * <P>
-     * NOTE: This constructor will never fail; if it cannot get resource
-     * data for the default locale, it will return a last-resort object
-     * based on hard-coded strings.
-     *
-     * @param status    Status code.  Failure
-     *                  results if the resources for the default cannot be
-     *                  found or cannot be loaded
-     * @stable ICU 2.0
-     */
-    DateFormatSymbols(UErrorCode& status);
-
-    /**
-     * Construct a DateFormatSymbols object by loading format data from
-     * resources for the given locale, in the default calendar (Gregorian).
-     *
-     * @param locale    Locale to load format data from.
-     * @param status    Status code.  Failure
-     *                  results if the resources for the locale cannot be
-     *                  found or cannot be loaded
-     * @stable ICU 2.0
-     */
-    DateFormatSymbols(const Locale& locale,
-                      UErrorCode& status);
-
-    /**
-     * Construct a DateFormatSymbols object by loading format data from
-     * resources for the default locale, in the default calendar (Gregorian).
-     * <P>
-     * NOTE: This constructor will never fail; if it cannot get resource
-     * data for the default locale, it will return a last-resort object
-     * based on hard-coded strings.
-     *
-     * @param type      Type of calendar (as returned by Calendar::getType). 
-     *                  Will be used to access the correct set of strings.
-     *                  (NULL or empty string defaults to "gregorian".)
-     * @param status    Status code.  Failure
-     *                  results if the resources for the default cannot be
-     *                  found or cannot be loaded
-     * @internal
-     */
-    DateFormatSymbols(const char *type, UErrorCode& status);
-
-    /**
-     * Construct a DateFormatSymbols object by loading format data from
-     * resources for the given locale, in the default calendar (Gregorian).
-     *
-     * @param locale    Locale to load format data from.
-     * @param type      Type of calendar (as returned by Calendar::getType). 
-     *                  Will be used to access the correct set of strings.
-     *                  (NULL or empty string defaults to "gregorian".)
-     * @param status    Status code.  Failure
-     *                  results if the resources for the locale cannot be
-     *                  found or cannot be loaded
-     * @internal
-     */
-    DateFormatSymbols(const Locale& locale,
-                      const char *type,
-                      UErrorCode& status);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 2.0
-     */
-    DateFormatSymbols(const DateFormatSymbols&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 2.0
-     */
-    DateFormatSymbols& operator=(const DateFormatSymbols&);
-
-    /**
-     * Destructor. This is nonvirtual because this class is not designed to be
-     * subclassed.
-     * @stable ICU 2.0
-     */
-    virtual ~DateFormatSymbols();
-
-    /**
-     * Return true if another object is semantically equal to this one.
-     *
-     * @param other    the DateFormatSymbols object to be compared with.
-     * @return         true if other is semantically equal to this.
-     * @stable ICU 2.0
-     */
-    UBool operator==(const DateFormatSymbols& other) const;
-
-    /**
-     * Return true if another object is semantically unequal to this one.
-     *
-     * @param other    the DateFormatSymbols object to be compared with.
-     * @return         true if other is semantically unequal to this.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
-
-    /**
-     * Gets abbreviated era strings. For example: "AD" and "BC".
-     *
-     * @param count    Filled in with length of the array.
-     * @return         the era strings.
-     * @stable ICU 2.0
-     */
-    const UnicodeString* getEras(int32_t& count) const;
-
-    /**
-     * Sets abbreviated era strings. For example: "AD" and "BC".
-     * @param eras  Array of era strings (DateFormatSymbols retains ownership.)
-     * @param count Filled in with length of the array.
-     * @stable ICU 2.0
-     */
-    void setEras(const UnicodeString* eras, int32_t count);
-
-    /**
-     * Gets era name strings. For example: "Anno Domini" and "Before Christ".
-     *
-     * @param count    Filled in with length of the array.
-     * @return         the era name strings.
-     * @stable ICU 3.4
-     */
-    const UnicodeString* getEraNames(int32_t& count) const;
-
-    /**
-     * Sets era name strings. For example: "Anno Domini" and "Before Christ".
-     * @param eraNames  Array of era name strings (DateFormatSymbols retains ownership.)
-     * @param count Filled in with length of the array.
-     * @stable ICU 3.6
-     */
-    void setEraNames(const UnicodeString* eraNames, int32_t count);
-
-    /**
-     * Gets narrow era strings. For example: "A" and "B".
-     *
-     * @param count    Filled in with length of the array.
-     * @return         the narrow era strings.
-     * @stable ICU 4.2
-     */
-    const UnicodeString* getNarrowEras(int32_t& count) const;
-
-    /**
-     * Sets narrow era strings. For example: "A" and "B".
-     * @param narrowEras  Array of narrow era strings (DateFormatSymbols retains ownership.)
-     * @param count Filled in with length of the array.
-     * @stable ICU 4.2
-     */
-    void setNarrowEras(const UnicodeString* narrowEras, int32_t count);
-
-    /**
-     * Gets month strings. For example: "January", "February", etc.
-     * @param count Filled in with length of the array.
-     * @return the month strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 2.0
-     */
-    const UnicodeString* getMonths(int32_t& count) const;
-
-    /**
-     * Sets month strings. For example: "January", "February", etc.
-     *
-     * @param months    the new month strings. (not adopted; caller retains ownership)
-     * @param count     Filled in with length of the array.
-     * @stable ICU 2.0
-     */
-    void setMonths(const UnicodeString* months, int32_t count);
-
-    /**
-     * Gets short month strings. For example: "Jan", "Feb", etc.
-     *
-     * @param count Filled in with length of the array.
-     * @return the short month strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 2.0
-     */
-    const UnicodeString* getShortMonths(int32_t& count) const;
-
-    /**
-     * Sets short month strings. For example: "Jan", "Feb", etc.
-     * @param count        Filled in with length of the array.
-     * @param shortMonths  the new short month strings. (not adopted; caller retains ownership)
-     * @stable ICU 2.0
-     */
-    void setShortMonths(const UnicodeString* shortMonths, int32_t count);
-
-    /**
-     * Selector for date formatting context
-     * @stable ICU 3.6
-     */
-    enum DtContextType {
-         FORMAT,
-         STANDALONE,
-         DT_CONTEXT_COUNT
-    };
-
-    /**
-     * Selector for date formatting width
-     * @stable ICU 3.6
-     */
-    enum DtWidthType {
-         ABBREVIATED,
-         WIDE,
-         NARROW,
-         DT_WIDTH_COUNT
-    };
-
-    /**
-     * Gets month strings by width and context. For example: "January", "February", etc.
-     * @param count Filled in with length of the array.
-     * @param context The formatting context, either FORMAT or STANDALONE
-     * @param width   The width of returned strings, either WIDE, ABBREVIATED, or NARROW.
-     * @return the month strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 3.4
-     */
-    const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
-
-    /**
-     * Sets month strings by width and context. For example: "January", "February", etc.
-     *
-     * @param months  The new month strings. (not adopted; caller retains ownership)
-     * @param count   Filled in with length of the array.
-     * @param context The formatting context, either FORMAT or STANDALONE
-     * @param width   The width of returned strings, either WIDE, ABBREVIATED, or NARROW.
-     * @stable ICU 3.6
-     */
-    void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
-
-    /**
-     * Gets weekday strings. For example: "Sunday", "Monday", etc.
-     * @param count        Filled in with length of the array.
-     * @return the weekday strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 2.0
-     */
-    const UnicodeString* getWeekdays(int32_t& count) const;
-
-
-    /**
-     * Sets weekday strings. For example: "Sunday", "Monday", etc.
-     * @param weekdays     the new weekday strings. (not adopted; caller retains ownership)
-     * @param count        Filled in with length of the array.
-     * @stable ICU 2.0
-     */
-    void setWeekdays(const UnicodeString* weekdays, int32_t count);
-
-    /**
-     * Gets short weekday strings. For example: "Sun", "Mon", etc.
-     * @param count        Filled in with length of the array.
-     * @return             the short weekday strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 2.0
-     */
-    const UnicodeString* getShortWeekdays(int32_t& count) const;
-
-    /**
-     * Sets short weekday strings. For example: "Sun", "Mon", etc.
-     * @param shortWeekdays  the new short weekday strings. (not adopted; caller retains ownership)
-     * @param count          Filled in with length of the array.
-     * @stable ICU 2.0
-     */
-    void setShortWeekdays(const UnicodeString* shortWeekdays, int32_t count);
-
-    /**
-     * Gets weekday strings by width and context. For example: "Sunday", "Monday", etc.
-     * @param count   Filled in with length of the array.
-     * @param context The formatting context, either FORMAT or STANDALONE
-     * @param width   The width of returned strings, either WIDE, ABBREVIATED, or NARROW
-     * @return the month strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 3.4
-     */
-    const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
-
-    /**
-     * Sets weekday strings by width and context. For example: "Sunday", "Monday", etc.
-     * @param weekdays  The new weekday strings. (not adopted; caller retains ownership)
-     * @param count     Filled in with length of the array.
-     * @param context   The formatting context, either FORMAT or STANDALONE
-     * @param width     The width of returned strings, either WIDE, ABBREVIATED, or NARROW
-     * @stable ICU 3.6
-     */
-    void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
-
-    /**
-     * Gets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc.
-     * @param count Filled in with length of the array.
-     * @param context The formatting context, either FORMAT or STANDALONE
-     * @param width   The width of returned strings, either WIDE or ABBREVIATED. There
-     *                are no NARROW quarters.
-     * @return the quarter strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 3.6
-     */
-    const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
-
-    /**
-     * Sets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc.
-     *
-     * @param quarters  The new quarter strings. (not adopted; caller retains ownership)
-     * @param count   Filled in with length of the array.
-     * @param context The formatting context, either FORMAT or STANDALONE
-     * @param width   The width of returned strings, either WIDE or ABBREVIATED. There
-     *                are no NARROW quarters.
-     * @stable ICU 3.6
-     */
-    void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
-
-    /**
-     * Gets AM/PM strings. For example: "AM" and "PM".
-     * @param count        Filled in with length of the array.
-     * @return             the weekday strings. (DateFormatSymbols retains ownership.)
-     * @stable ICU 2.0
-     */
-    const UnicodeString* getAmPmStrings(int32_t& count) const;
-
-    /**
-     * Sets ampm strings. For example: "AM" and "PM".
-     * @param ampms        the new ampm strings. (not adopted; caller retains ownership)
-     * @param count        Filled in with length of the array.
-     * @stable ICU 2.0
-     */
-    void setAmPmStrings(const UnicodeString* ampms, int32_t count);
-
-    /**
-     * Gets timezone strings. These strings are stored in a 2-dimensional array.
-     * @param rowCount      Output param to receive number of rows.
-     * @param columnCount   Output param to receive number of columns.
-     * @return              The timezone strings as a 2-d array. (DateFormatSymbols retains ownership.)
-     * @deprecated ICU 3.6
-     */
-    const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
-
-    /**
-     * Sets timezone strings. These strings are stored in a 2-dimensional array.
-     * @param strings       The timezone strings as a 2-d array to be copied. (not adopted; caller retains ownership)
-     * @param rowCount      The number of rows (count of first index).
-     * @param columnCount   The number of columns (count of second index).
-     * @stable ICU 2.0
-     */
-    void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
-
-    /**
-     * Get the non-localized date-time pattern characters.
-     * @return    the non-localized date-time pattern characters
-     * @stable ICU 2.0
-     */
-    static const UChar * U_EXPORT2 getPatternUChars(void);
-
-    /**
-     * Gets localized date-time pattern characters. For example: 'u', 't', etc.
-     * <p>
-     * Note: ICU no longer provides localized date-time pattern characters for a locale
-     * starting ICU 3.8.  This method returns the non-localized date-time pattern
-     * characters unless user defined localized data is set by setLocalPatternChars.
-     * @param result    Output param which will receive the localized date-time pattern characters.
-     * @return          A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    UnicodeString& getLocalPatternChars(UnicodeString& result) const;
-
-    /**
-     * Sets localized date-time pattern characters. For example: 'u', 't', etc.
-     * @param newLocalPatternChars the new localized date-time
-     * pattern characters.
-     * @stable ICU 2.0
-     */
-    void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
-
-    /**
-     * Returns the locale for this object. Two flavors are available:
-     * valid and actual locale.
-     * @stable ICU 2.8
-     */
-    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-
-    friend class SimpleDateFormat;
-    friend class DateFormatSymbolsSingleSetter; // see udat.cpp
-
-    /**
-     * Abbreviated era strings. For example: "AD" and "BC".
-     */
-    UnicodeString*  fEras;
-    int32_t         fErasCount;
-
-    /**
-     * Era name strings. For example: "Anno Domini" and "Before Christ".
-     */
-    UnicodeString*  fEraNames;
-    int32_t         fEraNamesCount;
-
-    /**
-     * Narrow era strings. For example: "A" and "B".
-     */
-    UnicodeString*  fNarrowEras;
-    int32_t         fNarrowErasCount;
-
-    /**
-     * Month strings. For example: "January", "February", etc.
-     */
-    UnicodeString*  fMonths;
-    int32_t         fMonthsCount;
-
-    /**
-     * Short month strings. For example: "Jan", "Feb", etc.
-     */
-    UnicodeString*  fShortMonths;
-    int32_t         fShortMonthsCount;
-
-    /**
-     * Narrow month strings. For example: "J", "F", etc.
-     */
-    UnicodeString*  fNarrowMonths;
-    int32_t         fNarrowMonthsCount;
-
-    /**
-     * Standalone Month strings. For example: "January", "February", etc.
-     */
-    UnicodeString*  fStandaloneMonths;
-    int32_t         fStandaloneMonthsCount;
-
-    /**
-     * Standalone Short month strings. For example: "Jan", "Feb", etc.
-     */
-    UnicodeString*  fStandaloneShortMonths;
-    int32_t         fStandaloneShortMonthsCount;
-
-    /**
-     * Standalone Narrow month strings. For example: "J", "F", etc.
-     */
-    UnicodeString*  fStandaloneNarrowMonths;
-    int32_t         fStandaloneNarrowMonthsCount;
-
-    /**
-     * Weekday strings. For example: "Sunday", "Monday", etc.
-     */
-    UnicodeString*  fWeekdays;
-    int32_t         fWeekdaysCount;
-
-    /**
-     * Short weekday strings. For example: "Sun", "Mon", etc.
-     */
-    UnicodeString*  fShortWeekdays;
-    int32_t         fShortWeekdaysCount;
-
-    /**
-     * Narrow weekday strings. For example: "Sun", "Mon", etc.
-     */
-    UnicodeString*  fNarrowWeekdays;
-    int32_t         fNarrowWeekdaysCount;
-
-    /**
-     * Standalone Weekday strings. For example: "Sunday", "Monday", etc.
-     */
-    UnicodeString*  fStandaloneWeekdays;
-    int32_t         fStandaloneWeekdaysCount;
-
-    /**
-     * Standalone Short weekday strings. For example: "Sun", "Mon", etc.
-     */
-    UnicodeString*  fStandaloneShortWeekdays;
-    int32_t         fStandaloneShortWeekdaysCount;
-
-    /**
-     * Standalone Narrow weekday strings. For example: "Sun", "Mon", etc.
-     */
-    UnicodeString*  fStandaloneNarrowWeekdays;
-    int32_t         fStandaloneNarrowWeekdaysCount;
-
-    /**
-     * Ampm strings. For example: "AM" and "PM".
-     */
-    UnicodeString*  fAmPms;
-    int32_t         fAmPmsCount;
-
-    /**
-     * Quarter strings. For example: "1st quarter", "2nd quarter", etc.
-     */
-    UnicodeString  *fQuarters;
-    int32_t         fQuartersCount;
-
-    /**
-     * Short quarters. For example: "Q1", "Q2", etc.
-     */
-    UnicodeString  *fShortQuarters;
-    int32_t         fShortQuartersCount;
-
-    /**
-     * Standalone quarter strings. For example: "1st quarter", "2nd quarter", etc.
-     */
-    UnicodeString  *fStandaloneQuarters;
-    int32_t         fStandaloneQuartersCount;
-
-    /**
-     * Standalone short quarter strings. For example: "Q1", "Q2", etc.
-     */
-    UnicodeString  *fStandaloneShortQuarters;
-    int32_t         fStandaloneShortQuartersCount;
-
-    /**
-     * Localized names of time zones in this locale.  This is a
-     * two-dimensional array of strings of size n by m,
-     * where m is at least 5 and up to 7.  Each of the n rows is an
-     * entry containing the localized names for a single TimeZone.
-     *
-     * Each such row contains (with i ranging from 0..n-1):
-     * 
-     * zoneStrings[i][0] - time zone ID
-     *  example: America/Los_Angeles
-     * zoneStrings[i][1] - long name of zone in standard time
-     *  example: Pacific Standard Time
-     * zoneStrings[i][2] - short name of zone in standard time
-     *  example: PST
-     * zoneStrings[i][3] - long name of zone in daylight savings time
-     *  example: Pacific Daylight Time
-     * zoneStrings[i][4] - short name of zone in daylight savings time
-     *  example: PDT
-     * zoneStrings[i][5] - location name of zone
-     *  example: United States (Los Angeles)
-     * zoneStrings[i][6] - long generic name of zone
-     *  example: Pacific Time
-     * zoneStrings[i][7] - short generic of zone
-     *  example: PT
-     *
-     * The zone ID is not localized; it corresponds to the ID
-     * value associated with a system time zone object.  All other entries
-     * are localized names.  If a zone does not implement daylight savings
-     * time, the daylight savings time names are ignored.
-     *
-     * Note:CLDR 1.5 introduced metazone and its historical mappings.
-     * This simple two-dimensional array is no longer sufficient to represent
-     * localized names and its historic changes.  Since ICU 3.8.1, localized
-     * zone names extracted from ICU locale data is stored in a ZoneStringFormat
-     * instance.  But we still need to support the old way of customizing
-     * localized zone names, so we keep this field for the purpose.
-     */
-    UnicodeString   **fZoneStrings;         // Zone string array set by setZoneStrings
-    UnicodeString   **fLocaleZoneStrings;   // Zone string array created by the locale
-    int32_t         fZoneStringsRowCount;
-    int32_t         fZoneStringsColCount;
-
-    const ZoneStringFormat  *fZoneStringFormat;
-    ZoneStringFormat        *fZSFLocal;         // Local ZoneStringFormat instance
-    SafeZoneStringFormatPtr *fZSFCachePtr;      // Cached ZoneStringFormat
-    Locale                  fZSFLocale;         // Locale used for getting ZoneStringFormat
-
-    /**
-     * Pattern string used for localized time zone GMT format.  For example, "GMT{0}"
-     */
-    UnicodeString   fGmtFormat;
-
-    /**
-     * Pattern strings used for formatting zone offset in a localized time zone GMT string.
-     */
-    UnicodeString  *fGmtHourFormats;
-    int32_t         fGmtHourFormatsCount; 
-
-    enum GMTHourType {
-        GMT_NEGATIVE_HMS = 0,
-        GMT_NEGATIVE_HM,
-        GMT_POSITIVE_HMS,
-        GMT_POSITIVE_HM,
-        GMT_HOUR_COUNT
-    };
-
-    /**
-     * Localized date-time pattern characters. For example: use 'u' as 'y'.
-     */
-    UnicodeString   fLocalPatternChars;
-
-private:
-    /** valid/actual locale information 
-     *  these are always ICU locales, so the length should not be a problem
-     */
-    char validLocale[ULOC_FULLNAME_CAPACITY];
-    char actualLocale[ULOC_FULLNAME_CAPACITY];
-
-    DateFormatSymbols(); // default constructor not implemented
-
-    /**
-     * Called by the constructors to actually load data from the resources
-     *
-     * @param locale               The locale to get symbols for.
-     * @param type                 Calendar Type (as from Calendar::getType())
-     * @param status               Input/output parameter, set to success or
-     *                             failure code upon return.
-     * @param useLastResortData    determine if use last resort data
-     */
-    void initializeData(const Locale&, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
-
-    /**
-     * Copy or alias an array in another object, as appropriate.
-     *
-     * @param dstArray    the copy destination array.
-     * @param dstCount    fill in with the lenth of 'dstArray'.
-     * @param srcArray    the source array to be copied.
-     * @param srcCount    the length of items to be copied from the 'srcArray'.
-     */
-    static void assignArray(UnicodeString*& dstArray,
-                            int32_t& dstCount,
-                            const UnicodeString* srcArray,
-                            int32_t srcCount);
-
-    /**
-     * Return true if the given arrays' contents are equal, or if the arrays are
-     * identical (pointers are equal).
-     *
-     * @param array1   one array to be compared with.
-     * @param array2   another array to be compared with.
-     * @param count    the length of items to be copied.
-     * @return         true if the given arrays' contents are equal, or if the arrays are
-     *                 identical (pointers are equal).
-     */
-    static UBool arrayCompare(const UnicodeString* array1,
-                             const UnicodeString* array2,
-                             int32_t count);
-
-    /**
-     * Create a copy, in fZoneStrings, of the given zone strings array. The
-     * member variables fZoneStringsRowCount and fZoneStringsColCount should be
-     * set already by the caller.
-     */
-    void createZoneStrings(const UnicodeString *const * otherStrings);
-
-    /**
-     * Delete all the storage owned by this object.
-     */
-    void dispose(void);
-
-    /**
-     * Copy all of the other's data to this.
-     * @param other the object to be copied.
-     */
-    void copyData(const DateFormatSymbols& other);
-
-
-    /**
-     * Returns a ZoneStringFormat, used only by SimpleDateFormat for now.
-     */
-    const ZoneStringFormat* getZoneStringFormat(void) const;
-
-    /**
-     * Create a ZoneStringFormat by locale if not yet availble
-     */
-    void initZoneStringFormat(void);
-
-    /**
-     * Create zone strings array by locale if not yet available
-     */
-    void initZoneStringsArray(void);
-
-    /**
-     * Delete just the zone strings.
-     */
-    void disposeZoneStrings(void);
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _DTFMTSYM
-//eof
diff --git a/source/i18n/unicode/dtitvfmt.h b/source/i18n/unicode/dtitvfmt.h
deleted file mode 100644
index 750454f..0000000
--- a/source/i18n/unicode/dtitvfmt.h
+++ /dev/null
@@ -1,970 +0,0 @@
-/********************************************************************************
-* Copyright (C) 2008-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-* File DTITVFMT.H
-*
-*******************************************************************************
-*/
-
-#ifndef __DTITVFMT_H__
-#define __DTITVFMT_H__
-
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Format and parse date interval in a language-independent manner.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/ucal.h"
-#include "unicode/smpdtfmt.h"
-#include "unicode/dtintrv.h"
-#include "unicode/dtitvinf.h"
-#include "unicode/dtptngen.h"
-
-U_NAMESPACE_BEGIN
-
-
-
-/**
- * DateIntervalFormat is a class for formatting and parsing date
- * intervals in a language-independent manner.
- * Only formatting is supported, parsing is not supported.
- *
- * <P>
- * Date interval means from one date to another date,
- * for example, from "Jan 11, 2008" to "Jan 18, 2008".
- * We introduced class DateInterval to represent it.
- * DateInterval is a pair of UDate, which is
- * the standard milliseconds since 24:00 GMT, Jan 1, 1970.
- *
- * <P>
- * DateIntervalFormat formats a DateInterval into
- * text as compactly as possible.
- * For example, the date interval format from "Jan 11, 2008" to "Jan 18,. 2008"
- * is "Jan 11-18, 2008" for English.
- * And it parses text into DateInterval,
- * although initially, parsing is not supported.
- *
- * <P>
- * There is no structural information in date time patterns.
- * For any punctuations and string literals inside a date time pattern,
- * we do not know whether it is just a separator, or a prefix, or a suffix.
- * Without such information, so, it is difficult to generate a sub-pattern
- * (or super-pattern) by algorithm.
- * So, formatting a DateInterval is pattern-driven. It is very
- * similar to formatting in SimpleDateFormat.
- * We introduce class DateIntervalInfo to save date interval
- * patterns, similar to date time pattern in SimpleDateFormat.
- *
- * <P>
- * Logically, the interval patterns are mappings
- * from (skeleton, the_largest_different_calendar_field)
- * to (date_interval_pattern).
- *
- * <P>
- * A skeleton
- * <ol>
- * <li>
- * only keeps the field pattern letter and ignores all other parts
- * in a pattern, such as space, punctuations, and string literals.
- * </li>
- * <li>
- * hides the order of fields.
- * </li>
- * <li>
- * might hide a field's pattern letter length.
- * </li>
- * </ol>
- *
- * For those non-digit calendar fields, the pattern letter length is
- * important, such as MMM, MMMM, and MMMMM; EEE and EEEE,
- * and the field's pattern letter length is honored.
- *
- * For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy,
- * the field pattern length is ignored and the best match, which is defined
- * in date time patterns, will be returned without honor the field pattern
- * letter length in skeleton.
- *
- * <P>
- * The calendar fields we support for interval formatting are:
- * year, month, date, day-of-week, am-pm, hour, hour-of-day, and minute.
- * Those calendar fields can be defined in the following order:
- * year >  month > date > hour (in day) >  minute
- *
- * The largest different calendar fields between 2 calendars is the
- * first different calendar field in above order.
- *
- * For example: the largest different calendar fields between "Jan 10, 2007"
- * and "Feb 20, 2008" is year.
- *
- * <P>
- * For other calendar fields, the compact interval formatting is not
- * supported. And the interval format will be fall back to fall-back
- * patterns, which is mostly "{date0} - {date1}".
- *
- * <P>
- * There is a set of pre-defined static skeleton strings.
- * There are pre-defined interval patterns for those pre-defined skeletons
- * in locales' resource files.
- * For example, for a skeleton UDAT_YEAR_ABBR_MONTH_DAY, which is  &quot;yMMMd&quot;,
- * in  en_US, if the largest different calendar field between date1 and date2
- * is &quot;year&quot;, the date interval pattern  is &quot;MMM d, yyyy - MMM d, yyyy&quot;,
- * such as &quot;Jan 10, 2007 - Jan 10, 2008&quot;.
- * If the largest different calendar field between date1 and date2 is &quot;month&quot;,
- * the date interval pattern is &quot;MMM d - MMM d, yyyy&quot;,
- * such as &quot;Jan 10 - Feb 10, 2007&quot;.
- * If the largest different calendar field between date1 and date2 is &quot;day&quot;,
- * the date interval pattern is &quot;MMM d-d, yyyy&quot;, such as &quot;Jan 10-20, 2007&quot;.
- *
- * For date skeleton, the interval patterns when year, or month, or date is
- * different are defined in resource files.
- * For time skeleton, the interval patterns when am/pm, or hour, or minute is
- * different are defined in resource files.
- *
- * <P>
- * If a skeleton is not found in a locale's DateIntervalInfo, which means
- * the interval patterns for the skeleton is not defined in resource file,
- * the interval pattern will falls back to the interval "fallback" pattern
- * defined in resource file.
- * If the interval "fallback" pattern is not defined, the default fall-back
- * is "{date0} - {data1}".
- *
- * <P>
- * For the combination of date and time,
- * The rule to generate interval patterns are:
- * <ol>
- * <li>
- *    when the year, month, or day differs, falls back to fall-back
- *    interval pattern, which mostly is the concatenate the two original
- *    expressions with a separator between,
- *    For example, interval pattern from "Jan 10, 2007 10:10 am"
- *    to "Jan 11, 2007 10:10am" is
- *    "Jan 10, 2007 10:10 am - Jan 11, 2007 10:10am"
- * </li>
- * <li>
- *    otherwise, present the date followed by the range expression
- *    for the time.
- *    For example, interval pattern from "Jan 10, 2007 10:10 am"
- *    to "Jan 10, 2007 11:10am" is "Jan 10, 2007 10:10 am - 11:10am"
- * </li>
- * </ol>
- *
- *
- * <P>
- * If two dates are the same, the interval pattern is the single date pattern.
- * For example, interval pattern from "Jan 10, 2007" to "Jan 10, 2007" is
- * "Jan 10, 2007".
- *
- * Or if the presenting fields between 2 dates have the exact same values,
- * the interval pattern is the  single date pattern.
- * For example, if user only requests year and month,
- * the interval pattern from "Jan 10, 2007" to "Jan 20, 2007" is "Jan 2007".
- *
- * <P>
- * DateIntervalFormat needs the following information for correct
- * formatting: time zone, calendar type, pattern, date format symbols,
- * and date interval patterns.
- * It can be instantiated in 2 ways:
- * <ol>
- * <li>
- *    create an instance using default or given locale plus given skeleton.
- *    Users are encouraged to created date interval formatter this way and
- *    to use the pre-defined skeleton macros, such as
- *    UDAT_YEAR_NUM_MONTH, which consists the calendar fields and
- *    the format style.
- * </li>
- * <li>
- *    create an instance using default or given locale plus given skeleton
- *    plus a given DateIntervalInfo.
- *    This factory method is for powerful users who want to provide their own
- *    interval patterns.
- *    Locale provides the timezone, calendar, and format symbols information.
- *    Local plus skeleton provides full pattern information.
- *    DateIntervalInfo provides the date interval patterns.
- * </li>
- * </ol>
- *
- * <P>
- * For the calendar field pattern letter, such as G, y, M, d, a, h, H, m, s etc.
- * DateIntervalFormat uses the same syntax as that of
- * DateTime format.
- *
- * <P>
- * Code Sample: general usage
- * <pre>
- * \code
- *   // the date interval object which the DateIntervalFormat formats on
- *   // and parses into
- *   DateInterval*  dtInterval = new DateInterval(1000*3600*24, 1000*3600*24*2);
- *   UErrorCode status = U_ZERO_ERROR;
- *   DateIntervalFormat* dtIntervalFmt = DateIntervalFormat::createInstance(
- *                           UDAT_YEAR_MONTH_DAY,
- *                           Locale("en", "GB", ""), status);
- *   UnicodeUnicodeString dateIntervalString;
- *   FieldPosition pos = 0;
- *   // formatting
- *   dtIntervalFmt->format(dtInterval, dateIntervalUnicodeString, pos, status);
- *   delete dtIntervalFmt;
- * \endcode
- * </pre>
- */
-
-class U_I18N_API DateIntervalFormat : public Format {
-public:
-
-    /**
-     * Construct a DateIntervalFormat from skeleton and  the default locale.
-     *
-     * This is a convenient override of
-     * createInstance(const UnicodeString& skeleton, const Locale& locale,
-     *                UErrorCode&)
-     * with the value of locale as default locale.
-     *
-     * @param skeleton  the skeleton on which interval format based.
-     * @param status    output param set to success/failure code on exit
-     * @return          a date time interval formatter which the caller owns.
-     * @stable ICU 4.0
-     */
-    static DateIntervalFormat* U_EXPORT2 createInstance(
-                                               const UnicodeString& skeleton,
-                                               UErrorCode& status);
-
-    /**
-     * Construct a DateIntervalFormat from skeleton and a given locale.
-     * <P>
-     * In this factory method,
-     * the date interval pattern information is load from resource files.
-     * Users are encouraged to created date interval formatter this way and
-     * to use the pre-defined skeleton macros.
-     *
-     * <P>
-     * There are pre-defined skeletons (defined in udate.h) having predefined
-     * interval patterns in resource files.
-     * Users are encouraged to use those macros.
-     * For example:
-     * DateIntervalFormat::createInstance(UDAT_MONTH_DAY, status)
-     *
-     * The given Locale provides the interval patterns.
-     * For example, for en_GB, if skeleton is UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY,
-     * which is "yMMMEEEd",
-     * the interval patterns defined in resource file to above skeleton are:
-     * "EEE, d MMM, yyyy - EEE, d MMM, yyyy" for year differs,
-     * "EEE, d MMM - EEE, d MMM, yyyy" for month differs,
-     * "EEE, d - EEE, d MMM, yyyy" for day differs,
-     * @param skeleton  the skeleton on which interval format based.
-     * @param locale    the given locale
-     * @param status    output param set to success/failure code on exit
-     * @return          a date time interval formatter which the caller owns.
-     * @stable ICU 4.0
-     */
-
-    static DateIntervalFormat* U_EXPORT2 createInstance(
-                                               const UnicodeString& skeleton,
-                                               const Locale& locale,
-                                               UErrorCode& status);
-
-    /**
-     * Construct a DateIntervalFormat from skeleton
-     *  DateIntervalInfo, and default locale.
-     *
-     * This is a convenient override of
-     * createInstance(const UnicodeString& skeleton, const Locale& locale,
-     *                const DateIntervalInfo& dtitvinf, UErrorCode&)
-     * with the locale value as default locale.
-     *
-     * @param skeleton  the skeleton on which interval format based.
-     * @param dtitvinf  the DateIntervalInfo object.
-     * @param status    output param set to success/failure code on exit
-     * @return          a date time interval formatter which the caller owns.
-     * @stable ICU 4.0
-     */
-    static DateIntervalFormat* U_EXPORT2 createInstance(
-                                              const UnicodeString& skeleton,
-                                              const DateIntervalInfo& dtitvinf,
-                                              UErrorCode& status);
-
-    /**
-     * Construct a DateIntervalFormat from skeleton
-     * a DateIntervalInfo, and the given locale.
-     *
-     * <P>
-     * In this factory method, user provides its own date interval pattern
-     * information, instead of using those pre-defined data in resource file.
-     * This factory method is for powerful users who want to provide their own
-     * interval patterns.
-     * <P>
-     * There are pre-defined skeletons (defined in udate.h) having predefined
-     * interval patterns in resource files.
-     * Users are encouraged to use those macros.
-     * For example:
-     * DateIntervalFormat::createInstance(UDAT_MONTH_DAY, status)
-     *
-     * The DateIntervalInfo provides the interval patterns.
-     * and the DateIntervalInfo ownership remains to the caller.
-     *
-     * User are encouraged to set default interval pattern in DateIntervalInfo
-     * as well, if they want to set other interval patterns ( instead of
-     * reading the interval patterns from resource files).
-     * When the corresponding interval pattern for a largest calendar different
-     * field is not found ( if user not set it ), interval format fallback to
-     * the default interval pattern.
-     * If user does not provide default interval pattern, it fallback to
-     * "{date0} - {date1}"
-     *
-     * @param skeleton  the skeleton on which interval format based.
-     * @param locale    the given locale
-     * @param dtitvinf  the DateIntervalInfo object.
-     * @param status    output param set to success/failure code on exit
-     * @return          a date time interval formatter which the caller owns.
-     * @stable ICU 4.0
-     */
-    static DateIntervalFormat* U_EXPORT2 createInstance(
-                                              const UnicodeString& skeleton,
-                                              const Locale& locale,
-                                              const DateIntervalInfo& dtitvinf,
-                                              UErrorCode& status);
-
-    /**
-     * Destructor.
-     * @stable ICU 4.0
-     */
-    virtual ~DateIntervalFormat();
-
-    /**
-     * Clone this Format object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @stable ICU 4.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 4.0
-     */
-    virtual UBool operator==(const Format& other) const;
-
-    /**
-     * Return true if the given Format objects are not 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 not semantically equal.
-     * @stable ICU 4.0
-     */
-    UBool operator!=(const Format& other) const;
-
-
-    using Format::format;
-
-    /**
-     * Format an object to produce a string. This method handles Formattable
-     * objects with a DateInterval type.
-     * If a the Formattable object type is not a DateInterval,
-     * then it returns a failing UErrorCode.
-     *
-     * @param obj               The object to format.
-     *                          Must be a DateInterval.
-     * @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 status            Output param filled with success/failure status.
-     * @return                  Reference to 'appendTo' parameter.
-     * @stable ICU 4.0
-     */
-    virtual UnicodeString& format(const Formattable& obj,
-                                  UnicodeString& appendTo,
-                                  FieldPosition& fieldPosition,
-                                  UErrorCode& status) const ;
-
-
-
-    /**
-     * Format a DateInterval to produce a string.
-     *
-     * @param dtInterval        DateInterval to be formatted.
-     * @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 status            Output param filled with success/failure status.
-     * @return                  Reference to 'appendTo' parameter.
-     * @stable ICU 4.0
-     */
-    UnicodeString& format(const DateInterval* dtInterval,
-                          UnicodeString& appendTo,
-                          FieldPosition& fieldPosition,
-                          UErrorCode& status) const ;
-
-
-    /**
-     * Format 2 Calendars to produce a string.
-     *
-     * Note: "fromCalendar" and "toCalendar" are not const,
-     * since calendar is not const in  SimpleDateFormat::format(Calendar&),
-     *
-     * @param fromCalendar      calendar set to the from date in date interval
-     *                          to be formatted into date interval string
-     * @param toCalendar        calendar set to the to date in date interval
-     *                          to be formatted into date interval string
-     * @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 status            Output param filled with success/failure status.
-     *                          Caller needs to make sure it is SUCCESS
-     *                          at the function entrance
-     * @return                  Reference to 'appendTo' parameter.
-     * @stable ICU 4.0
-     */
-    UnicodeString& format(Calendar& fromCalendar,
-                          Calendar& toCalendar,
-                          UnicodeString& appendTo,
-                          FieldPosition& fieldPosition,
-                          UErrorCode& status) const ;
-
-    /**
-     * Date interval parsing is not supported. Please do not use.
-     * <P>
-     * This method should handle parsing of
-     * date time interval strings into Formattable objects with
-     * DateInterval type, which is a pair of UDate.
-     * <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. Since no parsing
-     *                  is supported, upon return this param is unchanged.
-     * @return          A newly created Formattable* object, or NULL
-     *                  on failure.  The caller owns this and should
-     *                  delete it when done.
-     * @internal ICU 4.0
-     */
-    virtual void parseObject(const UnicodeString& source,
-                             Formattable& result,
-                             ParsePosition& parse_pos) const;
-
-
-    /**
-     * Gets the date time interval patterns.
-     * @return the date time interval patterns associated with
-     * this date interval formatter.
-     * @stable ICU 4.0
-     */
-    const DateIntervalInfo* getDateIntervalInfo(void) const;
-
-
-    /**
-     * Set the date time interval patterns.
-     * @param newIntervalPatterns   the given interval patterns to copy.
-     * @param status          output param set to success/failure code on exit
-     * @stable ICU 4.0
-     */
-    void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns,
-                             UErrorCode& status);
-
-
-    /**
-     * Gets the date formatter
-     * @return the date formatter associated with this date interval formatter.
-     * @stable ICU 4.0
-     */
-    const DateFormat* getDateFormat(void) const;
-
-    /**
-     * 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;
-
-protected:
-
-    /**
-     * Copy constructor.
-     * @stable ICU 4.0
-     */
-    DateIntervalFormat(const DateIntervalFormat&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 4.0
-     */
-    DateIntervalFormat& operator=(const DateIntervalFormat&);
-
-private:
-
-    /*
-     * This is for ICU internal use only. Please do not use.
-     * Save the interval pattern information.
-     * Interval pattern consists of 2 single date patterns and the separator.
-     * For example, interval pattern "MMM d - MMM d, yyyy" consists
-     * a single date pattern "MMM d", another single date pattern "MMM d, yyyy",
-     * and a separator "-".
-     * The pattern is divided into 2 parts. For above example,
-     * the first part is "MMM d - ", and the second part is "MMM d, yyyy".
-     * Also, the first date appears in an interval pattern could be
-     * the earlier date or the later date.
-     * And such information is saved in the interval pattern as well.
-     * @internal ICU 4.0
-     */
-    struct PatternInfo {
-        UnicodeString firstPart;
-        UnicodeString secondPart;
-        /**
-         * Whether the first date in interval pattern is later date or not.
-         * Fallback format set the default ordering.
-         * And for a particular interval pattern, the order can be
-         * overriden by prefixing the interval pattern with "latestFirst:" or
-         * "earliestFirst:"
-         * For example, given 2 date, Jan 10, 2007 to Feb 10, 2007.
-         * if the fallback format is "{0} - {1}",
-         * and the pattern is "d MMM - d MMM yyyy", the interval format is
-         * "10 Jan - 10 Feb, 2007".
-         * If the pattern is "latestFirst:d MMM - d MMM yyyy",
-         * the interval format is "10 Feb - 10 Jan, 2007"
-         */
-        UBool         laterDateFirst;
-    };
-
-
-    /**
-     * default constructor
-     * @internal ICU 4.0
-     */
-    DateIntervalFormat();
-
-    /**
-     * Construct a DateIntervalFormat from DateFormat,
-     * a DateIntervalInfo, and skeleton.
-     * DateFormat provides the timezone, calendar,
-     * full pattern, and date format symbols information.
-     * It should be a SimpleDateFormat object which
-     * has a pattern in it.
-     * the DateIntervalInfo provides the interval patterns.
-     *
-     * Note: the DateIntervalFormat takes ownership of both
-     * DateFormat and DateIntervalInfo objects.
-     * Caller should not delete them.
-     *
-     * @param locale    the locale of this date interval formatter.
-     * @param dtitvinf  the DateIntervalInfo object to be adopted.
-     * @param skeleton  the skeleton of the date formatter
-     * @param status    output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo,
-                       const UnicodeString* skeleton, UErrorCode& status);
-
-
-    /**
-     * Construct a DateIntervalFormat from DateFormat
-     * and a DateIntervalInfo.
-     *
-     * It is a wrapper of the constructor.
-     *
-     * @param locale    the locale of this date interval formatter.
-     * @param dtitvinf  the DateIntervalInfo object to be adopted.
-     * @param skeleton  the skeleton of this formatter.
-     * @param status    Output param set to success/failure code.
-     * @return          a date time interval formatter which the caller owns.
-     * @internal ICU 4.0
-     */
-    static DateIntervalFormat* U_EXPORT2 create(const Locale& locale,
-                                                DateIntervalInfo* dtitvinf,
-                                                const UnicodeString* skeleton,
-                                                UErrorCode& status);
-
-    /**
-     * Create a simple date/time formatter from skeleton, given locale,
-     * and date time pattern generator.
-     *
-     * @param skeleton  the skeleton on which date format based.
-     * @param locale    the given locale.
-     * @param dtpng     the date time pattern generator.
-     * @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 SimpleDateFormat* U_EXPORT2 createSDFPatternInstance(
-                                        const UnicodeString& skeleton,
-                                        const Locale& locale,
-                                        DateTimePatternGenerator* dtpng,
-                                        UErrorCode& status);
-
-
-    /**
-     *  Below are for generating interval patterns local to the formatter
-     */
-
-
-    /**
-     * Format 2 Calendars using fall-back interval pattern
-     *
-     * The full pattern used in this fall-back format is the
-     * full pattern of the date formatter.
-     *
-     * @param fromCalendar      calendar set to the from date in date interval
-     *                          to be formatted into date interval string
-     * @param toCalendar        calendar set to the to date in date interval
-     *                          to be formatted into date interval string
-     * @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 set to success/failure code on exit
-     * @return                  Reference to 'appendTo' parameter.
-     * @internal ICU 4.0
-     */
-    UnicodeString& fallbackFormat(Calendar& fromCalendar,
-                                  Calendar& toCalendar,
-                                  UnicodeString& appendTo,
-                                  FieldPosition& pos,
-                                  UErrorCode& status) const;
-
-
-
-    /**
-     * Initialize interval patterns locale to this formatter
-     *
-     * This code is a bit complicated since
-     * 1. the interval patterns saved in resource bundle files are interval
-     *    patterns based on date or time only.
-     *    It does not have interval patterns based on both date and time.
-     *    Interval patterns on both date and time are algorithm generated.
-     *
-     *    For example, it has interval patterns on skeleton "dMy" and "hm",
-     *    but it does not have interval patterns on skeleton "dMyhm".
-     *
-     *    The rule to generate interval patterns for both date and time skeleton are
-     *    1) when the year, month, or day differs, concatenate the two original
-     *    expressions with a separator between,
-     *    For example, interval pattern from "Jan 10, 2007 10:10 am"
-     *    to "Jan 11, 2007 10:10am" is
-     *    "Jan 10, 2007 10:10 am - Jan 11, 2007 10:10am"
-     *
-     *    2) otherwise, present the date followed by the range expression
-     *    for the time.
-     *    For example, interval pattern from "Jan 10, 2007 10:10 am"
-     *    to "Jan 10, 2007 11:10am" is
-     *    "Jan 10, 2007 10:10 am - 11:10am"
-     *
-     * 2. even a pattern does not request a certain calendar field,
-     *    the interval pattern needs to include such field if such fields are
-     *    different between 2 dates.
-     *    For example, a pattern/skeleton is "hm", but the interval pattern
-     *    includes year, month, and date when year, month, and date differs.
-     *
-     *
-     * @param status    output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    void initializePattern(UErrorCode& status);
-
-
-
-    /**
-     * Set fall back interval pattern given a calendar field,
-     * a skeleton, and a date time pattern generator.
-     * @param field      the largest different calendar field
-     * @param skeleton   a skeleton
-     * @param status     output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    void setFallbackPattern(UCalendarDateFields field,
-                            const UnicodeString& skeleton,
-                            UErrorCode& status);
-
-
-
-    /**
-     * get separated date and time skeleton from a combined skeleton.
-     *
-     * The difference between date skeleton and normalizedDateSkeleton are:
-     * 1. both 'y' and 'd' are appeared only once in normalizeDateSkeleton
-     * 2. 'E' and 'EE' are normalized into 'EEE'
-     * 3. 'MM' is normalized into 'M'
-     *
-     ** the difference between time skeleton and normalizedTimeSkeleton are:
-     * 1. both 'H' and 'h' are normalized as 'h' in normalized time skeleton,
-     * 2. 'a' is omitted in normalized time skeleton.
-     * 3. there is only one appearance for 'h', 'm','v', 'z' in normalized time
-     *    skeleton
-     *
-     *
-     *  @param skeleton               given combined skeleton.
-     *  @param date                   Output parameter for date only skeleton.
-     *  @param normalizedDate         Output parameter for normalized date only
-     *
-     *  @param time                   Output parameter for time only skeleton.
-     *  @param normalizedTime         Output parameter for normalized time only
-     *                                skeleton.
-     *
-     * @internal ICU 4.0
-     */
-    static void  U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
-                                    UnicodeString& date,
-                                    UnicodeString& normalizedDate,
-                                    UnicodeString& time,
-                                    UnicodeString& normalizedTime);
-
-
-
-    /**
-     * Generate date or time interval pattern from resource,
-     * and set them into the interval pattern locale to this formatter.
-     *
-     * It needs to handle the following:
-     * 1. need to adjust field width.
-     *    For example, the interval patterns saved in DateIntervalInfo
-     *    includes "dMMMy", but not "dMMMMy".
-     *    Need to get interval patterns for dMMMMy from dMMMy.
-     *    Another example, the interval patterns saved in DateIntervalInfo
-     *    includes "hmv", but not "hmz".
-     *    Need to get interval patterns for "hmz' from 'hmv'
-     *
-     * 2. there might be no pattern for 'y' differ for skeleton "Md",
-     *    in order to get interval patterns for 'y' differ,
-     *    need to look for it from skeleton 'yMd'
-     *
-     * @param dateSkeleton   normalized date skeleton
-     * @param timeSkeleton   normalized time skeleton
-     * @return               whether the resource is found for the skeleton.
-     *                       TRUE if interval pattern found for the skeleton,
-     *                       FALSE otherwise.
-     * @internal ICU 4.0
-     */
-    UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
-                                 const UnicodeString& timeSkeleton);
-
-
-
-
-    /**
-     * Generate interval pattern from existing resource
-     *
-     * It not only save the interval patterns,
-     * but also return the extended skeleton and its best match skeleton.
-     *
-     * @param field           largest different calendar field
-     * @param skeleton        skeleton
-     * @param bestSkeleton    the best match skeleton which has interval pattern
-     *                        defined in resource
-     * @param differenceInfo  the difference between skeleton and best skeleton
-     *         0 means the best matched skeleton is the same as input skeleton
-     *         1 means the fields are the same, but field width are different
-     *         2 means the only difference between fields are v/z,
-     *        -1 means there are other fields difference
-     *
-     * @param extendedSkeleton      extended skeleton
-     * @param extendedBestSkeleton  extended best match skeleton
-     * @return                      whether the interval pattern is found
-     *                              through extending skeleton or not.
-     *                              TRUE if interval pattern is found by
-     *                              extending skeleton, FALSE otherwise.
-     * @internal ICU 4.0
-     */
-    UBool setIntervalPattern(UCalendarDateFields field,
-                             const UnicodeString* skeleton,
-                             const UnicodeString* bestSkeleton,
-                             int8_t differenceInfo,
-                             UnicodeString* extendedSkeleton = NULL,
-                             UnicodeString* extendedBestSkeleton = NULL);
-
-    /**
-     * Adjust field width in best match interval pattern to match
-     * the field width in input skeleton.
-     *
-     * TODO (xji) make a general solution
-     * The adjusting rule can be:
-     * 1. always adjust
-     * 2. never adjust
-     * 3. default adjust, which means adjust according to the following rules
-     * 3.1 always adjust string, such as MMM and MMMM
-     * 3.2 never adjust between string and numeric, such as MM and MMM
-     * 3.3 always adjust year
-     * 3.4 do not adjust 'd', 'h', or 'm' if h presents
-     * 3.5 do not adjust 'M' if it is numeric(?)
-     *
-     * Since date interval format is well-formed format,
-     * date and time skeletons are normalized previously,
-     * till this stage, the adjust here is only "adjust strings, such as MMM
-     * and MMMM, EEE and EEEE.
-     *
-     * @param inputSkeleton            the input skeleton
-     * @param bestMatchSkeleton        the best match skeleton
-     * @param bestMatchIntervalpattern the best match interval pattern
-     * @param differenceInfo           the difference between 2 skeletons
-     *                                 1 means only field width differs
-     *                                 2 means v/z exchange
-     * @param adjustedIntervalPattern  adjusted interval pattern
-     * @internal ICU 4.0
-     */
-    static void U_EXPORT2 adjustFieldWidth(
-                            const UnicodeString& inputSkeleton,
-                            const UnicodeString& bestMatchSkeleton,
-                            const UnicodeString& bestMatchIntervalPattern,
-                            int8_t differenceInfo,
-                            UnicodeString& adjustedIntervalPattern);
-
-    /**
-     * Concat a single date pattern with a time interval pattern,
-     * set it into the intervalPatterns, while field is time field.
-     * This is used to handle time interval patterns on skeleton with
-     * both time and date. Present the date followed by
-     * the range expression for the time.
-     * @param format         date and time format
-     * @param formatLen      format string length
-     * @param datePattern    date pattern
-     * @param field          time calendar field: AM_PM, HOUR, MINUTE
-     * @param status         output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    void concatSingleDate2TimeInterval(const UChar* format,
-                                       int32_t formatLen,
-                                       const UnicodeString& datePattern,
-                                       UCalendarDateFields field,
-                                       UErrorCode& status);
-
-    /**
-     * check whether a calendar field present in a skeleton.
-     * @param field      calendar field need to check
-     * @param skeleton   given skeleton on which to check the calendar field
-     * @return           true if field present in a skeleton.
-     * @internal ICU 4.0
-     */
-    static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
-                                                 const UnicodeString& skeleton);
-
-
-    /**
-     * Split interval patterns into 2 part.
-     * @param intervalPattern  interval pattern
-     * @return the index in interval pattern which split the pattern into 2 part
-     * @internal ICU 4.0
-     */
-    static int32_t  U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
-
-
-    /**
-     * Break interval patterns as 2 part and save them into pattern info.
-     * @param field            calendar field
-     * @param intervalPattern  interval pattern
-     * @internal ICU 4.0
-     */
-    void setIntervalPattern(UCalendarDateFields field,
-                            const UnicodeString& intervalPattern);
-
-
-    /**
-     * Break interval patterns as 2 part and save them into pattern info.
-     * @param field            calendar field
-     * @param intervalPattern  interval pattern
-     * @param laterDateFirst   whether later date appear first in interval pattern
-     * @internal ICU 4.0
-     */
-    void setIntervalPattern(UCalendarDateFields field,
-                            const UnicodeString& intervalPattern,
-                            UBool laterDateFirst);
-
-
-    /**
-     * Set pattern information.
-     *
-     * @param field            calendar field
-     * @param firstPart        the first part in interval pattern
-     * @param secondPart       the second part in interval pattern
-     * @param laterDateFirst   whether the first date in intervalPattern
-     *                         is earlier date or later date
-     * @internal ICU 4.0
-     */
-    void setPatternInfo(UCalendarDateFields field,
-                        const UnicodeString* firstPart,
-                        const UnicodeString* secondpart,
-                        UBool laterDateFirst);
-
-
-    // from calendar field to pattern letter
-    static const UChar fgCalendarFieldToPatternLetter[];
-
-
-    /**
-     * The interval patterns for this locale.
-     */
-    DateIntervalInfo*     fInfo;
-
-    /**
-     * The DateFormat object used to format single pattern
-     */
-    SimpleDateFormat*     fDateFormat;
-
-    /**
-     * The 2 calendars with the from and to date.
-     * could re-use the calendar in fDateFormat,
-     * but keeping 2 calendars make it clear and clean.
-     */
-    Calendar* fFromCalendar;
-    Calendar* fToCalendar;
-
-    /**
-     * Date time pattern generator
-     */
-    DateTimePatternGenerator* fDtpng;
-
-    /**
-     * Following are interval information relavent (locale) to this formatter.
-     */
-    UnicodeString fSkeleton;
-    PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
-};
-
-inline UBool
-DateIntervalFormat::operator!=(const Format& other) const  {
-    return !operator==(other);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _DTITVFMT_H__
-//eof
diff --git a/source/i18n/unicode/dtitvinf.h b/source/i18n/unicode/dtitvinf.h
deleted file mode 100644
index f6513a2..0000000
--- a/source/i18n/unicode/dtitvinf.h
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 2008-2010, International Business Machines Corporation and
- * others. All Rights Reserved.
- *******************************************************************************
- *
- * File DTITVINF.H
- *
- *******************************************************************************
- */
-
-#ifndef __DTITVINF_H__
-#define __DTITVINF_H__
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Date/Time interval patterns for formatting date/time interval
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/udat.h"
-#include "unicode/locid.h"
-#include "unicode/ucal.h"
-#include "unicode/dtptngen.h"
-//#include "dtitv_impl.h"
-
-/**
- * @internal ICU 4.0
- */
- 
-union UHashTok;
-
-
-U_NAMESPACE_BEGIN
-
-/**
- * DateIntervalInfo is a public class for encapsulating localizable
- * date time interval patterns. It is used by DateIntervalFormat.
- *
- * <P>
- * For most users, ordinary use of DateIntervalFormat does not need to create
- * DateIntervalInfo object directly.
- * DateIntervalFormat will take care of it when creating a date interval
- * formatter when user pass in skeleton and locale.
- *
- * <P>
- * For power users, who want to create their own date interval patterns,
- * or want to re-set date interval patterns, they could do so by
- * directly creating DateIntervalInfo and manupulating it.
- *
- * <P>
- * Logically, the interval patterns are mappings
- * from (skeleton, the_largest_different_calendar_field)
- * to (date_interval_pattern).
- *
- * <P>
- * A skeleton 
- * <ol>
- * <li>
- * only keeps the field pattern letter and ignores all other parts 
- * in a pattern, such as space, punctuations, and string literals.
- * <li>
- * hides the order of fields. 
- * <li>
- * might hide a field's pattern letter length.
- *
- * For those non-digit calendar fields, the pattern letter length is 
- * important, such as MMM, MMMM, and MMMMM; EEE and EEEE, 
- * and the field's pattern letter length is honored.
- *    
- * For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy, 
- * the field pattern length is ignored and the best match, which is defined 
- * in date time patterns, will be returned without honor the field pattern
- * letter length in skeleton.
- * </ol>
- *
- * <P>
- * The calendar fields we support for interval formatting are:
- * year, month, date, day-of-week, am-pm, hour, hour-of-day, and minute.
- * Those calendar fields can be defined in the following order:
- * year >  month > date > am-pm > hour >  minute 
- *  
- * The largest different calendar fields between 2 calendars is the
- * first different calendar field in above order.
- *
- * For example: the largest different calendar fields between &quot;Jan 10, 2007&quot; 
- * and &quot;Feb 20, 2008&quot; is year.
- *   
- * <P>
- * There is a set of pre-defined static skeleton strings.
- * There are pre-defined interval patterns for those pre-defined skeletons
- * in locales' resource files.
- * For example, for a skeleton UDAT_YEAR_ABBR_MONTH_DAY, which is  &quot;yMMMd&quot;,
- * in  en_US, if the largest different calendar field between date1 and date2 
- * is &quot;year&quot;, the date interval pattern  is &quot;MMM d, yyyy - MMM d, yyyy&quot;, 
- * such as &quot;Jan 10, 2007 - Jan 10, 2008&quot;.
- * If the largest different calendar field between date1 and date2 is &quot;month&quot;,
- * the date interval pattern is &quot;MMM d - MMM d, yyyy&quot;,
- * such as &quot;Jan 10 - Feb 10, 2007&quot;.
- * If the largest different calendar field between date1 and date2 is &quot;day&quot;,
- * the date interval pattern is &quot;MMM d-d, yyyy&quot;, such as &quot;Jan 10-20, 2007&quot;.
- *
- * For date skeleton, the interval patterns when year, or month, or date is 
- * different are defined in resource files.
- * For time skeleton, the interval patterns when am/pm, or hour, or minute is
- * different are defined in resource files.
- *
- *
- * <P>
- * There are 2 dates in interval pattern. For most locales, the first date
- * in an interval pattern is the earlier date. There might be a locale in which
- * the first date in an interval pattern is the later date.
- * We use fallback format for the default order for the locale.
- * For example, if the fallback format is &quot;{0} - {1}&quot;, it means
- * the first date in the interval pattern for this locale is earlier date.
- * If the fallback format is &quot;{1} - {0}&quot;, it means the first date is the 
- * later date.
- * For a particular interval pattern, the default order can be overriden
- * by prefixing &quot;latestFirst:&quot; or &quot;earliestFirst:&quot; to the interval pattern.
- * For example, if the fallback format is &quot;{0}-{1}&quot;,
- * but for skeleton &quot;yMMMd&quot;, the interval pattern when day is different is 
- * &quot;latestFirst:d-d MMM yy&quot;, it means by default, the first date in interval
- * pattern is the earlier date. But for skeleton &quot;yMMMd&quot;, when day is different,
- * the first date in &quot;d-d MMM yy&quot; is the later date.
- * 
- * <P>
- * The recommended way to create a DateIntervalFormat object is to pass in 
- * the locale. 
- * By using a Locale parameter, the DateIntervalFormat object is 
- * initialized with the pre-defined interval patterns for a given or 
- * default locale.
- * <P>
- * Users can also create DateIntervalFormat object 
- * by supplying their own interval patterns.
- * It provides flexibility for power users.
- *
- * <P>
- * After a DateIntervalInfo object is created, clients may modify
- * the interval patterns using setIntervalPattern function as so desired.
- * Currently, users can only set interval patterns when the following 
- * calendar fields are different: ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH, 
- * DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY, and MINUTE.
- * Interval patterns when other calendar fields are different is not supported.
- * <P>
- * DateIntervalInfo objects are cloneable. 
- * When clients obtain a DateIntervalInfo object, 
- * they can feel free to modify it as necessary.
- * <P>
- * DateIntervalInfo are not expected to be subclassed. 
- * Data for a calendar is loaded out of resource bundles. 
- * Through ICU 4.4, date interval patterns are only supported in the Gregorian
- * calendar; non-Gregorian calendars are supported from ICU 4.4.1. 
- * @stable ICU 4.0
-**/
-
-class U_I18N_API DateIntervalInfo : public UObject {
-public:
-    /**
-     * Default constructor.
-     * It does not initialize any interval patterns except
-     * that it initialize default fall-back pattern as "{0} - {1}",
-     * which can be reset by setFallbackIntervalPattern().
-     * It should be followed by setFallbackIntervalPattern() and 
-     * setIntervalPattern(), 
-     * and is recommended to be used only for power users who
-     * wants to create their own interval patterns and use them to create
-     * date interval formatter.
-     * @param status   output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    DateIntervalInfo(UErrorCode& status);
-
-
-    /** 
-     * Construct DateIntervalInfo for the given locale,
-     * @param locale  the interval patterns are loaded from the appropriate calendar
-     *                data (specified calendar or default calendar) in this locale.
-     * @param status  output param set to success/failure code on exit
-     * @stable ICU 4.0
-     */
-    DateIntervalInfo(const Locale& locale, UErrorCode& status);
-
-
-    /**
-     * Copy constructor.
-     * @stable ICU 4.0
-     */
-    DateIntervalInfo(const DateIntervalInfo&);
-
-    /**
-     * Assignment operator
-     * @stable ICU 4.0
-     */
-    DateIntervalInfo& operator=(const DateIntervalInfo&);
-
-    /**
-     * Clone this object polymorphically.
-     * The caller owns the result and should delete it when done.
-     * @return   a copy of the object
-     * @stable ICU 4.0
-     */
-    virtual DateIntervalInfo* clone(void) const;
-
-    /**
-     * Destructor.
-     * It is virtual to be safe, but it is not designed to be subclassed.
-     * @stable ICU 4.0
-     */
-    virtual ~DateIntervalInfo();
-
-
-    /**
-     * Return true if another object is semantically equal to this one.
-     *
-     * @param other    the DateIntervalInfo object to be compared with.
-     * @return         true if other is semantically equal to this.
-     * @stable ICU 4.0
-     */
-    virtual UBool operator==(const DateIntervalInfo& other) const;
-
-    /**
-     * Return true if another object is semantically unequal to this one.
-     *
-     * @param other    the DateIntervalInfo object to be compared with.
-     * @return         true if other is semantically unequal to this.
-     * @stable ICU 4.0
-     */
-    UBool operator!=(const DateIntervalInfo& other) const;
-
-
-
-    /** 
-     * Provides a way for client to build interval patterns.
-     * User could construct DateIntervalInfo by providing a list of skeletons
-     * and their patterns.
-     * <P>
-     * For example:
-     * <pre>
-     * UErrorCode status = U_ZERO_ERROR;
-     * DateIntervalInfo dIntervalInfo = new DateIntervalInfo();
-     * dIntervalInfo->setFallbackIntervalPattern("{0} ~ {1}");
-     * dIntervalInfo->setIntervalPattern("yMd", UCAL_YEAR, "'from' yyyy-M-d 'to' yyyy-M-d", status); 
-     * dIntervalInfo->setIntervalPattern("yMMMd", UCAL_MONTH, "'from' yyyy MMM d 'to' MMM d", status);
-     * dIntervalInfo->setIntervalPattern("yMMMd", UCAL_DAY, "yyyy MMM d-d", status, status);
-     * </pre>
-     *
-     * Restriction: 
-     * Currently, users can only set interval patterns when the following 
-     * calendar fields are different: ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH, 
-     * DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY, and MINUTE.
-     * Interval patterns when other calendar fields are different are 
-     * not supported.
-     *
-     * @param skeleton         the skeleton on which interval pattern based
-     * @param lrgDiffCalUnit   the largest different calendar unit.
-     * @param intervalPattern  the interval pattern on the largest different
-     *                         calendar unit.
-     *                         For example, if lrgDiffCalUnit is 
-     *                         "year", the interval pattern for en_US when year
-     *                         is different could be "'from' yyyy 'to' yyyy".
-     * @param status           output param set to success/failure code on exit
-     * @stable ICU 4.0
-     */
-    void setIntervalPattern(const UnicodeString& skeleton, 
-                            UCalendarDateFields lrgDiffCalUnit, 
-                            const UnicodeString& intervalPattern,
-                            UErrorCode& status);
-
-    /**
-     * Get the interval pattern given skeleton and 
-     * the largest different calendar field.
-     * @param skeleton   the skeleton
-     * @param field      the largest different calendar field
-     * @param result     output param to receive the pattern
-     * @param status     output param set to success/failure code on exit
-     * @return a reference to 'result'
-     * @stable ICU 4.0 
-     */
-    UnicodeString& getIntervalPattern(const UnicodeString& skeleton,
-                                      UCalendarDateFields field,
-                                      UnicodeString& result,
-                                      UErrorCode& status) const; 
-
-    /**
-     * Get the fallback interval pattern.
-     * @param  result   output param to receive the pattern
-     * @return a reference to 'result'
-     * @stable ICU 4.0 
-     */
-    UnicodeString& getFallbackIntervalPattern(UnicodeString& result) const;
-
-
-    /**
-     * Re-set the fallback interval pattern.
-     *
-     * In construction, default fallback pattern is set as "{0} - {1}".
-     * And constructor taking locale as parameter will set the
-     * fallback pattern as what defined in the locale resource file.
-     *
-     * This method provides a way for user to replace the fallback pattern.
-     *
-     * @param fallbackPattern  fall-back interval pattern.
-     * @param status           output param set to success/failure code on exit
-     * @stable ICU 4.0 
-     */
-    void setFallbackIntervalPattern(const UnicodeString& fallbackPattern,
-                                    UErrorCode& status);
-
-
-    /** Get default order -- whether the first date in pattern is later date
-                             or not.
-     * return default date ordering in interval pattern. TRUE if the first date
-     *        in pattern is later date, FALSE otherwise.
-     * @stable ICU 4.0 
-     */
-    UBool getDefaultOrder() const;
-
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 4.0
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 4.0
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-
-private:
-    /**
-     * DateIntervalFormat will need access to
-     * getBestSkeleton(), parseSkeleton(), enum IntervalPatternIndex,
-     * and calendarFieldToPatternIndex().
-     *
-     * Instead of making above public,
-     * make DateIntervalFormat a friend of DateIntervalInfo.
-     */
-    friend class DateIntervalFormat;
-
-    /**
-     * Following is for saving the interval patterns.
-     * We only support interval patterns on
-     * ERA, YEAR, MONTH, DAY, AM_PM, HOUR, and MINUTE
-     */
-    enum IntervalPatternIndex
-    {
-        kIPI_ERA,
-        kIPI_YEAR,
-        kIPI_MONTH,
-        kIPI_DATE,
-        kIPI_AM_PM,
-        kIPI_HOUR,
-        kIPI_MINUTE,
-        kIPI_MAX_INDEX
-    };
-public:
-    /**
-     * Max index for stored interval patterns
-     * @internal ICU 4.4 
-     */
-     enum {
-     	kMaxIntervalPatternIndex = kIPI_MAX_INDEX
-     };
-private:
-
-
-    /** 
-     * Initialize the DateIntervalInfo from locale
-     * @param locale   the given locale.
-     * @param status   output param set to success/failure code on exit
-     * @internal ICU 4.0 
-     */
-    void initializeData(const Locale& locale, UErrorCode& status);
-
-
-    /* Set Interval pattern.
-     *
-     * It sets interval pattern into the hash map.
-     *
-     * @param skeleton         skeleton on which the interval pattern based
-     * @param lrgDiffCalUnit   the largest different calendar unit.
-     * @param intervalPattern  the interval pattern on the largest different
-     *                         calendar unit.
-     * @param status           output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    void setIntervalPatternInternally(const UnicodeString& skeleton,
-                                      UCalendarDateFields lrgDiffCalUnit,
-                                      const UnicodeString& intervalPattern,
-                                      UErrorCode& status); 
-
-
-    /**given an input skeleton, get the best match skeleton 
-     * which has pre-defined interval pattern in resource file.
-     * Also return the difference between the input skeleton
-     * and the best match skeleton.
-     *
-     * TODO (xji): set field weight or
-     *             isolate the funtionality in DateTimePatternGenerator
-     * @param  skeleton               input skeleton
-     * @param  bestMatchDistanceInfo  the difference between input skeleton
-     *                                and best match skeleton.
-     *         0, if there is exact match for input skeleton
-     *         1, if there is only field width difference between 
-     *            the best match and the input skeleton
-     *         2, the only field difference is 'v' and 'z'
-     *        -1, if there is calendar field difference between
-     *            the best match and the input skeleton
-     * @return                        best match skeleton
-     * @internal ICU 4.0
-     */
-    const UnicodeString* getBestSkeleton(const UnicodeString& skeleton,
-                                         int8_t& bestMatchDistanceInfo) const;
-
-
-    /**
-     * Parse skeleton, save each field's width.
-     * It is used for looking for best match skeleton,
-     * and adjust pattern field width.
-     * @param skeleton            skeleton to be parsed
-     * @param skeletonFieldWidth  parsed skeleton field width
-     * @internal ICU 4.0
-     */
-    static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton, 
-                                        int32_t* skeletonFieldWidth);
-
-
-    /**
-     * Check whether one field width is numeric while the other is string.
-     *
-     * TODO (xji): make it general
-     *
-     * @param fieldWidth          one field width
-     * @param anotherFieldWidth   another field width
-     * @param patternLetter       pattern letter char
-     * @return true if one field width is numeric and the other is string,
-     *         false otherwise.
-     * @internal ICU 4.0
-     */
-    static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth,
-                                         int32_t anotherFieldWidth,
-                                         char patternLetter);
-
-
-    /** 
-     * Convert calendar field to the interval pattern index in 
-     * hash table.
-     *
-     * Since we only support the following calendar fields: 
-     * ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH, DAY_OF_WEEK, 
-     * AM_PM,  HOUR, HOUR_OF_DAY, and MINUTE,
-     * We reserve only 4 interval patterns for a skeleton.
-     *
-     * @param field    calendar field
-     * @param status   output param set to success/failure code on exit
-     * @return  interval pattern index in hash table
-     * @internal ICU 4.0
-     */
-    static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex(
-                                                      UCalendarDateFields field,
-                                                      UErrorCode& status);
-
-
-    /**
-     * delete hash table (of type fIntervalPatterns).
-     *
-     * @param hTable  hash table to be deleted
-     * @internal ICU 4.0
-     */
-    void deleteHash(Hashtable* hTable);
-
-
-    /**
-     * initialize hash table (of type fIntervalPatterns).
-     *
-     * @param status   output param set to success/failure code on exit
-     * @return         hash table initialized
-     * @internal ICU 4.0
-     */
-    Hashtable* initHash(UErrorCode& status);
-
-
-
-    /**
-     * copy hash table (of type fIntervalPatterns).
-     *
-     * @param source   the source to copy from
-     * @param target   the target to copy to
-     * @param status   output param set to success/failure code on exit
-     * @internal ICU 4.0
-     */
-    void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
-
-
-    // data members
-    // fallback interval pattern 
-    UnicodeString fFallbackIntervalPattern;
-    // default order
-    UBool fFirstDateInPtnIsLaterDate;
-
-    // HashMap<UnicodeString, UnicodeString[kIPI_MAX_INDEX]>
-    // HashMap( skeleton, pattern[largest_different_field] )
-    Hashtable* fIntervalPatterns;
-
-};// end class DateIntervalInfo
-
-
-inline UBool
-DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
-    return !operator==(other);
-}
-
-
-U_NAMESPACE_END
-
-#endif
-
-#endif
-
diff --git a/source/i18n/unicode/dtptngen.h b/source/i18n/unicode/dtptngen.h
deleted file mode 100644
index 1a0f70b..0000000
--- a/source/i18n/unicode/dtptngen.h
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-* File DTPTNGEN.H
-*
-*******************************************************************************
-*/
-
-#ifndef __DTPTNGEN_H__
-#define __DTPTNGEN_H__
-
-#include "unicode/datefmt.h"
-#include "unicode/locid.h"
-#include "unicode/udat.h"
-#include "unicode/udatpg.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * \file
- * \brief C++ API: Date/Time Pattern Generator
- */
-
-
-class Hashtable;
-class FormatParser;
-class DateTimeMatcher;
-class DistanceInfo;
-class PatternMap;
-class PtnSkeleton;
-
-/**
- * This class provides flexible generation of date format patterns, like "yy-MM-dd". 
- * The user can build up the generator by adding successive patterns. Once that 
- * is done, a query can be made using a "skeleton", which is a pattern which just
- * includes the desired fields and lengths. The generator will return the "best fit" 
- * pattern corresponding to that skeleton.
- * <p>The main method people will use is getBestPattern(String skeleton),
- * since normally this class is pre-built with data from a particular locale. 
- * However, generators can be built directly from other data as well.
- * <p><i>Issue: may be useful to also have a function that returns the list of 
- * fields in a pattern, in order, since we have that internally.
- * That would be useful for getting the UI order of field elements.</i>
- * @stable ICU 3.8
-**/
-class U_I18N_API DateTimePatternGenerator : public UObject {
-public:
-    /**
-     * Construct a flexible generator according to default locale.
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @stable ICU 3.8
-     */
-    static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status);
-
-    /**
-     * Construct a flexible generator according to data for a given locale.
-     * @param uLocale
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @stable ICU 3.8
-     */
-    static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status);
-
-    /**
-     * Create an empty generator, to be constructed with addPattern(...) etc.
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @stable ICU 3.8
-     */
-     static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
-     
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~DateTimePatternGenerator();
-
-    /**
-     * Clone DateTimePatternGenerator object. Clients are responsible for 
-     * deleting the DateTimePatternGenerator object cloned.
-     * @stable ICU 3.8
-     */
-    DateTimePatternGenerator* clone() const;
-
-     /**
-      * Return true if another object is semantically equal to this one.
-      *
-      * @param other    the DateTimePatternGenerator object to be compared with.
-      * @return         true if other is semantically equal to this.
-      * @stable ICU 3.8
-      */
-    UBool operator==(const DateTimePatternGenerator& other) const;
-    
-    /**
-     * Return true if another object is semantically unequal to this one.
-     *
-     * @param other    the DateTimePatternGenerator object to be compared with.
-     * @return         true if other is semantically unequal to this.
-     * @stable ICU 3.8
-     */
-    UBool operator!=(const DateTimePatternGenerator& other) const;
-
-    /**
-     * Utility to return a unique skeleton from a given pattern. For example,
-     * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
-     *
-     * @param pattern   Input pattern, such as "dd/MMM"
-     * @param status  Output param set to success/failure code on exit,
-     *                  which must not indicate a failure before the function call.
-     * @return skeleton such as "MMMdd"
-     * @stable ICU 3.8
-     */
-    UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
-
-    /**
-     * Utility to return a unique base skeleton from a given pattern. This is
-     * the same as the skeleton, except that differences in length are minimized
-     * so as to only preserve the difference between string and numeric form. So
-     * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd"
-     * (notice the single d).
-     *
-     * @param pattern  Input pattern, such as "dd/MMM"
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @return base skeleton, such as "Md"
-     * @stable ICU 3.8
-     */
-    UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
-
-    /**
-     * Adds a pattern to the generator. If the pattern has the same skeleton as
-     * an existing pattern, and the override parameter is set, then the previous
-     * value is overriden. Otherwise, the previous value is retained. In either
-     * case, the conflicting status is set and previous vale is stored in 
-     * conflicting pattern.
-     * <p>
-     * Note that single-field patterns (like "MMM") are automatically added, and
-     * don't need to be added explicitly!
-     *
-     * @param pattern   Input pattern, such as "dd/MMM"
-     * @param override  When existing values are to be overridden use true, 
-     *                   otherwise use false.
-     * @param conflictingPattern  Previous pattern with the same skeleton.
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @return conflicting status.  The value could be UDATPG_NO_CONFLICT, 
-     *                             UDATPG_BASE_CONFLICT or UDATPG_CONFLICT.
-     * @stable ICU 3.8
-     */
-    UDateTimePatternConflict addPattern(const UnicodeString& pattern, 
-                                        UBool override, 
-                                        UnicodeString& conflictingPattern,
-                                        UErrorCode& status);
-
-    /**
-     * An AppendItem format is a pattern used to append a field if there is no
-     * good match. For example, suppose that the input skeleton is "GyyyyMMMd",
-     * and there is no matching pattern internally, but there is a pattern
-     * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the
-     * G. The way these two are conjoined is by using the AppendItemFormat for G
-     * (era). So if that value is, say "{0}, {1}" then the final resulting
-     * pattern is "d-MM-yyyy, G".
-     * <p>
-     * There are actually three available variables: {0} is the pattern so far,
-     * {1} is the element we are adding, and {2} is the name of the element.
-     * <p>
-     * This reflects the way that the CLDR data is organized.
-     *
-     * @param field  such as UDATPG_ERA_FIELD.
-     * @param value  pattern, such as "{0}, {1}"
-     * @stable ICU 3.8
-     */
-    void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
-
-    /**
-     * Getter corresponding to setAppendItemFormat. Values below 0 or at or
-     * above UDATPG_FIELD_COUNT are illegal arguments.
-     *
-     * @param  field  such as UDATPG_ERA_FIELD.
-     * @return append pattern for field
-     * @stable ICU 3.8
-     */
-    const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
-
-    /**
-     * Sets the names of field, eg "era" in English for ERA. These are only
-     * used if the corresponding AppendItemFormat is used, and if it contains a
-     * {2} variable.
-     * <p>
-     * This reflects the way that the CLDR data is organized.
-     *
-     * @param field   such as UDATPG_ERA_FIELD.
-     * @param value   name of the field
-     * @stable ICU 3.8
-     */
-    void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
-
-    /**
-     * Getter corresponding to setAppendItemNames. Values below 0 or at or above
-     * UDATPG_FIELD_COUNT are illegal arguments.
-     *
-     * @param field  such as UDATPG_ERA_FIELD.
-     * @return name for field
-     * @stable ICU 3.8
-     */
-    const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
-
-    /**
-     * The date time format is a message format pattern used to compose date and
-     * time patterns. The default value is "{0} {1}", where {0} will be replaced
-     * by the date pattern and {1} will be replaced by the time pattern.
-     * <p>
-     * This is used when the input skeleton contains both date and time fields,
-     * but there is not a close match among the added patterns. For example,
-     * suppose that this object was created by adding "dd-MMM" and "hh:mm", and
-     * its datetimeFormat is the default "{0} {1}". Then if the input skeleton
-     * is "MMMdhmm", there is not an exact match, so the input skeleton is
-     * broken up into two components "MMMd" and "hmm". There are close matches
-     * for those two skeletons, so the result is put together with this pattern,
-     * resulting in "d-MMM h:mm".
-     *
-     * @param dateTimeFormat
-     *            message format pattern, here {0} will be replaced by the date
-     *            pattern and {1} will be replaced by the time pattern.
-     * @stable ICU 3.8
-     */
-    void setDateTimeFormat(const UnicodeString& dateTimeFormat);
-
-    /**
-     * Getter corresponding to setDateTimeFormat.
-     * @return DateTimeFormat.
-     * @stable ICU 3.8
-     */
-    const UnicodeString& getDateTimeFormat() const;
-
-    /**
-     * Return the best pattern matching the input skeleton. It is guaranteed to
-     * have all of the fields in the skeleton.
-     *
-     * @param skeleton
-     *            The skeleton is a pattern containing only the variable fields.
-     *            For example, "MMMdd" and "mmhh" are skeletons.
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @return bestPattern
-     *            The best pattern found from the given skeleton.
-     * @stable ICU 3.8
-     */
-     UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
-
-
-    /**
-     * Return the best pattern matching the input skeleton. It is guaranteed to
-     * have all of the fields in the skeleton.
-     *
-     * @param skeleton
-     *            The skeleton is a pattern containing only the variable fields.
-     *            For example, "MMMdd" and "mmhh" are skeletons.
-     * @param options
-     *            Options for forcing the length of specified fields in the
-     *            returned pattern to match those in the skeleton (when this
-     *            would not happen otherwise). For default behavior, use
-     *            UDATPG_MATCH_NO_OPTIONS.
-     * @param status
-     *            Output param set to success/failure code on exit,
-     *            which must not indicate a failure before the function call.
-     * @return bestPattern
-     *            The best pattern found from the given skeleton.
-     * @stable ICU 4.4
-     */
-     UnicodeString getBestPattern(const UnicodeString& skeleton,
-                                  UDateTimePatternMatchOptions options,
-                                  UErrorCode& status);
-
-
-    /**
-     * Adjusts the field types (width and subtype) of a pattern to match what is
-     * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
-     * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
-     * "dd-MMMM hh:mm". This is used internally to get the best match for the
-     * input skeleton, but can also be used externally.
-     *
-     * @param pattern Input pattern
-     * @param skeleton
-     *            The skeleton is a pattern containing only the variable fields.
-     *            For example, "MMMdd" and "mmhh" are skeletons.
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @return pattern adjusted to match the skeleton fields widths and subtypes.
-     * @stable ICU 3.8
-     */
-     UnicodeString replaceFieldTypes(const UnicodeString& pattern, 
-                                     const UnicodeString& skeleton, 
-                                     UErrorCode& status);
-
-    /**
-     * Adjusts the field types (width and subtype) of a pattern to match what is
-     * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
-     * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
-     * "dd-MMMM hh:mm". This is used internally to get the best match for the
-     * input skeleton, but can also be used externally.
-     *
-     * @param pattern Input pattern
-     * @param skeleton
-     *            The skeleton is a pattern containing only the variable fields.
-     *            For example, "MMMdd" and "mmhh" are skeletons.
-     * @param options
-     *            Options controlling whether the length of specified fields in the
-     *            pattern are adjusted to match those in the skeleton (when this
-     *            would not happen otherwise). For default behavior, use
-     *            UDATPG_MATCH_NO_OPTIONS.
-     * @param status
-     *            Output param set to success/failure code on exit,
-     *            which must not indicate a failure before the function call.
-     * @return pattern adjusted to match the skeleton fields widths and subtypes.
-     * @stable ICU 4.4
-     */
-     UnicodeString replaceFieldTypes(const UnicodeString& pattern, 
-                                     const UnicodeString& skeleton, 
-                                     UDateTimePatternMatchOptions options,
-                                     UErrorCode& status);
-
-    /**
-     * Return a list of all the skeletons (in canonical form) from this class.
-     *
-     * Call getPatternForSkeleton() to get the corresponding pattern.
-     *
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @return StringEnumeration with the skeletons.
-     *         The caller must delete the object.
-     * @stable ICU 3.8
-     */
-     StringEnumeration* getSkeletons(UErrorCode& status) const;
-
-     /**
-      * Get the pattern corresponding to a given skeleton.
-      * @param skeleton 
-      * @return pattern corresponding to a given skeleton.
-      * @stable ICU 3.8
-      */
-     const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
-     
-    /**
-     * Return a list of all the base skeletons (in canonical form) from this class.
-     *
-     * @param status  Output param set to success/failure code on exit,
-     *               which must not indicate a failure before the function call.
-     * @return a StringEnumeration with the base skeletons.
-     *         The caller must delete the object.
-     * @stable ICU 3.8
-     */
-     StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
-     
-     /**
-      * Return a list of redundant patterns are those which if removed, make no 
-      * difference in the resulting getBestPattern values. This method returns a 
-      * list of them, to help check the consistency of the patterns used to build 
-      * this generator.
-      * 
-      * @param status  Output param set to success/failure code on exit,
-      *               which must not indicate a failure before the function call.
-      * @return a StringEnumeration with the redundant pattern.
-      *         The caller must delete the object.
-      * @internal ICU 3.8
-      */
-     StringEnumeration* getRedundants(UErrorCode& status);
-      
-    /**
-     * The decimal value is used in formatting fractions of seconds. If the
-     * skeleton contains fractional seconds, then this is used with the
-     * fractional seconds. For example, suppose that the input pattern is
-     * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and
-     * the decimal string is ",". Then the resulting pattern is modified to be
-     * "H:mm:ss,SSSS"
-     *
-     * @param decimal 
-     * @stable ICU 3.8
-     */
-    void setDecimal(const UnicodeString& decimal);
-
-    /**
-     * Getter corresponding to setDecimal.
-     * @return UnicodeString corresponding to the decimal point
-     * @stable ICU 3.8
-     */
-    const UnicodeString& getDecimal() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 3.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 3.8
-     */
-    static UClassID U_EXPORT2 getStaticClassID(void);
-
-private:
-    /**
-     * Constructor.
-     * @stable ICU 3.8
-     */
-    DateTimePatternGenerator(UErrorCode & status);
-
-    /**
-     * Constructor.
-     * @stable ICU 3.8
-     */
-    DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
-
-    /**
-     * Copy constructor.
-     * @param other DateTimePatternGenerator to copy
-     * @stable ICU 3.8
-     */
-    DateTimePatternGenerator(const DateTimePatternGenerator& other);
-
-    /**
-     * Default assignment operator.
-     * @param other DateTimePatternGenerator to copy
-     * @stable ICU 3.8
-     */
-    DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
-
-    Locale pLocale;  // pattern locale
-    FormatParser *fp;
-    DateTimeMatcher* dtMatcher;
-    DistanceInfo *distanceInfo;
-    PatternMap *patternMap;
-    UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
-    UnicodeString appendItemNames[UDATPG_FIELD_COUNT];
-    UnicodeString dateTimeFormat;
-    UnicodeString decimal;
-    DateTimeMatcher *skipMatcher;
-    Hashtable *fAvailableFormatKeyHash;
-    UnicodeString hackPattern;
-    UnicodeString emptyString;
-    UChar fDefaultHourFormatChar;
-
-    void initData(const Locale &locale, UErrorCode &status);
-    void addCanonicalItems();
-    void addICUPatterns(const Locale& locale, UErrorCode& status);
-    void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
-    void addCLDRData(const Locale& locale, UErrorCode& status);
-    UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
-    void initHashtable(UErrorCode& status);
-    void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
-    void setDecimalSymbols(const Locale& locale, UErrorCode& status);
-    UDateTimePatternField getAppendFormatNumber(const char* field) const;
-    UDateTimePatternField getAppendNameNumber(const char* field) const;
-    void getAppendName(UDateTimePatternField field, UnicodeString& value);
-    int32_t getCanonicalIndex(const UnicodeString& field);
-    const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, const PtnSkeleton** specifiedSkeletonPtr = 0);
-    UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, UBool fixFractionalSeconds, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
-    UnicodeString getBestAppending(int32_t missingFields, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
-    int32_t getTopBitNumber(int32_t foundMask);
-    void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
-    UBool isAvailableFormatSet(const UnicodeString &key) const;
-    void copyHashtable(Hashtable *other, UErrorCode &status);
-    UBool isCanonicalItem(const UnicodeString& item) const;
-} ;// end class DateTimePatternGenerator
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/i18n/unicode/dtrule.h b/source/i18n/unicode/dtrule.h
deleted file mode 100644
index cb526a1..0000000
--- a/source/i18n/unicode/dtrule.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2008, International Business Machines Corporation and         *
-* others. All Rights Reserved.                                                *
-*******************************************************************************
-*/
-#ifndef DTRULE_H
-#define DTRULE_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Rule for specifying date and time in an year
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-/**
- * <code>DateTimeRule</code> is a class representing a time in a year by
- * a rule specified by month, day of month, day of week and
- * time in the day.
- * 
- * @stable ICU 3.8
- */
-class U_I18N_API DateTimeRule : public UObject {
-public:
-
-    /**
-     * Date rule type constants.
-     * @stable ICU 3.8
-     */
-    enum DateRuleType {
-        DOM = 0,        /**< The exact day of month,
-                             for example, March 11. */
-        DOW,            /**< The Nth occurence of the day of week,
-                             for example, 2nd Sunday in March. */
-        DOW_GEQ_DOM,    /**< The first occurence of the day of week on or after the day of monnth,
-                             for example, first Sunday on or after March 8. */
-        DOW_LEQ_DOM     /**< The last occurence of the day of week on or before the day of month,
-                             for example, first Sunday on or before March 14. */
-    };
-
-    /**
-     * Time rule type constants.
-     * @stable ICU 3.8
-     */
-    enum TimeRuleType {
-        WALL_TIME = 0,  /**< The local wall clock time */
-        STANDARD_TIME,  /**< The local standard time */
-        UTC_TIME        /**< The UTC time */
-    };
-
-    /**
-     * Constructs a <code>DateTimeRule</code> by the day of month and
-     * the time rule.  The date rule type for an instance created by
-     * this constructor is <code>DOM</code>.
-     * 
-     * @param month         The rule month, for example, <code>Calendar::JANUARY</code>
-     * @param dayOfMonth    The day of month, 1-based.
-     * @param millisInDay   The milliseconds in the rule date.
-     * @param timeType      The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
-     *                      or <code>UTC_TIME</code>.
-     * @stable ICU 3.8
-     */
-    DateTimeRule(int32_t month, int32_t dayOfMonth,
-        int32_t millisInDay, TimeRuleType timeType);
-
-    /**
-     * Constructs a <code>DateTimeRule</code> by the day of week and its oridinal
-     * number and the time rule.  The date rule type for an instance created
-     * by this constructor is <code>DOW</code>.
-     * 
-     * @param month         The rule month, for example, <code>Calendar::JANUARY</code>.
-     * @param weekInMonth   The ordinal number of the day of week.  Negative number
-     *                      may be used for specifying a rule date counted from the
-     *                      end of the rule month.
-     * @param dayOfWeek     The day of week, for example, <code>Calendar::SUNDAY</code>.
-     * @param millisInDay   The milliseconds in the rule date.
-     * @param timeType      The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
-     *                      or <code>UTC_TIME</code>.
-     * @stable ICU 3.8
-     */
-    DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
-        int32_t millisInDay, TimeRuleType timeType);
-
-    /**
-     * Constructs a <code>DateTimeRule</code> by the first/last day of week
-     * on or after/before the day of month and the time rule.  The date rule
-     * type for an instance created by this constructor is either
-     * <code>DOM_GEQ_DOM</code> or <code>DOM_LEQ_DOM</code>.
-     * 
-     * @param month         The rule month, for example, <code>Calendar::JANUARY</code>
-     * @param dayOfMonth    The day of month, 1-based.
-     * @param dayOfWeek     The day of week, for example, <code>Calendar::SUNDAY</code>.
-     * @param after         true if the rule date is on or after the day of month.
-     * @param millisInDay   The milliseconds in the rule date.
-     * @param timeType      The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
-     *                      or <code>UTC_TIME</code>.
-     * @stable ICU 3.8
-     */
-    DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after,
-        int32_t millisInDay, TimeRuleType timeType);
-
-    /**
-     * Copy constructor.
-     * @param source    The DateTimeRule object to be copied.
-     * @stable ICU 3.8
-     */
-    DateTimeRule(const DateTimeRule& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    ~DateTimeRule();
-
-    /**
-     * Clone this DateTimeRule object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @stable ICU 3.8
-     */
-    DateTimeRule* clone(void) const;
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    DateTimeRule& operator=(const DateTimeRule& right);
-
-    /**
-     * Return true if the given DateTimeRule objects are semantically equal. Objects
-     * of different subclasses are considered unequal.
-     * @param that  The object to be compared with.
-     * @return  true if the given DateTimeRule objects are semantically equal.
-     * @stable ICU 3.8
-     */
-    UBool operator==(const DateTimeRule& that) const;
-
-    /**
-     * Return true if the given DateTimeRule objects are semantically unequal. Objects
-     * of different subclasses are considered unequal.
-     * @param that  The object to be compared with.
-     * @return  true if the given DateTimeRule objects are semantically unequal.
-     * @stable ICU 3.8
-     */
-    UBool operator!=(const DateTimeRule& that) const;
-
-    /**
-     * Gets the date rule type, such as <code>DOM</code>
-     * @return The date rule type.
-     * @stable ICU 3.8
-     */
-    DateRuleType getDateRuleType(void) const;
-
-    /**
-     * Gets the time rule type
-     * @return The time rule type, either <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
-     *         or <code>UTC_TIME</code>.
-     * @stable ICU 3.8
-     */
-    TimeRuleType getTimeRuleType(void) const;
-
-    /**
-     * Gets the rule month.
-     * @return The rule month.
-     * @stable ICU 3.8
-     */
-    int32_t getRuleMonth(void) const;
-
-    /**
-     * Gets the rule day of month.  When the date rule type
-     * is <code>DOW</code>, the value is always 0.
-     * @return The rule day of month
-     * @stable ICU 3.8
-     */
-    int32_t getRuleDayOfMonth(void) const;
-
-    /**
-     * Gets the rule day of week.  When the date rule type
-     * is <code>DOM</code>, the value is always 0.
-     * @return The rule day of week.
-     * @stable ICU 3.8
-     */
-    int32_t getRuleDayOfWeek(void) const;
-
-    /**
-     * Gets the ordinal number of the occurence of the day of week
-     * in the month.  When the date rule type is not <code>DOW</code>,
-     * the value is always 0.
-     * @return The rule day of week ordinal number in the month.
-     * @stable ICU 3.8
-     */
-    int32_t getRuleWeekInMonth(void) const;
-
-    /**
-     * Gets the rule time in the rule day.
-     * @return The time in the rule day in milliseconds.
-     * @stable ICU 3.8
-     */
-    int32_t getRuleMillisInDay(void) const;
-
-private:
-    int32_t fMonth;
-    int32_t fDayOfMonth;
-    int32_t fDayOfWeek;
-    int32_t fWeekInMonth;
-    int32_t fMillisInDay;
-    DateRuleType fDateRuleType;
-    TimeRuleType fTimeRuleType;
-
-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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // DTRULE_H
-//eof
diff --git a/source/i18n/unicode/fieldpos.h b/source/i18n/unicode/fieldpos.h
deleted file mode 100644
index 38a9576..0000000
--- a/source/i18n/unicode/fieldpos.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- ********************************************************************************
- *   Copyright (C) 1997-2006, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- ********************************************************************************
- *
- * File FIELDPOS.H
- *
- * Modification History:
- *
- *   Date        Name        Description
- *   02/25/97    aliu        Converted from java.
- *   03/17/97    clhuang     Updated per Format implementation.
- *    07/17/98    stephen        Added default/copy ctors, and operators =, ==, !=
- ********************************************************************************
- */
-
-// *****************************************************************************
-// This file was generated from the java source file FieldPosition.java
-// *****************************************************************************
- 
-#ifndef FIELDPOS_H
-#define FIELDPOS_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: FieldPosition identifies the fields in a formatted output.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * <code>FieldPosition</code> is a simple class used by <code>Format</code>
- * and its subclasses to identify fields in formatted output. Fields are
- * identified by constants, whose names typically end with <code>_FIELD</code>,
- * defined in the various subclasses of <code>Format</code>. See
- * <code>ERA_FIELD</code> and its friends in <code>DateFormat</code> for
- * an example.
- *
- * <p>
- * <code>FieldPosition</code> keeps track of the position of the
- * field within the formatted output with two indices: the index
- * of the first character of the field and the index of the last
- * character of the field.
- *
- * <p>
- * One version of the <code>format</code> method in the various
- * <code>Format</code> classes requires a <code>FieldPosition</code>
- * object as an argument. You use this <code>format</code> method
- * to perform partial formatting or to get information about the
- * formatted output (such as the position of a field).
- *
- * The FieldPosition class is not suitable for subclassing.
- *
- * <p>
- * Below is an example of using <code>FieldPosition</code> to aid
- * alignment of an array of formatted floating-point numbers on
- * their decimal points:
- * <pre>
- * \code
- *       double doubleNum[] = {123456789.0, -12345678.9, 1234567.89, -123456.789,
- *                  12345.6789, -1234.56789, 123.456789, -12.3456789, 1.23456789};
- *       int dNumSize = (int)(sizeof(doubleNum)/sizeof(double));
- *       
- *       UErrorCode status = U_ZERO_ERROR;
- *       DecimalFormat* fmt = (DecimalFormat*) NumberFormat::createInstance(status);
- *       fmt->setDecimalSeparatorAlwaysShown(true);
- *       
- *       const int tempLen = 20;
- *       char temp[tempLen];
- *       
- *       for (int i=0; i<dNumSize; i++) {
- *           FieldPosition pos(NumberFormat::INTEGER_FIELD);
- *           UnicodeString buf;
- *           char fmtText[tempLen];
- *           ToCharString(fmt->format(doubleNum[i], buf, pos), fmtText);
- *           for (int j=0; j<tempLen; j++) temp[j] = ' '; // clear with spaces
- *           temp[__min(tempLen, tempLen-pos.getEndIndex())] = '\0';
- *           cout << temp << fmtText   << endl;
- *       }
- *       delete fmt;
- * \endcode
- * </pre>
- * <p>
- * The code will generate the following output:
- * <pre>
- * \code
- *           123,456,789.000
- *           -12,345,678.900
- *             1,234,567.880
- *              -123,456.789
- *                12,345.678
- *                -1,234.567
- *                   123.456
- *                   -12.345
- *                     1.234
- *  \endcode
- * </pre>
- */
-class U_I18N_API FieldPosition : public UObject {
-public:
-    /**
-     * DONT_CARE may be specified as the field to indicate that the
-     * caller doesn't need to specify a field.  Do not subclass.
-     */
-    enum { DONT_CARE = -1 };
-
-    /**
-     * Creates a FieldPosition object with a non-specified field.
-     * @stable ICU 2.0
-     */
-    FieldPosition() 
-        : UObject(), fField(DONT_CARE), fBeginIndex(0), fEndIndex(0) {}
-
-    /**
-     * Creates a FieldPosition object for the given field.  Fields are
-     * identified by constants, whose names typically end with _FIELD,
-     * in the various subclasses of Format.
-     *
-     * @see NumberFormat#INTEGER_FIELD
-     * @see NumberFormat#FRACTION_FIELD
-     * @see DateFormat#YEAR_FIELD
-     * @see DateFormat#MONTH_FIELD
-     * @stable ICU 2.0
-     */
-    FieldPosition(int32_t field) 
-        : UObject(), fField(field), fBeginIndex(0), fEndIndex(0) {}
-
-    /**
-     * Copy constructor
-     * @param copy the object to be copied from.
-     * @stable ICU 2.0
-     */
-    FieldPosition(const FieldPosition& copy) 
-        : UObject(copy), fField(copy.fField), fBeginIndex(copy.fBeginIndex), fEndIndex(copy.fEndIndex) {}
-
-    /**
-     * Destructor
-     * @stable ICU 2.0
-     */
-    virtual ~FieldPosition();
-
-    /**
-     * Assignment operator
-     * @param copy the object to be copied from.
-     * @stable ICU 2.0
-     */
-    FieldPosition&      operator=(const FieldPosition& copy);
-
-    /** 
-     * Equality operator.
-     * @param that    the object to be compared with.
-     * @return        TRUE if the two field positions are equal, FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    UBool              operator==(const FieldPosition& that) const;
-
-    /** 
-     * Equality operator.
-     * @param that    the object to be compared with.
-     * @return        TRUE if the two field positions are not equal, FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    UBool              operator!=(const FieldPosition& that) const;
-
-    /**
-     * Clone this object.
-     * Clones can be used concurrently in multiple threads.
-     * If an error occurs, then NULL is returned.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    FieldPosition *clone() const;
-
-    /**
-     * Retrieve the field identifier.
-     * @return    the field identifier.
-     * @stable ICU 2.0
-     */
-    int32_t getField(void) const { return fField; }
-
-    /**
-     * Retrieve the index of the first character in the requested field.
-     * @return    the index of the first character in the requested field.
-     * @stable ICU 2.0
-     */
-    int32_t getBeginIndex(void) const { return fBeginIndex; }
-
-    /**
-     * Retrieve the index of the character following the last character in the
-     * requested field.
-     * @return    the index of the character following the last character in the
-     *            requested field.
-     * @stable ICU 2.0
-     */
-    int32_t getEndIndex(void) const { return fEndIndex; }
- 
-    /**
-     * Set the field.
-     * @param f    the new value of the field.
-     * @stable ICU 2.0
-     */
-    void setField(int32_t f) { fField = f; }
-
-    /**
-     * Set the begin index.  For use by subclasses of Format.
-     * @param bi    the new value of the begin index
-     * @stable ICU 2.0
-     */
-    void setBeginIndex(int32_t bi) { fBeginIndex = bi; }
-
-    /**
-     * Set the end index.  For use by subclasses of Format.
-     * @param ei    the new value of the end index
-     * @stable ICU 2.0
-     */
-    void setEndIndex(int32_t ei) { fEndIndex = ei; }
-    
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-    /**
-     * Input: Desired field to determine start and end offsets for.
-     * The meaning depends on the subclass of Format.
-     */
-    int32_t fField;
-
-    /**
-     * Output: Start offset of field in text.
-     * If the field does not occur in the text, 0 is returned.
-     */
-    int32_t fBeginIndex;
-
-    /**
-     * Output: End offset of field in text.
-     * If the field does not occur in the text, 0 is returned.
-     */
-    int32_t fEndIndex;
-};
-
-inline FieldPosition&
-FieldPosition::operator=(const FieldPosition& copy)
-{
-    fField         = copy.fField;
-    fEndIndex     = copy.fEndIndex;
-    fBeginIndex = copy.fBeginIndex;
-    return *this;
-}
-
-inline UBool
-FieldPosition::operator==(const FieldPosition& copy) const
-{
-    return (fField == copy.fField &&
-        fEndIndex == copy.fEndIndex &&
-        fBeginIndex == copy.fBeginIndex);
-}
-
-inline UBool
-FieldPosition::operator!=(const FieldPosition& copy) const
-{
-    return !operator==(copy);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _FIELDPOS
-//eof
diff --git a/source/i18n/unicode/fmtable.h b/source/i18n/unicode/fmtable.h
deleted file mode 100644
index 0834037..0000000
--- a/source/i18n/unicode/fmtable.h
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File FMTABLE.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/29/97    aliu        Creation.
-********************************************************************************
-*/
-#ifndef FMTABLE_H
-#define FMTABLE_H
-
-#include "unicode/utypes.h"
-#include "unicode/unistr.h"
-#include "unicode/stringpiece.h"
-
-/**
- * \file 
- * \brief C++ API: Formattable is a thin wrapper for primitive numeric types.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-U_NAMESPACE_BEGIN
-
-class CharString;
-class DigitList;
-
-/**
- * Formattable objects can be passed to the Format class or
- * its subclasses for formatting.  Formattable is a thin wrapper
- * class which interconverts between the primitive numeric types
- * (double, long, etc.) as well as UDate and UnicodeString.
- *
- * <p>Internally, a Formattable object is a union of primitive types.
- * As such, it can only store one flavor of data at a time.  To
- * determine what flavor of data it contains, use the getType method.
- *
- * <p>As of ICU 3.0, Formattable may also wrap a UObject pointer,
- * which it owns.  This allows an instance of any ICU class to be
- * encapsulated in a Formattable.  For legacy reasons and for
- * efficiency, primitive numeric types are still stored directly
- * within a Formattable.
- *
- * <p>The Formattable class is not suitable for subclassing.
- */
-class U_I18N_API Formattable : public UObject {
-public:
-    /**
-     * This enum is only used to let callers distinguish between
-     * the Formattable(UDate) constructor and the Formattable(double)
-     * constructor; the compiler cannot distinguish the signatures,
-     * since UDate is currently typedefed to be either double or long.
-     * If UDate is changed later to be a bonafide class
-     * or struct, then we no longer need this enum.
-     * @stable ICU 2.4
-     */
-    enum ISDATE { kIsDate };
-
-    /**
-     * Default constructor
-     * @stable ICU 2.4
-     */
-    Formattable(); // Type kLong, value 0
-
-    /**
-     * Creates a Formattable object with a UDate instance.
-     * @param d the UDate instance.
-     * @param flag the flag to indicate this is a date. Always set it to kIsDate
-     * @stable ICU 2.0  
-     */
-    Formattable(UDate d, ISDATE flag);
-
-    /**
-     * Creates a Formattable object with a double number.
-     * @param d the double number.
-     * @stable ICU 2.0
-     */
-    Formattable(double d);
-
-    /**
-     * Creates a Formattable object with a long number.
-     * @param l the long number.
-     * @stable ICU 2.0
-     */
-    Formattable(int32_t l);
-
-    /**
-     * Creates a Formattable object with an int64_t number
-     * @param ll the int64_t number.
-     * @stable ICU 2.8
-     */
-    Formattable(int64_t ll);
-
-#if !UCONFIG_NO_CONVERSION
-    /**
-     * Creates a Formattable object with a char string pointer.
-     * Assumes that the char string is null terminated.
-     * @param strToCopy the char string.
-     * @stable ICU 2.0
-     */
-    Formattable(const char* strToCopy);
-#endif
-
-    /**
-     * Creates a Formattable object of an appropriate numeric type from a
-     * a decimal number in string form.  The Formattable will retain the
-     * full precision of the input in decimal format, even when it exceeds
-     * what can be represented by a double of int64_t.
-     *
-     * @param number  the unformatted (not localized) string representation
-     *                     of the Decimal number.
-     * @param status  the error code.  Possible errors include U_INVALID_FORMAT_ERROR
-     *                if the format of the string does not conform to that of a
-     *                decimal number.
-     * @stable ICU 4.4
-     */
-    Formattable(const StringPiece &number, UErrorCode &status);
-
-    /**
-     * Creates a Formattable object with a UnicodeString object to copy from.
-     * @param strToCopy the UnicodeString string.
-     * @stable ICU 2.0
-     */
-    Formattable(const UnicodeString& strToCopy);
-
-    /**
-     * Creates a Formattable object with a UnicodeString object to adopt from.
-     * @param strToAdopt the UnicodeString string.
-     * @stable ICU 2.0
-     */
-    Formattable(UnicodeString* strToAdopt);
-
-    /**
-     * Creates a Formattable object with an array of Formattable objects.
-     * @param arrayToCopy the Formattable object array.
-     * @param count the array count.
-     * @stable ICU 2.0
-     */
-    Formattable(const Formattable* arrayToCopy, int32_t count);
-
-    /**
-     * Creates a Formattable object that adopts the given UObject.
-     * @param objectToAdopt the UObject to set this object to
-     * @stable ICU 3.0
-     */
-    Formattable(UObject* objectToAdopt);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 2.0
-     */
-    Formattable(const Formattable&);
-
-    /**
-     * Assignment operator.
-     * @param rhs   The Formattable object to copy into this object.
-     * @stable ICU 2.0
-     */
-    Formattable&    operator=(const Formattable &rhs);
-
-    /**
-     * Equality comparison.
-     * @param other    the object to be compared with.
-     * @return        TRUE if other are equal to this, FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    UBool          operator==(const Formattable &other) const;
-    
-    /** 
-     * Equality operator.
-     * @param other    the object to be compared with.
-     * @return        TRUE if other are unequal to this, FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    UBool          operator!=(const Formattable& other) const
-      { return !operator==(other); }
-
-    /** 
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual         ~Formattable();
-
-    /**
-     * Clone this object.
-     * Clones can be used concurrently in multiple threads.
-     * If an error occurs, then NULL is returned.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    Formattable *clone() const;
-
-    /** 
-     * Selector for flavor of data type contained within a
-     * Formattable object.  Formattable is a union of several
-     * different types, and at any time contains exactly one type.
-     * @stable ICU 2.4
-     */
-    enum Type {
-        /**
-         * Selector indicating a UDate value.  Use getDate to retrieve
-         * the value.
-         * @stable ICU 2.4
-         */
-        kDate,
-
-        /**
-         * Selector indicating a double value.  Use getDouble to
-         * retrieve the value.
-         * @stable ICU 2.4
-         */
-        kDouble,
-
-        /**
-         * Selector indicating a 32-bit integer value.  Use getLong to
-         * retrieve the value.
-         * @stable ICU 2.4
-         */
-        kLong,
-
-        /**
-         * Selector indicating a UnicodeString value.  Use getString
-         * to retrieve the value.
-         * @stable ICU 2.4
-         */
-        kString,
-
-        /**
-         * Selector indicating an array of Formattables.  Use getArray
-         * to retrieve the value.
-         * @stable ICU 2.4
-         */
-        kArray,
-
-        /**
-         * Selector indicating a 64-bit integer value.  Use getInt64
-         * to retrieve the value.
-         * @stable ICU 2.8
-         */
-        kInt64,
-
-        /**
-         * Selector indicating a UObject value.  Use getObject to
-         * retrieve the value.
-         * @stable ICU 3.0
-         */
-        kObject
-   };
-
-    /**
-     * Gets the data type of this Formattable object.
-     * @return    the data type of this Formattable object.
-     * @stable ICU 2.0
-     */
-    Type            getType(void) const;
-    
-    /**
-     * Returns TRUE if the data type of this Formattable object
-     * is kDouble, kLong, kInt64 or kDecimalNumber.
-     * @return TRUE if this is a pure numeric object
-     * @stable ICU 3.0
-     */
-    UBool           isNumeric() const;
-    
-    /**
-     * Gets the double value of this object. If this object is not of type
-     * kDouble then the result is undefined.
-     * @return    the double value of this object.
-     * @stable ICU 2.0
-     */ 
-    double          getDouble(void) const { return fValue.fDouble; }
-
-    /**
-     * Gets the double value of this object. If this object is of type
-     * long, int64 or Decimal Number then a conversion is peformed, with
-     * possible loss of precision.  If the type is kObject and the
-     * object is a Measure, then the result of
-     * getNumber().getDouble(status) is returned.  If this object is
-     * neither a numeric type nor a Measure, then 0 is returned and
-     * the status is set to U_INVALID_FORMAT_ERROR.
-     * @param status the error code
-     * @return the double value of this object.
-     * @stable ICU 3.0
-     */ 
-    double          getDouble(UErrorCode& status) const;
-
-    /**
-     * Gets the long value of this object. If this object is not of type
-     * kLong then the result is undefined.
-     * @return    the long value of this object.
-     * @stable ICU 2.0
-     */ 
-    int32_t         getLong(void) const { return (int32_t)fValue.fInt64; }
-
-    /**
-     * Gets the long value of this object. If the magnitude is too
-     * large to fit in a long, then the maximum or minimum long value,
-     * as appropriate, is returned and the status is set to
-     * U_INVALID_FORMAT_ERROR.  If this object is of type kInt64 and
-     * it fits within a long, then no precision is lost.  If it is of
-     * type kDouble or kDecimalNumber, then a conversion is peformed, with
-     * truncation of any fractional part.  If the type is kObject and
-     * the object is a Measure, then the result of
-     * getNumber().getLong(status) is returned.  If this object is
-     * neither a numeric type nor a Measure, then 0 is returned and
-     * the status is set to U_INVALID_FORMAT_ERROR.
-     * @param status the error code
-     * @return    the long value of this object.
-     * @stable ICU 3.0
-     */ 
-    int32_t         getLong(UErrorCode& status) const;
-
-    /**
-     * Gets the int64 value of this object. If this object is not of type
-     * kInt64 then the result is undefined.
-     * @return    the int64 value of this object.
-     * @stable ICU 2.8
-     */ 
-    int64_t         getInt64(void) const { return fValue.fInt64; }
-
-    /**
-     * Gets the int64 value of this object. If this object is of a numeric
-     * type and the magnitude is too large to fit in an int64, then
-     * the maximum or minimum int64 value, as appropriate, is returned
-     * and the status is set to U_INVALID_FORMAT_ERROR.  If the
-     * magnitude fits in an int64, then a casting conversion is
-     * peformed, with truncation of any fractional part.  If the type
-     * is kObject and the object is a Measure, then the result of
-     * getNumber().getDouble(status) is returned.  If this object is
-     * neither a numeric type nor a Measure, then 0 is returned and
-     * the status is set to U_INVALID_FORMAT_ERROR.
-     * @param status the error code
-     * @return    the int64 value of this object.
-     * @stable ICU 3.0
-     */ 
-    int64_t         getInt64(UErrorCode& status) const;
-
-    /**
-     * Gets the Date value of this object. If this object is not of type
-     * kDate then the result is undefined.
-     * @return    the Date value of this object.
-     * @stable ICU 2.0
-     */ 
-    UDate           getDate() const { return fValue.fDate; }
-
-    /**
-     * Gets the Date value of this object.  If the type is not a date,
-     * status is set to U_INVALID_FORMAT_ERROR and the return value is
-     * undefined.
-     * @param status the error code.
-     * @return    the Date value of this object.
-     * @stable ICU 3.0
-     */ 
-     UDate          getDate(UErrorCode& status) const;
-
-    /**
-     * Gets the string value of this object. If this object is not of type
-     * kString then the result is undefined.
-     * @param result    Output param to receive the Date value of this object.
-     * @return          A reference to 'result'.
-     * @stable ICU 2.0
-     */ 
-    UnicodeString&  getString(UnicodeString& result) const
-      { result=*fValue.fString; return result; }
-
-    /**
-     * Gets the string value of this object. If the type is not a
-     * string, status is set to U_INVALID_FORMAT_ERROR and a bogus
-     * string is returned.
-     * @param result    Output param to receive the Date value of this object.
-     * @param status    the error code. 
-     * @return          A reference to 'result'.
-     * @stable ICU 3.0
-     */ 
-    UnicodeString&  getString(UnicodeString& result, UErrorCode& status) const;
-
-    /**
-     * Gets a const reference to the string value of this object. If
-     * this object is not of type kString then the result is
-     * undefined.
-     * @return   a const reference to the string value of this object.
-     * @stable ICU 2.0
-     */
-    inline const UnicodeString& getString(void) const;
-
-    /**
-     * Gets a const reference to the string value of this object.  If
-     * the type is not a string, status is set to
-     * U_INVALID_FORMAT_ERROR and the result is a bogus string.
-     * @param status    the error code.
-     * @return   a const reference to the string value of this object.
-     * @stable ICU 3.0
-     */
-    const UnicodeString& getString(UErrorCode& status) const;
-
-    /**
-     * Gets a reference to the string value of this object. If this
-     * object is not of type kString then the result is undefined.
-     * @return   a reference to the string value of this object.
-     * @stable ICU 2.0
-     */
-    inline UnicodeString& getString(void);
-
-    /**
-     * Gets a reference to the string value of this object. If the
-     * type is not a string, status is set to U_INVALID_FORMAT_ERROR
-     * and the result is a bogus string.
-     * @param status    the error code. 
-     * @return   a reference to the string value of this object.
-     * @stable ICU 3.0
-     */
-    UnicodeString& getString(UErrorCode& status);
-
-    /**
-     * Gets the array value and count of this object. If this object
-     * is not of type kArray then the result is undefined.
-     * @param count    fill-in with the count of this object.
-     * @return         the array value of this object.
-     * @stable ICU 2.0
-     */ 
-    const Formattable* getArray(int32_t& count) const
-      { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; }
-
-    /**
-     * Gets the array value and count of this object. If the type is
-     * not an array, status is set to U_INVALID_FORMAT_ERROR, count is
-     * set to 0, and the result is NULL.
-     * @param count    fill-in with the count of this object.
-     * @param status the error code. 
-     * @return         the array value of this object.
-     * @stable ICU 3.0
-     */ 
-    const Formattable* getArray(int32_t& count, UErrorCode& status) const;
-
-    /**
-     * Accesses the specified element in the array value of this
-     * Formattable object. If this object is not of type kArray then
-     * the result is undefined.
-     * @param index the specified index.
-     * @return the accessed element in the array.
-     * @stable ICU 2.0
-     */
-    Formattable&    operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; }
-       
-    /**
-     * Returns a pointer to the UObject contained within this
-     * formattable, or NULL if this object does not contain a UObject.
-     * @return a UObject pointer, or NULL
-     * @stable ICU 3.0
-     */
-    const UObject*  getObject() const;
-
-    /**
-     * Returns a numeric string representation of the number contained within this
-     * formattable, or NULL if this object does not contain numeric type.
-     * For values obtained by parsing, the returned decimal number retains
-     * the full precision and range of the original input, unconstrained by
-     * the limits of a double floating point or a 64 bit int.
-     * 
-     * This function is not thread safe, and therfore is not declared const,
-     * even though it is logically const.
-     *
-     * Possible errors include U_MEMORY_ALLOCATION_ERROR, and
-     * U_INVALID_STATE if the formattable object has not been set to
-     * a numeric type.
-     *
-     * @param status the error code.
-     * @return the unformatted string representation of a number.
-     * @stable ICU 4.4
-     */
-    StringPiece getDecimalNumber(UErrorCode &status);
-
-     /**
-     * Sets the double value of this object and changes the type to
-     * kDouble.
-     * @param d    the new double value to be set.
-     * @stable ICU 2.0
-     */ 
-    void            setDouble(double d);
-
-    /**
-     * Sets the long value of this object and changes the type to
-     * kLong.
-     * @param l    the new long value to be set.
-     * @stable ICU 2.0
-     */ 
-    void            setLong(int32_t l);
-
-    /**
-     * Sets the int64 value of this object and changes the type to
-     * kInt64.
-     * @param ll    the new int64 value to be set.
-     * @stable ICU 2.8
-     */ 
-    void            setInt64(int64_t ll);
-
-    /**
-     * Sets the Date value of this object and changes the type to
-     * kDate.
-     * @param d    the new Date value to be set.
-     * @stable ICU 2.0
-     */ 
-    void            setDate(UDate d);
-
-    /**
-     * Sets the string value of this object and changes the type to
-     * kString.
-     * @param stringToCopy    the new string value to be set.
-     * @stable ICU 2.0
-     */ 
-    void            setString(const UnicodeString& stringToCopy);
-
-    /**
-     * Sets the array value and count of this object and changes the
-     * type to kArray.
-     * @param array    the array value.
-     * @param count    the number of array elements to be copied.
-     * @stable ICU 2.0
-     */ 
-    void            setArray(const Formattable* array, int32_t count);
-
-    /**
-     * Sets and adopts the string value and count of this object and
-     * changes the type to kArray.
-     * @param stringToAdopt    the new string value to be adopted.
-     * @stable ICU 2.0
-     */ 
-    void            adoptString(UnicodeString* stringToAdopt);
-
-    /**
-     * Sets and adopts the array value and count of this object and
-     * changes the type to kArray.
-     * @stable ICU 2.0
-     */ 
-    void            adoptArray(Formattable* array, int32_t count);
-       
-    /**
-     * Sets and adopts the UObject value of this object and changes
-     * the type to kObject.  After this call, the caller must not
-     * delete the given object.
-     * @param objectToAdopt the UObject value to be adopted
-     * @stable ICU 3.0
-     */
-    void            adoptObject(UObject* objectToAdopt);
-
-    /**
-     * Sets the the numeric value from a decimal number string, and changes
-     * the type to to a numeric type appropriate for the number.  
-     * The syntax of the number is a "numeric string"
-     * as defined in the Decimal Arithmetic Specification, available at
-     * http://speleotrove.com/decimal
-     * The full precision and range of the input number will be retained,
-     * even when it exceeds what can be represented by a double or an int64.
-     *
-     * @param numberString  a string representation of the unformatted decimal number.
-     * @param status        the error code.  Set to U_INVALID_FORMAT_ERROR if the
-     *                      incoming string is not a valid decimal number.
-     * @stable ICU 4.4
-     */
-    void             setDecimalNumber(const StringPiece &numberString,
-                                      UErrorCode &status);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    /**
-     * Deprecated variant of getLong(UErrorCode&).
-     * @param status the error code
-     * @return the long value of this object.
-     * @deprecated ICU 3.0 use getLong(UErrorCode&) instead
-     */ 
-    inline int32_t getLong(UErrorCode* status) const;
-
-    /**
-     * Internal function, do not use.
-     * TODO:  figure out how to make this be non-public.
-     *        NumberFormat::format(Formattable, ...
-     *        needs to get at the DigitList, if it exists, for
-     *        big decimal formatting.
-     *  @internal
-     */
-    DigitList *getDigitList() const { return fDecimalNum;};
-
-    /**
-     *  Adopt, and set value from, a DigitList
-     *     Internal Function, do not use.
-     *  @param dl the Digit List to be adopted
-     *  @internal
-     */
-    void adoptDigitList(DigitList *dl);
-
-private:
-    /**
-     * Cleans up the memory for unwanted values.  For example, the adopted
-     * string or array objects.
-     */
-    void            dispose(void);
-
-    /**
-     * Common initialization, for use by constructors.
-     */
-    void            init();
-
-    UnicodeString* getBogus() const;
-
-    union {
-        UObject*        fObject;
-        UnicodeString*  fString;
-        double          fDouble;
-        int64_t         fInt64;
-        UDate           fDate;
-        struct {
-          Formattable*  fArray;
-          int32_t       fCount;
-        }               fArrayAndCount;
-    } fValue;
-
-    CharString           *fDecimalStr;
-    DigitList            *fDecimalNum;
-
-    Type                fType;
-    UnicodeString       fBogus; // Bogus string when it's needed.
-};
-
-inline UDate Formattable::getDate(UErrorCode& status) const {
-    if (fType != kDate) {
-        if (U_SUCCESS(status)) {
-            status = U_INVALID_FORMAT_ERROR;
-        }
-        return 0;
-    }
-    return fValue.fDate;
-}
-
-inline const UnicodeString& Formattable::getString(void) const {
-    return *fValue.fString;
-}
-
-inline UnicodeString& Formattable::getString(void) {
-    return *fValue.fString;
-}
-
-inline int32_t Formattable::getLong(UErrorCode* status) const {
-    return getLong(*status);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif //_FMTABLE
-//eof
diff --git a/source/i18n/unicode/format.h b/source/i18n/unicode/format.h
deleted file mode 100644
index 5651c9e..0000000
--- a/source/i18n/unicode/format.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-********************************************************************************
-* Copyright (C) 1997-2010, International Business Machines Corporation and others.
-* All Rights Reserved.
-********************************************************************************
-*
-* File FORMAT.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*   03/17/97    clhuang     Updated per C++ implementation.
-*   03/27/97    helena      Updated to pass the simple test after code review.
-********************************************************************************
-*/
-// *****************************************************************************
-// This file was generated from the java source file Format.java
-// *****************************************************************************
-
-#ifndef FORMAT_H
-#define FORMAT_H
-
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Base class for all formats. 
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/unistr.h"
-#include "unicode/fmtable.h"
-#include "unicode/fieldpos.h"
-#include "unicode/fpositer.h"
-#include "unicode/parsepos.h"
-#include "unicode/parseerr.h" 
-#include "unicode/locid.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Base class for all formats.  This is an abstract base class which
- * specifies the protocol for classes which convert other objects or
- * values, such as numeric values and dates, and their string
- * representations.  In some cases these representations may be
- * localized or contain localized characters or strings.  For example,
- * a numeric formatter such as DecimalFormat may convert a numeric
- * value such as 12345 to the string "$12,345".  It may also parse
- * the string back into a numeric value.  A date and time formatter
- * like SimpleDateFormat may represent a specific date, encoded
- * numerically, as a string such as "Wednesday, February 26, 1997 AD".
- * <P>
- * Many of the concrete subclasses of Format employ the notion of
- * a pattern.  A pattern is a string representation of the rules which
- * govern the interconversion between values and strings.  For example,
- * a DecimalFormat object may be associated with the pattern
- * "$#,##0.00;($#,##0.00)", which is a common US English format for
- * currency values, yielding strings such as "$1,234.45" for 1234.45,
- * and "($987.65)" for 987.6543.  The specific syntax of a pattern
- * is defined by each subclass.
- * <P>
- * Even though many subclasses use patterns, the notion of a pattern
- * is not inherent to Format classes in general, and is not part of
- * the explicit base class protocol.
- * <P>
- * Two complex formatting classes bear mentioning.  These are
- * MessageFormat and ChoiceFormat.  ChoiceFormat is a subclass of
- * NumberFormat which allows the user to format different number ranges
- * as strings.  For instance, 0 may be represented as "no files", 1 as
- * "one file", and any number greater than 1 as "many files".
- * MessageFormat is a formatter which utilizes other Format objects to
- * format a string containing with multiple values.  For instance,
- * A MessageFormat object might produce the string "There are no files
- * on the disk MyDisk on February 27, 1997." given the arguments 0,
- * "MyDisk", and the date value of 2/27/97.  See the ChoiceFormat
- * and MessageFormat headers for further information.
- * <P>
- * If formatting is unsuccessful, a failing UErrorCode is returned when
- * the Format cannot format the type of object, otherwise if there is
- * something illformed about the the Unicode replacement character
- * 0xFFFD is returned.
- * <P>
- * If there is no match when parsing, a parse failure UErrorCode is
- * retured for methods which take no ParsePosition.  For the method
- * that takes a ParsePosition, the index parameter is left unchanged.
- * <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 Format : public UObject {
-public:
-
-    /** Destructor
-     * @stable ICU 2.4
-     */
-    virtual ~Format();
-
-    /**
-     * 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         Return true if the given Format objects are semantically equal.
-     *                 Objects of different subclasses are considered unequal.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const Format& other) const = 0;
-
-    /**
-     * Return true if the given Format objects are not semantically
-     * equal.
-     * @param other    the object to be compared with.
-     * @return         Return true if the given Format objects are not semantically.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const Format& other) const { return !operator==(other); }
-
-    /**
-     * Clone this object polymorphically.  The caller is responsible
-     * for deleting the result when done.
-     * @return    A copy of the object
-     * @stable ICU 2.0
-     */
-    virtual Format* clone() const = 0;
-
-    /**
-     * 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;
-
-    /**
-     * Format an object to produce a string.  This is a pure virtual method which
-     * subclasses must implement. This method allows polymorphic formatting
-     * of Formattable objects. If a subclass of Format receives a Formattable
-     * object type it doesn't handle (e.g., if a numeric Formattable is passed
-     * to a DateFormat object) then it returns a failing UErrorCode.
-     *
-     * @param obj       The object to format.
-     * @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 = 0;
-    /**
-     * Format an object to produce a string.  Subclasses should override this
-     * method. This method allows polymorphic formatting of Formattable objects.
-     * If a subclass of Format receives a Formattable object type it doesn't
-     * handle (e.g., if a numeric Formattable is passed to a DateFormat object)
-     * then it returns a failing UErrorCode.
-     *
-     * @param obj       The object to format.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& format(const Formattable& obj,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-    /**
-     * Parse a string to produce an object.  This is a pure virtual
-     * method which subclasses must implement.  This method allows
-     * polymorphic parsing of strings into Formattable objects.
-     * <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 successful
-     * parse), while trailing whitespace is left as is.
-     * <P>
-     * Example:
-     * <P>
-     * Parsing "_12_xy" (where _ represents a space) for a number,
-     * with index == 0 will result in the number 12, with
-     * parse_pos.index updated to 3 (just before the second space).
-     * Parsing a second time will result in a failing UErrorCode since
-     * "xy" is not a number, and leave index at 3.
-     * <P>
-     * Subclasses will typically supply specific parse methods that
-     * return different types of values. Since methods can't overload
-     * on return types, these will typically be named "parse", while
-     * this polymorphic method will always be called parseObject.  Any
-     * parse method that does not take a parse_pos should set status
-     * to an error value when no text in the required format is at the
-     * start position.
-     *
-     * @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.
-     * @stable ICU 2.0
-     */
-    virtual void parseObject(const UnicodeString& source,
-                             Formattable& result,
-                             ParsePosition& parse_pos) const = 0;
-
-    /**
-     * Parses a string to produce an object. This is a convenience method
-     * which calls the pure virtual parseObject() method, and returns a
-     * failure UErrorCode if the ParsePosition indicates failure.
-     *
-     * @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 status    Output param to be filled with success/failure
-     *                  result code.
-     * @stable ICU 2.0
-     */
-    void parseObject(const UnicodeString& source,
-                     Formattable& result,
-                     UErrorCode& status) const;
-
-    /** Get the locale for this format 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
-     *  @stable ICU 2.8
-     */
-    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
-
-    /** Get the locale for this format 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;
-
- protected:
-    /** @stable ICU 2.8 */
-    void setLocaleIDs(const char* valid, const char* actual);
-
-protected:
-    /**
-     * Default constructor for subclass use only.  Does nothing.
-     * @stable ICU 2.0
-     */
-    Format();
-
-    /**
-     * @stable ICU 2.0
-     */
-    Format(const Format&); // Does nothing; for subclasses only
-
-    /**
-     * @stable ICU 2.0
-     */
-    Format& operator=(const Format&); // Does nothing; for subclasses
-
-       
-    /**
-     * Simple function for initializing a UParseError from a UnicodeString.
-     *
-     * @param pattern The pattern to copy into the parseError
-     * @param pos The position in pattern where the error occured
-     * @param parseError The UParseError object to fill in
-     * @stable ICU 2.4
-     */
-    static void syntaxError(const UnicodeString& pattern,
-                            int32_t pos,
-                            UParseError& parseError);
-
- private:
-    char actualLocale[ULOC_FULLNAME_CAPACITY];
-    char validLocale[ULOC_FULLNAME_CAPACITY];
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _FORMAT
-//eof
diff --git a/source/i18n/unicode/fpositer.h b/source/i18n/unicode/fpositer.h
deleted file mode 100644
index ecaa777..0000000
--- a/source/i18n/unicode/fpositer.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-********************************************************************************
-*   Copyright (C) 2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-********************************************************************************
-*
-* File attiter.h
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   12/15/2009  dougfelt    Created
-********************************************************************************
-*/
-
-#ifndef FPOSITER_H
-#define FPOSITER_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-
-/**
- * \file
- * \brief C++ API: FieldPosition Iterator.
- */
-
-#if UCONFIG_NO_FORMATTING
-
-U_NAMESPACE_BEGIN
-
-/*
- * Allow the declaration of APIs with pointers to FieldPositionIterator
- * even when formatting is removed from the build.
- */
-class FieldPositionIterator;
-
-U_NAMESPACE_END
-
-#else
-
-#include "unicode/fieldpos.h"
-#include "unicode/umisc.h"
-
-U_NAMESPACE_BEGIN
-
-class UVector32;
-
-/**
- * FieldPositionIterator returns the field ids and their start/limit positions generated
- * by a call to Format::format.  See Format, NumberFormat, DecimalFormat.
- * @stable ICU 4.4
- */
-class U_I18N_API FieldPositionIterator : public UObject {
-public:
-    /**
-     * Destructor.
-     * @stable ICU 4.4
-     */
-    ~FieldPositionIterator();
-
-    /**
-     * Constructs a new, empty iterator.
-     * @stable ICU 4.4
-     */
-    FieldPositionIterator(void);
-
-    /**
-     * Copy constructor.  If the copy failed for some reason, the new iterator will
-     * be empty.
-     * @stable ICU 4.4
-     */
-    FieldPositionIterator(const FieldPositionIterator&);
-
-    /**
-     * Return true if another object is semantically equal to this
-     * one.
-     * <p>
-     * Return true if this FieldPositionIterator is at the same position in an
-     * equal array of run values.
-     * @stable ICU 4.4
-     */
-    UBool operator==(const FieldPositionIterator&) const;
-
-    /**
-     * Returns the complement of the result of operator==
-     * @param rhs The FieldPositionIterator to be compared for inequality
-     * @return the complement of the result of operator==
-     * @stable ICU 4.4
-     */
-    UBool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); }
-
-    /**
-     * If the current position is valid, updates the FieldPosition values, advances the iterator,
-     * and returns TRUE, otherwise returns FALSE.
-     * @stable ICU 4.4
-     */
-    UBool next(FieldPosition& fp);
-
-private:
-    friend class FieldPositionIteratorHandler;
-
-    /**
-     * Sets the data used by the iterator, and resets the position.
-     * Returns U_ILLEGAL_ARGUMENT_ERROR in status if the data is not valid 
-     * (length is not a multiple of 3, or start >= limit for any run).
-     */
-    void setData(UVector32 *adopt, UErrorCode& status);
-
-    UVector32 *data;
-    int32_t pos;
-
-    // No ICU "poor man's RTTI" for this class nor its subclasses.
-    virtual UClassID getDynamicClassID() const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // FPOSITER_H
diff --git a/source/i18n/unicode/gregocal.h b/source/i18n/unicode/gregocal.h
deleted file mode 100644
index c17b6fe..0000000
--- a/source/i18n/unicode/gregocal.h
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
-* Copyright (C) 1997-2009, International Business Machines Corporation and others.
-* All Rights Reserved.
-********************************************************************************
-*
-* File GREGOCAL.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   04/22/97    aliu        Overhauled header.
-*    07/28/98    stephen        Sync with JDK 1.2
-*    09/04/98    stephen        Re-sync with JDK 8/31 putback
-*    09/14/98    stephen        Changed type of kOneDay, kOneWeek to double.
-*                            Fixed bug in roll()
-*   10/15/99    aliu        Fixed j31, incorrect WEEK_OF_YEAR computation.
-*                           Added documentation of WEEK_OF_YEAR computation.
-*   10/15/99    aliu        Fixed j32, cannot set date to Feb 29 2000 AD.
-*                           {JDK bug 4210209 4209272}
-*   11/07/2003  srl         Update, clean up documentation.
-********************************************************************************
-*/
-
-#ifndef GREGOCAL_H
-#define GREGOCAL_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/calendar.h"
-
-/**
- * \file 
- * \brief C++ API: Concrete class which provides the standard calendar.
- */
-
-U_NAMESPACE_BEGIN
-
-/** 
- * Concrete class which provides the standard calendar used by most of the world.
- * <P>
- * The standard (Gregorian) calendar has 2 eras, BC and AD.
- * <P>
- * This implementation handles a single discontinuity, which corresponds by default to
- * the date the Gregorian calendar was originally instituted (October 15, 1582). Not all
- * countries adopted the Gregorian calendar then, so this cutover date may be changed by
- * the caller.
- * <P>
- * Prior to the institution of the Gregorian Calendar, New Year's Day was March 25. To
- * avoid confusion, this Calendar always uses January 1. A manual adjustment may be made
- * if desired for dates that are prior to the Gregorian changeover and which fall
- * between January 1 and March 24.
- *
- * <p>Values calculated for the <code>WEEK_OF_YEAR</code> field range from 1 to
- * 53.  Week 1 for a year is the first week that contains at least
- * <code>getMinimalDaysInFirstWeek()</code> days from that year.  It thus
- * depends on the values of <code>getMinimalDaysInFirstWeek()</code>,
- * <code>getFirstDayOfWeek()</code>, and the day of the week of January 1.
- * Weeks between week 1 of one year and week 1 of the following year are
- * numbered sequentially from 2 to 52 or 53 (as needed).
- *
- * <p>For example, January 1, 1998 was a Thursday.  If
- * <code>getFirstDayOfWeek()</code> is <code>MONDAY</code> and
- * <code>getMinimalDaysInFirstWeek()</code> is 4 (these are the values
- * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts
- * on December 29, 1997, and ends on January 4, 1998.  If, however,
- * <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>, then week 1 of 1998
- * starts on January 4, 1998, and ends on January 10, 1998; the first three days
- * of 1998 then are part of week 53 of 1997.
- *
- * <p>Example for using GregorianCalendar:
- * <pre>
- * \code
- *     // get the supported ids for GMT-08:00 (Pacific Standard Time)
- *     UErrorCode success = U_ZERO_ERROR;
- *     const StringEnumeration *ids = TimeZone::createEnumeration(-8 * 60 * 60 * 1000);
- *     // if no ids were returned, something is wrong. get out.
- *     if (ids == 0 || ids->count(success) == 0) {
- *         return;
- *     }
- *
- *     // begin output
- *     cout << "Current Time" << endl;
- *
- *     // create a Pacific Standard Time time zone
- *     SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids->unext(NULL, success)));
- *
- *     // set up rules for daylight savings time
- *     pdt->setStartRule(UCAL_MARCH, 1, UCAL_SUNDAY, 2 * 60 * 60 * 1000);
- *     pdt->setEndRule(UCAL_NOVEMBER, 2, UCAL_SUNDAY, 2 * 60 * 60 * 1000);
- *
- *     // create a GregorianCalendar with the Pacific Daylight time zone
- *     // and the current date and time
- *     Calendar* calendar = new GregorianCalendar( pdt, success );
- *
- *     // print out a bunch of interesting things
- *     cout << "ERA: " << calendar->get( UCAL_ERA, success ) << endl;
- *     cout << "YEAR: " << calendar->get( UCAL_YEAR, success ) << endl;
- *     cout << "MONTH: " << calendar->get( UCAL_MONTH, success ) << endl;
- *     cout << "WEEK_OF_YEAR: " << calendar->get( UCAL_WEEK_OF_YEAR, success ) << endl;
- *     cout << "WEEK_OF_MONTH: " << calendar->get( UCAL_WEEK_OF_MONTH, success ) << endl;
- *     cout << "DATE: " << calendar->get( UCAL_DATE, success ) << endl;
- *     cout << "DAY_OF_MONTH: " << calendar->get( UCAL_DAY_OF_MONTH, success ) << endl;
- *     cout << "DAY_OF_YEAR: " << calendar->get( UCAL_DAY_OF_YEAR, success ) << endl;
- *     cout << "DAY_OF_WEEK: " << calendar->get( UCAL_DAY_OF_WEEK, success ) << endl;
- *     cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( UCAL_DAY_OF_WEEK_IN_MONTH, success ) << endl;
- *     cout << "AM_PM: " << calendar->get( UCAL_AM_PM, success ) << endl;
- *     cout << "HOUR: " << calendar->get( UCAL_HOUR, success ) << endl;
- *     cout << "HOUR_OF_DAY: " << calendar->get( UCAL_HOUR_OF_DAY, success ) << endl;
- *     cout << "MINUTE: " << calendar->get( UCAL_MINUTE, success ) << endl;
- *     cout << "SECOND: " << calendar->get( UCAL_SECOND, success ) << endl;
- *     cout << "MILLISECOND: " << calendar->get( UCAL_MILLISECOND, success ) << endl;
- *     cout << "ZONE_OFFSET: " << (calendar->get( UCAL_ZONE_OFFSET, success )/(60*60*1000)) << endl;
- *     cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl;
- *
- *     cout << "Current Time, with hour reset to 3" << endl;
- *     calendar->clear(UCAL_HOUR_OF_DAY); // so doesn't override
- *     calendar->set(UCAL_HOUR, 3);
- *     cout << "ERA: " << calendar->get( UCAL_ERA, success ) << endl;
- *     cout << "YEAR: " << calendar->get( UCAL_YEAR, success ) << endl;
- *     cout << "MONTH: " << calendar->get( UCAL_MONTH, success ) << endl;
- *     cout << "WEEK_OF_YEAR: " << calendar->get( UCAL_WEEK_OF_YEAR, success ) << endl;
- *     cout << "WEEK_OF_MONTH: " << calendar->get( UCAL_WEEK_OF_MONTH, success ) << endl;
- *     cout << "DATE: " << calendar->get( UCAL_DATE, success ) << endl;
- *     cout << "DAY_OF_MONTH: " << calendar->get( UCAL_DAY_OF_MONTH, success ) << endl;
- *     cout << "DAY_OF_YEAR: " << calendar->get( UCAL_DAY_OF_YEAR, success ) << endl;
- *     cout << "DAY_OF_WEEK: " << calendar->get( UCAL_DAY_OF_WEEK, success ) << endl;
- *     cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( UCAL_DAY_OF_WEEK_IN_MONTH, success ) << endl;
- *     cout << "AM_PM: " << calendar->get( UCAL_AM_PM, success ) << endl;
- *     cout << "HOUR: " << calendar->get( UCAL_HOUR, success ) << endl;
- *     cout << "HOUR_OF_DAY: " << calendar->get( UCAL_HOUR_OF_DAY, success ) << endl;
- *     cout << "MINUTE: " << calendar->get( UCAL_MINUTE, success ) << endl;
- *     cout << "SECOND: " << calendar->get( UCAL_SECOND, success ) << endl;
- *     cout << "MILLISECOND: " << calendar->get( UCAL_MILLISECOND, success ) << endl;
- *     cout << "ZONE_OFFSET: " << (calendar->get( UCAL_ZONE_OFFSET, success )/(60*60*1000)) << endl; // in hours
- *     cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl; // in hours
- *
- *     if (U_FAILURE(success)) {
- *         cout << "An error occured. success=" << u_errorName(success) << endl;
- *     }
- *
- *     delete ids;
- *     delete calendar; // also deletes pdt
- * \endcode
- * </pre>
- * @stable ICU 2.0
- */
-class U_I18N_API GregorianCalendar: public Calendar {
-public:
-
-    /**
-     * Useful constants for GregorianCalendar and TimeZone.
-     * @stable ICU 2.0
-     */
-    enum EEras {
-        BC,
-        AD
-    };
-
-    /**
-     * Constructs a default GregorianCalendar using the current time in the default time
-     * zone with the default locale.
-     *
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar based on the current time in the given time zone
-     * with the default locale. Clients are no longer responsible for deleting the given
-     * time zone object after it's adopted.
-     *
-     * @param zoneToAdopt     The given timezone.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar based on the current time in the given time zone
-     * with the default locale.
-     *
-     * @param zone     The given timezone.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(const TimeZone& zone, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar based on the current time in the default time zone
-     * with the given locale.
-     *
-     * @param aLocale  The given locale.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar based on the current time in the given time zone
-     * with the given locale. Clients are no longer responsible for deleting the given
-     * time zone object after it's adopted.
-     *
-     * @param zoneToAdopt     The given timezone.
-     * @param aLocale  The given locale.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar based on the current time in the given time zone
-     * with the given locale.
-     *
-     * @param zone     The given timezone.
-     * @param aLocale  The given locale.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar with the given AD date set in the default time
-     * zone with the default locale.
-     *
-     * @param year     The value used to set the YEAR time field in the calendar.
-     * @param month    The value used to set the MONTH time field in the calendar. Month
-     *                 value is 0-based. e.g., 0 for January.
-     * @param date     The value used to set the DATE time field in the calendar.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar with the given AD date and time set for the
-     * default time zone with the default locale.
-     *
-     * @param year     The value used to set the YEAR time field in the calendar.
-     * @param month    The value used to set the MONTH time field in the calendar. Month
-     *                 value is 0-based. e.g., 0 for January.
-     * @param date     The value used to set the DATE time field in the calendar.
-     * @param hour     The value used to set the HOUR_OF_DAY time field in the calendar.
-     * @param minute   The value used to set the MINUTE time field in the calendar.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
-
-    /**
-     * Constructs a GregorianCalendar with the given AD date and time set for the
-     * default time zone with the default locale.
-     *
-     * @param year     The value used to set the YEAR time field in the calendar.
-     * @param month    The value used to set the MONTH time field in the calendar. Month
-     *                 value is 0-based. e.g., 0 for January.
-     * @param date     The value used to set the DATE time field in the calendar.
-     * @param hour     The value used to set the HOUR_OF_DAY time field in the calendar.
-     * @param minute   The value used to set the MINUTE time field in the calendar.
-     * @param second   The value used to set the SECOND time field in the calendar.
-     * @param success  Indicates the status of GregorianCalendar object construction.
-     *                 Returns U_ZERO_ERROR if constructed successfully.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
-
-    /**
-     * Destructor
-     * @stable ICU 2.0
-     */
-    virtual ~GregorianCalendar();
-
-    /**
-     * Copy constructor
-     * @param source    the object to be copied.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar(const GregorianCalendar& source);
-
-    /**
-     * Default assignment operator
-     * @param right    the object to be copied.
-     * @stable ICU 2.0
-     */
-    GregorianCalendar& operator=(const GregorianCalendar& right);
-
-    /**
-     * Create and return a polymorphic copy of this calendar.
-     * @return    return a polymorphic copy of this calendar.
-     * @stable ICU 2.0
-     */
-    virtual Calendar* clone(void) const;
-
-    /**
-     * 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.
-     *
-     * @param date     The given Gregorian cutover date.
-     * @param success  Output param set to success/failure code on exit.
-     * @stable ICU 2.0
-     */
-    void setGregorianChange(UDate date, UErrorCode& success);
-
-    /**
-     * 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.
-     *
-     * @return   The Gregorian cutover time for this calendar.
-     * @stable ICU 2.0
-     */
-    UDate getGregorianChange(void) const;
-
-    /**
-     * Return true if the given year is a leap year. Determination of whether a year is
-     * a leap year is actually very complicated. We do something crude and mostly
-     * correct here, but for a real determination you need a lot of contextual
-     * information. For example, in Sweden, the change from Julian to Gregorian happened
-     * in a complex way resulting in missed leap years and double leap years between
-     * 1700 and 1753. Another example is that after the start of the Julian calendar in
-     * 45 B.C., the leap years did not regularize until 8 A.D. This method ignores these
-     * quirks, and pays attention only to the Julian onset date and the Gregorian
-     * cutover (which can be changed).
-     *
-     * @param year  The given year.
-     * @return      True if the given year is a leap year; false otherwise.
-     * @stable ICU 2.0
-     */
-    UBool isLeapYear(int32_t year) const;
-
-    /**
-     * Returns TRUE if the given Calendar object is equivalent to this
-     * one.  Calendar override.
-     *
-     * @param other the Calendar to be compared with this Calendar   
-     * @stable ICU 2.4
-     */
-    virtual UBool isEquivalentTo(const Calendar& other) const;
-
-    /**
-     * (Overrides Calendar) Rolls up or down by the given amount in the specified field.
-     * For more information, see the documentation for Calendar::roll().
-     *
-     * @param field   The time field.
-     * @param amount  Indicates amount to roll.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid, this will be set to
-     *                an error status.
-     * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.
-     */
-    virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
-
-    /**
-     * (Overrides Calendar) Rolls up or down by the given amount in the specified field.
-     * For more information, see the documentation for Calendar::roll().
-     *
-     * @param field   The time field.
-     * @param amount  Indicates amount to roll.
-     * @param status  Output param set to success/failure code on exit. If any value
-     *                previously set in the time field is invalid, this will be set to
-     *                an error status.
-     * @stable ICU 2.6.
-     */
-    virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
-
-    /**
-     * Return the minimum value that this field could have, given the current date.
-     * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
-     * @param field    the time field.
-     * @return         the minimum value that this field could have, given the current date.
-     * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead.
-     */
-    int32_t getActualMinimum(EDateFields field) const;
-
-    /**
-     * Return the minimum value that this field could have, given the current date.
-     * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
-     * @param field    the time field.
-     * @param status
-     * @return         the minimum value that this field could have, given the current date.
-     * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. (Added to ICU 3.0 for signature consistency)
-     */
-    int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
-
-    /**
-     * Return the minimum value that this field could have, given the current date.
-     * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
-     * @param field    the time field.
-     * @param status   error result.
-     * @return         the minimum value that this field could have, given the current date.
-     * @stable ICU 3.0
-     */
-    int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
-
-    /**
-     * Return the maximum value that this field could have, given the current date.
-     * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
-     * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
-     * for some years the actual maximum for MONTH is 12, and for others 13.
-     * @param field    the time field.
-     * @return         the maximum value that this field could have, given the current date.
-     * @deprecated ICU 2.6. Use getActualMaximum(UCalendarDateFields field) instead.
-     */
-    int32_t getActualMaximum(EDateFields field) const;
-
-    /**
-     * Return the maximum value that this field could have, given the current date.
-     * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
-     * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
-     * for some years the actual maximum for MONTH is 12, and for others 13.
-     * @param field    the time field.
-     * @param status   returns any errors that may result from this function call.
-     * @return         the maximum value that this field could have, given the current date.
-     * @stable ICU 2.6
-     */
-    virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
-
-    /**
-     * (Overrides Calendar) Return true if the current date for this Calendar is in
-     * Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
-     *
-     * @param status Fill-in parameter which receives the status of this operation.
-     * @return   True if the current date for this Calendar is in Daylight Savings Time,
-     *           false, otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool inDaylightTime(UErrorCode& status) const;
-
-public:
-
-    /**
-     * Override Calendar 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;
-
-    /**
-     * Return 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);
-
-    /**
-     * Get the calendar type, "gregorian", for use in DateFormatSymbols.
-     *
-     * @return calendar type
-     * @internal
-     */
-    virtual const char * getType() const;
-
-protected:
-
-    /**
-     * (Overrides Calendar) Converts GMT as milliseconds to time field values.
-     * @param status Fill-in parameter which receives the status of this operation.
-     * @stable ICU 2.0
-     */
-
- private:
-    GregorianCalendar(); // default constructor not implemented
-
- protected:
-    /**
-     * Return the ERA.  We need a special method for this because the
-     * default ERA is AD, but a zero (unset) ERA is BC.
-     * @return    the ERA.
-     * @internal
-     */
-    virtual int32_t internalGetEra() const;
-
-    /**
-     * Return the Julian day number of day before the first day of the
-     * given month in the given extended year.  Subclasses should override
-     * this method to implement their calendar system.
-     * @param eyear the extended year
-     * @param month the zero-based month, or 0 if useMonth is false
-     * @param useMonth if false, compute the day before the first day of
-     * the given year, otherwise, compute the day before the first day of
-     * the given month
-     * @return the Julian day number of the day before the first
-     * day of the given month and year
-     * @internal
-     */
-    virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
-                                                   UBool useMonth) const;
-
-    /**
-     * Subclasses may override this.  This method calls
-     * handleGetMonthLength() to obtain the calendar-specific month
-     * length.
-     * @param bestField which field to use to calculate the date 
-     * @return julian day specified by calendar fields.
-     * @internal
-     */
-    virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)  ;
-
-    /**
-     * Return the number of days in the given month of the given extended
-     * year of this calendar system.  Subclasses should override this
-     * method if they can provide a more correct or more efficient
-     * implementation than the default implementation in Calendar.
-     * @internal
-     */
-    virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
-
-    /**
-     * Return the number of days in the given extended year of this
-     * calendar system.  Subclasses should override this method if they can
-     * provide a more correct or more efficient implementation than the
-     * default implementation in Calendar.
-     * @stable ICU 2.0
-     */
-    virtual int32_t handleGetYearLength(int32_t eyear) const;
-
-    /**
-     * return the length of the given month.
-     * @param month    the given month.
-     * @return    the length of the given month.
-     * @internal
-     */
-    virtual int32_t monthLength(int32_t month) const;
-
-    /**
-     * return the length of the month according to the given year.
-     * @param month    the given month.
-     * @param year     the given year.
-     * @return         the length of the month
-     * @internal
-     */
-    virtual int32_t monthLength(int32_t month, int32_t year) const;
-    
-    /**
-     * return the length of the given year.
-     * @param year    the given year.
-     * @return        the length of the given year.
-     * @internal
-     */
-    int32_t yearLength(int32_t year) const;
-    
-    /**
-     * return the length of the year field.
-     * @return    the length of the year field
-     * @internal
-     */
-    int32_t yearLength(void) const;
-
-    /**
-     * After adjustments such as add(MONTH), add(YEAR), we don't want the
-     * month to jump around.  E.g., we don't want Jan 31 + 1 month to go to Mar
-     * 3, we want it to go to Feb 28.  Adjustments which might run into this
-     * problem call this method to retain the proper month.
-     * @internal
-     */
-    void pinDayOfMonth(void);
-
-    /**
-     * Return the day number with respect to the epoch.  January 1, 1970 (Gregorian)
-     * is day zero.
-     * @param status Fill-in parameter which receives the status of this operation.
-     * @return       the day number with respect to the epoch.  
-     * @internal
-     */
-    virtual UDate getEpochDay(UErrorCode& status);
-
-    /**
-     * Subclass API for defining limits of different types.
-     * Subclasses must implement this method to return limits for the
-     * following fields:
-     *
-     * <pre>UCAL_ERA
-     * UCAL_YEAR
-     * UCAL_MONTH
-     * UCAL_WEEK_OF_YEAR
-     * UCAL_WEEK_OF_MONTH
-     * UCAL_DATE (DAY_OF_MONTH on Java)
-     * UCAL_DAY_OF_YEAR
-     * UCAL_DAY_OF_WEEK_IN_MONTH
-     * UCAL_YEAR_WOY
-     * UCAL_EXTENDED_YEAR</pre>
-     *
-     * @param field one of the above field numbers
-     * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,
-     * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
-     * @internal
-     */
-    virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
-
-    /**
-     * Return the extended year defined by the current fields.  This will
-     * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such
-     * as UCAL_ERA) specific to the calendar system, depending on which set of
-     * fields is newer.
-     * @return the extended year
-     * @internal
-     */
-    virtual int32_t handleGetExtendedYear();
-
-    /** 
-     * Subclasses may override this to convert from week fields 
-     * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case
-     * where YEAR, EXTENDED_YEAR are not set.
-     * The Gregorian implementation assumes a yearWoy in gregorian format, according to the current era.
-     * @return the extended year, UCAL_EXTENDED_YEAR
-     * @internal
-     */
-    virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
-
-
-    /**
-     * Subclasses may override this method to compute several fields
-     * specific to each calendar system.  These are:
-     *
-     * <ul><li>ERA
-     * <li>YEAR
-     * <li>MONTH
-     * <li>DAY_OF_MONTH
-     * <li>DAY_OF_YEAR
-     * <li>EXTENDED_YEAR</ul>
-     *
-     * <p>The GregorianCalendar implementation implements
-     * a calendar with the specified Julian/Gregorian cutover date.
-     * @internal
-     */
-    virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
-
- private:
-    /**
-     * Compute the julian day number of the given year.
-     * @param isGregorian    if true, using Gregorian calendar, otherwise using Julian calendar
-     * @param year           the given year.
-     * @param isLeap         true if the year is a leap year.       
-     * @return 
-     */
-    static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
-                                         UBool& isLeap);
-    
-    /**
-     * Validates the values of the set time fields.  True if they're all valid.
-     * @return    True if the set time fields are all valid.
-     */
-    UBool validateFields(void) const;
-
-    /**
-     * Validates the value of the given time field.  True if it's valid.
-     */
-    UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
-
-    /**
-     * Return the pseudo-time-stamp for two fields, given their
-     * individual pseudo-time-stamps.  If either of the fields
-     * is unset, then the aggregate is unset.  Otherwise, the
-     * aggregate is the later of the two stamps.
-     * @param stamp_a    One given field.
-     * @param stamp_b    Another given field.
-     * @return the pseudo-time-stamp for two fields
-     */
-    int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
-
-    /**
-     * The point at which the Gregorian calendar rules are used, measured in
-     * milliseconds from the standard epoch.  Default is October 15, 1582
-     * (Gregorian) 00:00:00 UTC, that is, October 4, 1582 (Julian) is followed
-     * by October 15, 1582 (Gregorian).  This corresponds to Julian day number
-     * 2299161. This is measured from the standard epoch, not in Julian Days.
-     * @internal
-     */
-    UDate                fGregorianCutover;
-
-    /**
-     * Julian day number of the Gregorian cutover
-     */
-    int32_t             fCutoverJulianDay;
-
-    /**
-     * Midnight, local time (using this Calendar's TimeZone) at or before the
-     * gregorianCutover. This is a pure date value with no time of day or
-     * timezone component.
-     */
-    UDate                 fNormalizedGregorianCutover;// = gregorianCutover;
-
-    /**
-     * The year of the gregorianCutover, with 0 representing
-     * 1 BC, -1 representing 2 BC, etc.
-     */
-    int32_t fGregorianCutoverYear;// = 1582;
-
-    /**
-     * The year of the gregorianCutover, with 0 representing
-     * 1 BC, -1 representing 2 BC, etc.
-     */
-    int32_t fGregorianCutoverJulianDay;// = 2299161;
-
-    /**
-     * Converts time as milliseconds to Julian date. The Julian date used here is not a
-     * true Julian date, since it is measured from midnight, not noon.
-     *
-     * @param millis  The given milliseconds.
-     * @return        The Julian date number.
-     */
-    static double millisToJulianDay(UDate millis);
-
-    /**
-     * Converts Julian date to time as milliseconds. The Julian date used here is not a
-     * true Julian date, since it is measured from midnight, not noon.
-     *
-     * @param julian  The given Julian date number.
-     * @return        Time as milliseconds.
-     */
-    static UDate julianDayToMillis(double julian);
-
-    /**
-     * Used by handleComputeJulianDay() and handleComputeMonthStart().
-     * Temporary field indicating whether the calendar is currently Gregorian as opposed to Julian.
-     */
-    UBool fIsGregorian;
-
-    /**
-     * Used by handleComputeJulianDay() and handleComputeMonthStart().
-     * Temporary field indicating that the sense of the gregorian cutover should be inverted
-     * to handle certain calculations on and around the cutover date.
-     */
-    UBool fInvertGregorian;
-
-
- public: // internal implementation
-
-    /**
-     * @internal 
-     * @return TRUE if this calendar has the notion of a default century
-     */
-    virtual UBool haveDefaultCentury() const;
-
-    /**
-     * @internal
-     * @return the start of the default century
-     */
-    virtual UDate defaultCenturyStart() const;
-
-    /**
-     * @internal 
-     * @return the beginning year of the default century
-     */
-    virtual int32_t defaultCenturyStartYear() const;
-
- private:
-    /**
-     * The system maintains a static default century start date.  This is initialized
-     * the first time it is used.  Before then, it is set to SYSTEM_DEFAULT_CENTURY to
-     * indicate an uninitialized state.  Once the system default century date and year
-     * are set, they do not change.
-     */
-    static UDate         fgSystemDefaultCenturyStart;
-
-    /**
-     * See documentation for systemDefaultCenturyStart.
-     */
-    static int32_t          fgSystemDefaultCenturyStartYear;
-
-    /**
-     * Default value that indicates the defaultCenturyStartYear is unitialized
-     */
-    static const int32_t    fgSystemDefaultCenturyYear;
-
-    /**
-     * Default value that indicates the UDate of the beginning of the system default century
-     */
-    static const UDate        fgSystemDefaultCentury;
-
-    /**
-     * Returns the beginning date of the 100-year window that dates with 2-digit years
-     * are considered to fall within.
-     * @return    the beginning date of the 100-year window that dates with 2-digit years
-     *            are considered to fall within.
-     */
-    UDate         internalGetDefaultCenturyStart(void) const;
-
-    /**
-     * Returns the first year of the 100-year window that dates with 2-digit years
-     * are considered to fall within.
-     * @return    the first year of the 100-year window that dates with 2-digit years
-     *            are considered to fall within.
-     */
-    int32_t          internalGetDefaultCenturyStartYear(void) const;
-
-    /**
-     * Initializes the 100-year window that dates with 2-digit years are considered
-     * to fall within so that its start date is 80 years before the current time.
-     */
-    static void  initializeSystemDefaultCentury(void);
-
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _GREGOCAL
-//eof
-
diff --git a/source/i18n/unicode/locdspnm.h b/source/i18n/unicode/locdspnm.h
deleted file mode 100644
index 647b062..0000000
--- a/source/i18n/unicode/locdspnm.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-******************************************************************************
-* Copyright (C) 2010, International Business Machines Corporation and        *
-* others. All Rights Reserved.                                               *
-******************************************************************************
-*/
-
-#ifndef LOCDSPNM_H
-#define LOCDSPNM_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Provides display names of Locale and its components.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/locid.h"
-#include "unicode/uscript.h"
-#include "unicode/uldnames.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Returns display names of Locales and components of Locales. For
- * more information on language, script, region, variant, key, and
- * values, see Locale.
- * @stable ICU 4.4
- */
-class U_I18N_API LocaleDisplayNames : public UObject {
-public:
-    /**
-     * Destructor.
-     * @stable ICU 4.4
-     */
-    virtual ~LocaleDisplayNames();
-
-    /**
-     * Convenience overload of
-     * {@link #createInstance(const Locale& locale, UDialectHandling dialectHandling)}
-     * that specifies STANDARD dialect handling.
-     * @param locale the display locale
-     * @return a LocaleDisplayNames instance
-     * @stable ICU 4.4
-     */
-    static LocaleDisplayNames* U_EXPORT2 createInstance(const Locale& locale);
-
-    /**
-     * Returns an instance of LocaleDisplayNames that returns names
-     * formatted for the provided locale, using the provided
-     * dialectHandling.
-     *
-     * @param locale the display locale
-     * @param dialectHandling how to select names for locales
-     * @return a LocaleDisplayNames instance
-     * @stable ICU 4.4
-     */
-    static LocaleDisplayNames* U_EXPORT2 createInstance(const Locale& locale,
-							UDialectHandling dialectHandling);
-
-    // getters for state
-    /**
-     * Returns the locale used to determine the display names. This is
-     * not necessarily the same locale passed to {@link #getInstance}.
-     * @return the display locale
-     * @stable ICU 4.4
-     */
-    virtual const Locale& getLocale() const = 0;
-
-    /**
-     * Returns the dialect handling used in the display names.
-     * @return the dialect handling enum
-     * @stable ICU 4.4
-     */
-    virtual UDialectHandling getDialectHandling() const = 0;
-
-    // names for entire locales
-    /**
-     * Returns the display name of the provided locale.
-     * @param locale the locale whose display name to return
-     * @param result receives the locale's display name
-     * @return the display name of the provided locale
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& localeDisplayName(const Locale& locale,
-					     UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided locale id.
-     * @param localeId the id of the locale whose display name to return
-     * @param result receives the locale's display name
-     * @return the display name of the provided locale
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& localeDisplayName(const char* localeId,
-					     UnicodeString& result) const = 0;
-
-    // names for components of a locale id
-    /**
-     * Returns the display name of the provided language code.
-     * @param lang the language code
-     * @param result receives the language code's display name
-     * @return the display name of the provided language code
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& languageDisplayName(const char* lang,
-					       UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided script code.
-     * @param script the script code
-     * @param result receives the script code's display name
-     * @return the display name of the provided script code
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& scriptDisplayName(const char* script,
-					     UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided script code.
-     * @param scriptCode the script code number
-     * @param result receives the script code's display name
-     * @return the display name of the provided script code
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& scriptDisplayName(UScriptCode scriptCode,
-					     UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided region code.
-     * @param region the region code
-     * @param result receives the region code's display name
-     * @return the display name of the provided region code
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& regionDisplayName(const char* region,
-					     UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided variant.
-     * @param variant the variant string
-     * @param result receives the variant's display name
-     * @return the display name of the provided variant
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& variantDisplayName(const char* variant,
-					      UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided locale key.
-     * @param key the locale key name
-     * @param result receives the locale key's display name
-     * @return the display name of the provided locale key
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& keyDisplayName(const char* key,
-					  UnicodeString& result) const = 0;
-
-    /**
-     * Returns the display name of the provided value (used with the provided key).
-     * @param key the locale key name
-     * @param value the locale key's value
-     * @param result receives the value's display name
-     * @return the display name of the provided value
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& keyValueDisplayName(const char* key, const char* value,
-					       UnicodeString& result) const = 0;
-
-private:
-    // No ICU "poor man's RTTI" for this class nor its subclasses.
-    virtual UClassID getDynamicClassID() const;
-};
-
-inline LocaleDisplayNames::~LocaleDisplayNames() {
-}
-
-inline LocaleDisplayNames* LocaleDisplayNames::createInstance(const Locale& locale) {
-  return LocaleDisplayNames::createInstance(locale, ULDN_STANDARD_NAMES);
-}
-
-U_NAMESPACE_END
-
-#endif
-
-#endif
diff --git a/source/i18n/unicode/measfmt.h b/source/i18n/unicode/measfmt.h
deleted file mode 100644
index a5af55e..0000000
--- a/source/i18n/unicode/measfmt.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2004-2006, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-* Author: Alan Liu
-* Created: April 20, 2004
-* Since: ICU 3.0
-**********************************************************************
-*/
-#ifndef MEASUREFORMAT_H
-#define MEASUREFORMAT_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/format.h"
-
-/**
- * \file 
- * \brief C++ API: Formatter for measure objects.
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * 
- * A formatter for measure objects.  This is an abstract base class.
- *
- * <p>To format or parse a measure object, first create a formatter
- * object using a MeasureFormat factory method.  Then use that
- * object's format and parse methods.
- *
- * <p>This is an abstract class.
- *
- * @see Format
- * @author Alan Liu
- * @stable ICU 3.0
- */
-class U_I18N_API MeasureFormat : public Format {
-
- public:
-
-    /**
-     * Return a formatter for CurrencyAmount objects in the given
-     * locale.
-     * @param locale desired locale
-     * @param ec input-output error code
-     * @return a formatter object, or NULL upon error
-     * @stable ICU 3.0
-     */
-    static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
-                                               UErrorCode& ec);
-
-    /**
-     * Return a formatter for CurrencyAmount objects in the default
-     * locale.
-     * @param ec input-output error code
-     * @return a formatter object, or NULL upon error
-     * @stable ICU 3.0
-     */
-    static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
-
- protected:
-
-    /**
-     * Default constructor.
-     * @stable ICU 3.0
-     */
-    MeasureFormat();
-};
-
-U_NAMESPACE_END
-
-#endif // #if !UCONFIG_NO_FORMATTING
-#endif // #ifndef MEASUREFORMAT_H
diff --git a/source/i18n/unicode/measunit.h b/source/i18n/unicode/measunit.h
deleted file mode 100644
index 9a210e6..0000000
--- a/source/i18n/unicode/measunit.h
+++ /dev/null
@@ -1,71 +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 __MEASUREUNIT_H__
-#define __MEASUREUNIT_H__
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/fmtable.h"
-
-/**
- * \file 
- * \brief C++ API: A unit for measuring a quantity.
- */
- 
-U_NAMESPACE_BEGIN
-
-/**
- * A unit such as length, mass, volume, currency, etc.  A unit is
- * coupled with a numeric amount to produce a Measure.
- *
- * <p>This is an abstract class.
- *
- * @author Alan Liu
- * @stable ICU 3.0
- */
-class U_I18N_API MeasureUnit: public UObject {
- public:
-    /**
-     * 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 = 0;
-
-    /**
-     * Destructor
-     * @stable ICU 3.0
-     */
-    virtual ~MeasureUnit();
-    
-    /**
-     * Equality operator.  Return true if this object is equal
-     * to the given object.
-     * @stable ICU 3.0
-     */
-    virtual UBool operator==(const UObject& other) const = 0;
-
- protected:
-    /**
-     * Default constructor.
-     * @stable ICU 3.0
-     */
-    MeasureUnit();
-};
-
-U_NAMESPACE_END
-
-// NOTE: There is no measunit.cpp. For implementation, see measure.cpp. [alan]
-
-#endif // !UCONFIG_NO_FORMATTING
-#endif // __MEASUREUNIT_H__
diff --git a/source/i18n/unicode/measure.h b/source/i18n/unicode/measure.h
deleted file mode 100644
index 6b7a049..0000000
--- a/source/i18n/unicode/measure.h
+++ /dev/null
@@ -1,137 +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 __MEASURE_H__
-#define __MEASURE_H__
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: MeasureUnit object.
- */
- 
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/fmtable.h"
-
-U_NAMESPACE_BEGIN
-
-class MeasureUnit;
-
-/**
- * An amount of a specified unit, consisting of a number and a Unit.
- * For example, a length measure consists of a number and a length
- * unit, such as feet or meters.  This is an abstract class.
- * Subclasses specify a concrete Unit type.
- *
- * <p>Measure objects are parsed and formatted by subclasses of
- * MeasureFormat.
- *
- * <p>Measure objects are immutable.
- *
- * <p>This is an abstract class.
- *
- * @author Alan Liu
- * @stable ICU 3.0
- */
-class U_I18N_API Measure: public UObject {
- public:
-    /**
-     * Construct an object with the given numeric amount and the given
-     * unit.  After this call, the caller must not delete the given
-     * unit object.
-     * @param number a numeric object; amount.isNumeric() must be TRUE
-     * @param adoptedUnit the unit object, which must not be NULL
-     * @param ec input-output error code. If the amount or the unit
-     * is invalid, then this will be set to a failing value.
-     * @stable ICU 3.0
-     */
-    Measure(const Formattable& number, MeasureUnit* adoptedUnit,
-            UErrorCode& ec);
-
-    /**
-     * Copy constructor
-     * @stable ICU 3.0
-     */
-    Measure(const Measure& other);
-
-    /**
-     * Assignment operator
-     * @stable ICU 3.0
-     */
-    Measure& operator=(const Measure& 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 = 0;
-
-    /**
-     * Destructor
-     * @stable ICU 3.0
-     */
-    virtual ~Measure();
-    
-    /**
-     * Equality operator.  Return true if this object is equal
-     * to the given object.
-     * @stable ICU 3.0
-     */
-    UBool operator==(const UObject& other) const;
-
-    /**
-     * Return a reference to the numeric value of this object.  The
-     * numeric value may be of any numeric type supported by
-     * Formattable.
-     * @stable ICU 3.0
-     */
-    inline const Formattable& getNumber() const;
-
-    /**
-     * Return a reference to the unit of this object.
-     * @stable ICU 3.0
-     */
-    inline const MeasureUnit& getUnit() const;
-
- protected:
-    /**
-     * Default constructor.
-     * @stable ICU 3.0
-     */
-    Measure();
-
- private:
-    /**
-     * The numeric value of this object, e.g. 2.54 or 100.
-     */
-    Formattable number;
-
-    /**
-     * The unit of this object, e.g., "millimeter" or "JPY".  This is
-     * owned by this object.
-     */
-    MeasureUnit* unit;
-};
-
-inline const Formattable& Measure::getNumber() const {
-    return number;
-}
-
-inline const MeasureUnit& Measure::getUnit() const {
-    return *unit;
-}
-
-U_NAMESPACE_END
-
-#endif // !UCONFIG_NO_FORMATTING
-#endif // __MEASURE_H__
diff --git a/source/i18n/unicode/msgfmt.h b/source/i18n/unicode/msgfmt.h
deleted file mode 100644
index 58c74f1..0000000
--- a/source/i18n/unicode/msgfmt.h
+++ /dev/null
@@ -1,961 +0,0 @@
-/*
-* Copyright (C) 2007-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-********************************************************************************
-*
-* File MSGFMT.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*   03/20/97    helena      Finished first cut of implementation.
-*   07/22/98    stephen     Removed operator!= (defined in Format)
-*   08/19/2002  srl         Removing Javaisms
-*******************************************************************************/
-
-#ifndef MSGFMT_H
-#define MSGFMT_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Formats messages in a language-neutral way.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/format.h"
-#include "unicode/locid.h"
-#include "unicode/parseerr.h"
-#include "unicode/uchar.h"
-
-U_NAMESPACE_BEGIN
-
-class NumberFormat;
-class DateFormat;
-
-/**
- *
- * MessageFormat produces concatenated messages in a language-neutral
- * way.  Use this whenever concatenating strings that are displayed to
- * end users.
- *
- * <P>A MessageFormat contains an array of <EM>subformats</EM> arranged
- * within a <EM>template string</EM>.  Together, the subformats and
- * template string determine how the MessageFormat will operate during
- * formatting and parsing.
- *
- * <P>Typically, both the subformats and the template string are
- * specified at once in a <EM>pattern</EM>.  By using different
- * patterns for different locales, messages may be localized.
- *
- * <P>When formatting, MessageFormat takes an array of arguments
- * and produces a user-readable string.  Each argument is a
- * Formattable object; they may be passed in in an array, or as a
- * single Formattable object which itself contains an array.  Each
- * argument is matched up with its corresponding subformat, which then
- * formats it into a string.  The resulting strings are then assembled
- * within the string template of the MessageFormat to produce the
- * final output string.
- *
- * <p><strong>Note:</strong>
- * In ICU 4.0 MessageFormat supports named arguments.  If a named argument
- * is used, all arguments must be named.  Names start with a character in
- * <code>UCHAR_ID_START</code> and continue with characters in
- * <code>UCHARID_CONTINUE</code>, in particular they do not start with a digit.
- * If named arguments are used, {@link #usesNamedArguments()} will return true.
- *
- * <p>The other new methods supporting named arguments are
- * {@link #getFormatNames(UErrorCode& status)},
- * {@link #getFormat(const UnicodeString& formatName, UErrorCode& status)}
- * {@link #setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status)},
- * {@link #adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status)},
- * {@link #format(const UnicodeString* argumentNames, const Formattable* arguments,
- *  int32_t count, UnicodeString& appendTo,UErrorCode& status)}.
- * These methods are all compatible with patterns that do not used named arguments--
- * in these cases the keys in the input or output use <code>UnicodeString</code>s
- * that name the argument indices, e.g. "0", "1", "2"... etc.
- *
- * <p>If this format uses named arguments, certain methods that take or
- * return arrays do not perform any action, since it is not possible to
- * identify positions in an array using a name.  Of these methods,
- * UErrorCode is set to U_ILLEGAL_ARGUMENT_ERROR by format, and to
- * U_ARGUMENT_TYPE_MISMATCH by parse.
- * These methods are
- * {@link #adoptFormats(Format** formatsToAdopt, int32_t count)},
- * {@link #setFormats(const Format** newFormats,int32_t count)},
- * {@link #adoptFormat(int32_t n, Format *newFormat)},
- * {@link #setFormat(int32_t n, Format& newFormat)},
- * {@link #format(const Formattable* source, int32_t count, UnicodeString& appendTo, FieldPosition& ignore, UErrorCode& success)},
- * {@link #format(const UnicodeString& pattern,const Formattable* arguments,int32_t cnt,UnicodeString& appendTo,UErrorCode& success)},
- * {@link #format(const Formattable& source, UnicodeString& appendTo, FieldPosition& ignore, UErrorCode& success)},
- * {@link #format(const Formattable* arguments, int32_t cnt, UnicodeString& appendTo, FieldPosition& status, int32_t recursionProtection,UErrorCode& success)},
- * {@link #parse(const UnicodeString& source, ParsePosition& pos, int32_t& count)},
- * {@link #parse(const UnicodeString& source, int32_t& cnt, UErrorCode& status)}
- *
- * <P>
- * During parsing, an input string is matched against the string
- * template of the MessageFormat to produce an array of Formattable
- * objects.  Plain text of the template string is matched directly
- * against input text.  At each position in the template string where
- * a subformat is located, the subformat is called to parse the
- * corresponding segment of input text to produce an output argument.
- * In this way, an array of arguments is created which together
- * constitute the parse result.
- * <P>
- * Parsing may fail or produce unexpected results in a number of
- * circumstances.
- * <UL>
- * <LI>If one of the arguments does not occur in the pattern, it
- * will be returned as a default Formattable.
- * <LI>If the format of an argument loses information, such as with
- * a choice format where a large number formats to "many", then the
- * parse may not correspond to the originally formatted argument.
- * <LI>MessageFormat does not handle ChoiceFormat recursion during
- * parsing; such parses will fail.
- * <LI>Parsing will not always find a match (or the correct match) if
- * some part of the parse is ambiguous.  For example, if the pattern
- * "{1},{2}" is used with the string arguments {"a,b", "c"}, it will
- * format as "a,b,c".  When the result is parsed, it will return {"a",
- * "b,c"}.
- * <LI>If a single argument is formatted more than once in the string,
- * then the rightmost subformat in the pattern string will produce the
- * parse result; prior subformats with the same argument index will
- * have no effect.
- * </UL>
- * Here are some examples of usage:
- * <P>
- * Example 1:
- * <pre>
- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     GregorianCalendar cal(success);
- *     Formattable arguments[] = {
- *         7L,
- *         Formattable( (Date) cal.getTime(success), Formattable::kIsDate),
- *         "a disturbance in the Force"
- *     };
- *
- *     UnicodeString result;
- *     MessageFormat::format(
- *          "At {1,time} on {1,date}, there was {2} on planet {0,number}.",
- *          arguments, 3, result, success );
- *
- *     cout << "result: " << result << endl;
- *     //<output>: At 4:34:20 PM on 23-Mar-98, there was a disturbance
- *     //             in the Force on planet 7.
- * \endcode
- * </pre>
- * Typically, the message format will come from resources, and the
- * arguments will be dynamically set at runtime.
- * <P>
- * Example 2:
- * <pre>
- *  \code
- *     success = U_ZERO_ERROR;
- *     Formattable testArgs[] = {3L, "MyDisk"};
- *
- *     MessageFormat form(
- *         "The disk \"{1}\" contains {0} file(s).", success );
- *
- *     UnicodeString string;
- *     FieldPosition fpos = 0;
- *     cout << "format: " << form.format(testArgs, 2, string, fpos, success ) << endl;
- *
- *     // output, with different testArgs:
- *     // output: The disk "MyDisk" contains 0 file(s).
- *     // output: The disk "MyDisk" contains 1 file(s).
- *     // output: The disk "MyDisk" contains 1,273 file(s).
- *  \endcode
- *  </pre>
- *
- *  The pattern is of the following form.  Legend:
- *  <pre>
- * \code
- *       {optional item}
- *       (group that may be repeated)*
- * \endcode
- *  </pre>
- *  Do not confuse optional items with items inside quoted braces, such
- *  as this: "{".  Quoted braces are literals.
- *  <pre>
- *  \code
- *       messageFormatPattern := string ( "{" messageFormatElement "}" string )*
- *
- *       messageFormatElement := argumentIndex | argumentName { "," elementFormat }
- *
- *       elementFormat := "time" { "," datetimeStyle }
- *                      | "date" { "," datetimeStyle }
- *                      | "number" { "," numberStyle }
- *                      | "choice" "," choiceStyle
- *                      | "spellout" { "," spelloutStyle }
- *                      | "ordinal" { "," spelloutStyle }
- *                      | "duration" { "," spelloutStyle }
- *                      | "plural" "," pluralStyle
- *                      | "select" "," selectStyle
- *
- *       datetimeStyle := "short"
- *                      | "medium"
- *                      | "long"
- *                      | "full"
- *                      | dateFormatPattern
- *
- *       numberStyle :=   "currency"
- *                      | "percent"
- *                      | "integer"
- *                      | numberFormatPattern
- *
- *       choiceStyle :=   choiceFormatPattern
- *
- *       pluralStyle :=   pluralFormatPattern
- *
- *       selectStyle :=   selectFormatPattern
- *
- *       spelloutStyle := ruleSetName
- * \endcode
- * </pre>
- * If there is no elementFormat, then the argument must be a string,
- * which is substituted. If there is no dateTimeStyle or numberStyle,
- * then the default format is used (e.g.  NumberFormat::createInstance(),
- * DateFormat::createTimeInstance(DateFormat::kDefault, ...) or
- * DateFormat::createDateInstance(DateFormat::kDefault, ...). For
- * a RuleBasedNumberFormat, if there is no ruleSetName, the default
- * rule set is used. For a ChoiceFormat or PluralFormat or SelectFormat, the pattern
- * must always be specified, since there is no default.
- * <P>
- * In strings, single quotes can be used to quote syntax characters.
- * A literal single quote is represented by '', both within and outside
- * of single-quoted segments.  Inside a
- * messageFormatElement, quotes are <EM>not</EM> removed. For example,
- * {1,number,$'#',##} will produce a number format with the pound-sign
- * quoted, with a result such as: "$#31,45".
- * <P>
- * If a pattern is used, then unquoted braces in the pattern, if any,
- * must match: that is, "ab {0} de" and "ab '}' de" are ok, but "ab
- * {0'}' de" and "ab } de" are not.
- * <p>
- * <dl><dt><b>Warning:</b><dd>The rules for using quotes within message
- * format patterns unfortunately have shown to be somewhat confusing.
- * In particular, it isn't always obvious to localizers whether single
- * quotes need to be doubled or not. Make sure to inform localizers about
- * the rules, and tell them (for example, by using comments in resource
- * bundle source files) which strings will be processed by MessageFormat.
- * Note that localizers may need to use single quotes in translated
- * strings where the original version doesn't have them.
- * <br>Note also that the simplest way to avoid the problem is to
- * use the real apostrophe (single quote) character U+2019 (') for
- * human-readable text, and to use the ASCII apostrophe (U+0027 ' )
- * only in program syntax, like quoting in MessageFormat.
- * See the annotations for U+0027 Apostrophe in The Unicode Standard.</p>
- * </dl>
- * <P>
- * The argumentIndex is a non-negative integer, which corresponds to the
- * index of the arguments presented in an array to be formatted.  The
- * first argument has argumentIndex 0.
- * <P>
- * It is acceptable to have unused arguments in the array.  With missing
- * arguments, or arguments that are not of the right class for the
- * specified format, a failing UErrorCode result is set.
- * <P>
- * <strong>Creating internationalized messages that include plural forms, you
- * can use a PluralFormat:</strong>
- * <pre>
- * \code
- *  UErrorCode err = U_ZERO_ERROR;
- *  UnicodeString t1("{0, plural, one{C''est # fichier} other{Ce sont # fichiers}} dans la liste.");
- *  MessageFormat* msgFmt = new MessageFormat(t1, Locale("fr"), err);
- *  if (U_FAILURE(err)) {
- *      return err;
- *  }
- *
- *  Formattable args1[] = {(int32_t)0};
- *  Formattable args2[] = {(int32_t)3};
- *  FieldPosition ignore(FieldPosition::DONT_CARE);
- *  UnicodeString result;
- *  msgFmt->format(args1, 1, result, ignore, status);
- *  cout << result << endl;
- *  result.remove();
- *  msgFmt->format(args2, 1, result, ignore, status);
- *  cout << result << endl;
- *
- *  // output, with different args
- *  // output: C'est 0,0 fichier dans la liste.
- *  // output: Ce sont 3 fichiers dans la liste."
- * \endcode
- * </pre>
- * Please check PluralFormat and PluralRules for details.
- * </P>
- */
-class U_I18N_API MessageFormat : public Format {
-public:
-    /**
-     * Enum type for kMaxFormat.
-     * @obsolete ICU 3.0.  The 10-argument limit was removed as of ICU 2.6,
-     * rendering this enum type obsolete.
-     */
-    enum EFormatNumber {
-        /**
-         * The maximum number of arguments.
-         * @obsolete ICU 3.0.  The 10-argument limit was removed as of ICU 2.6,
-         * rendering this constant obsolete.
-         */
-        kMaxFormat = 10
-    };
-
-    /**
-     * Constructs a new MessageFormat using the given pattern and the
-     * default locale.
-     *
-     * @param pattern   Pattern used to construct object.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    MessageFormat(const UnicodeString& pattern,
-                  UErrorCode &status);
-
-    /**
-     * Constructs a new MessageFormat using the given pattern and locale.
-     * @param pattern   Pattern used to construct object.
-     * @param newLocale The locale to use for formatting dates and numbers.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    MessageFormat(const UnicodeString& pattern,
-                  const Locale& newLocale,
-                        UErrorCode& status);
-    /**
-     * Constructs a new MessageFormat using the given pattern and locale.
-     * @param pattern   Pattern used to construct object.
-     * @param newLocale The locale to use for formatting dates and numbers.
-     * @param parseError Struct to recieve information on position
-     *                   of error within the pattern.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    MessageFormat(const UnicodeString& pattern,
-                  const Locale& newLocale,
-                  UParseError& parseError,
-                  UErrorCode& status);
-    /**
-     * Constructs a new MessageFormat from an existing one.
-     * @stable ICU 2.0
-     */
-    MessageFormat(const MessageFormat&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 2.0
-     */
-    const MessageFormat& operator=(const MessageFormat&);
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~MessageFormat();
-
-    /**
-     * Clones this Format object polymorphically.  The caller owns the
-     * result and should delete it when done.
-     * @stable ICU 2.0
-     */
-    virtual Format* clone(void) const;
-
-    /**
-     * Returns 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;
-
-    /**
-     * Sets the locale. This locale is used for fetching default number or date
-     * format information.
-     * @param theLocale    the new locale value to be set.
-     * @stable ICU 2.0
-     */
-    virtual void setLocale(const Locale& theLocale);
-
-    /**
-     * Gets the locale. This locale is used for fetching default number or date
-     * format information.
-     * @return    the locale of the object.
-     * @stable ICU 2.0
-     */
-    virtual const Locale& getLocale(void) const;
-
-    /**
-     * Applies the given pattern string to this message format.
-     *
-     * @param pattern   The pattern to be applied.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    virtual void applyPattern(const UnicodeString& pattern,
-                              UErrorCode& status);
-    /**
-     * Applies the given pattern string to this message format.
-     *
-     * @param pattern    The pattern to be applied.
-     * @param parseError Struct to recieve information on position
-     *                   of error within pattern.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @stable ICU 2.0
-     */
-    virtual void applyPattern(const UnicodeString& pattern,
-                             UParseError& parseError,
-                             UErrorCode& status);
-
-    /**
-     * Returns a pattern that can be used to recreate this object.
-     *
-     * @param appendTo  Output parameter to receive the pattern.
-     *                  Result is appended to existing contents.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& toPattern(UnicodeString& appendTo) const;
-
-    /**
-     * Sets subformats.
-     * See the class description about format numbering.
-     * The caller should not delete the Format objects after this call.
-     * <EM>The array formatsToAdopt is not itself adopted.</EM> Its
-     * ownership is retained by the caller. If the call fails because
-     * memory cannot be allocated, then the formats will be deleted
-     * by this method, and this object will remain unchanged.
-     *
-     * <p>If this format uses named arguments, the new formats are discarded
-     * and this format remains unchanged.
-     *
-     * @stable ICU 2.0
-     * @param formatsToAdopt    the format to be adopted.
-     * @param count             the size of the array.
-     */
-    virtual void adoptFormats(Format** formatsToAdopt, int32_t count);
-
-    /**
-     * Sets subformats.
-     * See the class description about format numbering.
-     * Each item in the array is cloned into the internal array.
-     * If the call fails because memory cannot be allocated, then this
-     * object will remain unchanged.
-     *
-     * <p>If this format uses named arguments, the new formats are discarded
-     * and this format remains unchanged.
-     *
-     * @stable ICU 2.0
-     * @param newFormats the new format to be set.
-     * @param cnt        the size of the array.
-     */
-    virtual void setFormats(const Format** newFormats, int32_t cnt);
-
-
-    /**
-     * Sets one subformat.
-     * See the class description about format numbering.
-     * The caller should not delete the Format object after this call.
-     * If the number is over the number of formats already set,
-     * the item will be deleted and ignored.
-     *
-     * <p>If this format uses named arguments, the new format is discarded
-     * and this format remains unchanged.
-     *
-     * @stable ICU 2.0
-     * @param formatNumber     index of the subformat.
-     * @param formatToAdopt    the format to be adopted.
-     */
-    virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt);
-
-    /**
-     * Sets one subformat.
-     * See the class description about format numbering.
-     * If the number is over the number of formats already set,
-     * the item will be ignored.
-     * @param formatNumber     index of the subformat.
-     * @param format    the format to be set.
-     * @stable ICU 2.0
-     */
-    virtual void setFormat(int32_t formatNumber, const Format& format);
-
-    /**
-     * Gets format names. This function returns formatNames in StringEnumerations
-     * which can be used with getFormat() and setFormat() to export formattable
-     * array from current MessageFormat to another.  It is caller's resposibility
-     * to delete the returned formatNames.
-     * @param status  output param set to success/failure code.
-     * @stable ICU 4.0
-     */
-    virtual StringEnumeration* getFormatNames(UErrorCode& status);
-
-    /**
-     * Gets subformat pointer for given format name.
-     * This function supports both named and numbered
-     * arguments-- if numbered, the formatName is the
-     * corresponding UnicodeStrings (e.g. "0", "1", "2"...).
-     * The returned Format object should not be deleted by the caller,
-     * nor should the ponter of other object .  The pointer and its
-     * contents remain valid only until the next call to any method
-     * of this class is made with this object.
-     * @param formatName the name or number specifying a format
-     * @param status  output param set to success/failure code.
-     * @stable ICU 4.0
-     */
-    virtual Format* getFormat(const UnicodeString& formatName, UErrorCode& status);
-
-    /**
-     * Sets one subformat for given format name.
-     * See the class description about format name.
-     * This function supports both named and numbered
-     * arguments-- if numbered, the formatName is the
-     * corresponding UnicodeStrings (e.g. "0", "1", "2"...).
-     * If there is no matched formatName or wrong type,
-     * the item will be ignored.
-     * @param formatName  Name of the subformat.
-     * @param format      the format to be set.
-     * @param status  output param set to success/failure code.
-     * @stable ICU 4.0
-     */
-    virtual void setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status);
-
-    /**
-     * Sets one subformat for given format name.
-     * See the class description about format name.
-     * This function supports both named and numbered
-     * arguments-- if numbered, the formatName is the
-     * corresponding UnicodeStrings (e.g. "0", "1", "2"...).
-     * If there is no matched formatName or wrong type,
-     * the item will be ignored.
-     * The caller should not delete the Format object after this call.
-     * @param formatName  Name of the subformat.
-     * @param formatToAdopt  Format to be adopted.
-     * @param status      output param set to success/failure code.
-     * @stable ICU 4.0
-     */
-    virtual void adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status);
-
-    /**
-     * Gets an array of subformats of this object.  The returned array
-     * should not be deleted by the caller, nor should the pointers
-     * within the array.  The array and its contents remain valid only
-     * until the next call to this format. See the class description
-     * about format numbering.
-     *
-     * @param count output parameter to receive the size of the array
-     * @return an array of count Format* objects, or NULL if out of
-     * memory.  Any or all of the array elements may be NULL.
-     * @stable ICU 2.0
-     */
-    virtual const Format** getFormats(int32_t& count) const;
-
-
-    using Format::format;
-
-    /**
-     * Formats the given array of arguments into a user-readable string.
-     * Does not take ownership of the Formattable* array or its contents.
-     *
-     * <p>If this format uses named arguments, appendTo is unchanged and
-     * status is set to U_ILLEGAL_ARGUMENT_ERROR.
-     *
-     * @param source    An array of objects to be formatted.
-     * @param count     The number of elements of 'source'.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param ignore    Not used; inherited from base class API.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    UnicodeString& format(const Formattable* source,
-                          int32_t count,
-                          UnicodeString& appendTo,
-                          FieldPosition& ignore,
-                          UErrorCode& status) const;
-
-    /**
-     * Formats the given array of arguments into a user-readable string
-     * using the given pattern.
-     *
-     * <p>If this format uses named arguments, appendTo is unchanged and
-     * status is set to U_ILLEGAL_ARGUMENT_ERROR.
-     *
-     * @param pattern   The pattern.
-     * @param arguments An array of objects to be formatted.
-     * @param count     The number of elements of 'source'.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    static UnicodeString& format(const UnicodeString& pattern,
-                                 const Formattable* arguments,
-                                 int32_t count,
-                                 UnicodeString& appendTo,
-                                 UErrorCode& status);
-
-    /**
-     * Formats the given array of arguments into a user-readable
-     * string.  The array must be stored within a single Formattable
-     * object of type kArray. If the Formattable object type is not of
-     * type kArray, then returns a failing UErrorCode.
-     *
-     * <p>If this format uses named arguments, appendTo is unchanged and
-     * status is set to U_ILLEGAL_ARGUMENT_ERROR.
-     *
-     * @param obj       A Formattable of type kArray containing
-     *                  arguments 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    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& format(const Formattable& obj,
-                                  UnicodeString& appendTo,
-                                  FieldPosition& pos,
-                                  UErrorCode& status) const;
-
-    /**
-     * Formats the given array of arguments into a user-readable
-     * string.  The array must be stored within a single Formattable
-     * object of type kArray. If the Formattable object type is not of
-     * type kArray, then returns a failing UErrorCode.
-     *
-     * @param obj       The object to format
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    UnicodeString& format(const Formattable& obj,
-                          UnicodeString& appendTo,
-                          UErrorCode& status) const;
-
-
-    /**
-     * Formats the given array of arguments into a user-defined argument name
-     * array. This function supports both named and numbered
-     * arguments-- if numbered, the formatName is the
-     * corresponding UnicodeStrings (e.g. "0", "1", "2"...).
-     *
-     * @param argumentNames argument name array
-     * @param arguments An array of objects to be formatted.
-     * @param count     The number of elements of 'argumentNames' and
-     *                  arguments.  The number of argumentNames and arguments
-     *                  must be the same.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.0
-     */
-    UnicodeString& format(const UnicodeString* argumentNames,
-                          const Formattable* arguments,
-                          int32_t count,
-                          UnicodeString& appendTo,
-                          UErrorCode& status) const;
-    /**
-     * Parses the given string into an array of output arguments.
-     *
-     * @param source    String to be parsed.
-     * @param pos       On input, starting position for parse. On output,
-     *                  final position after parse.  Unchanged if parse
-     *                  fails.
-     * @param count     Output parameter to receive the number of arguments
-     *                  parsed.
-     * @return an array of parsed arguments.  The caller owns both
-     * the array and its contents.
-     * @stable ICU 2.0
-     */
-    virtual Formattable* parse(const UnicodeString& source,
-                               ParsePosition& pos,
-                               int32_t& count) const;
-
-    /**
-     * Parses the given string into an array of output arguments.
-     *
-     * <p>If this format uses named arguments, status is set to
-     * U_ARGUMENT_TYPE_MISMATCH.
-     *
-     * @param source    String to be parsed.
-     * @param count     Output param to receive size of returned array.
-     * @param status    Input/output error code.  If the
-     *                  pattern cannot be parsed, set to failure code.
-     * @return an array of parsed arguments.  The caller owns both
-     * the array and its contents. Returns NULL if status is not U_ZERO_ERROR.
-     *
-     * @stable ICU 2.0
-     */
-    virtual Formattable* parse(const UnicodeString& source,
-                               int32_t& count,
-                               UErrorCode& status) const;
-
-    /**
-     * Parses the given string into an array of output arguments
-     * stored within a single Formattable of type kArray.
-     *
-     * @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 pos       On input, starting position for parse. On output,
-     *                  final position after parse.  Unchanged if parse
-     *                  fails.
-     * @stable ICU 2.0
-     */
-    virtual void parseObject(const UnicodeString& source,
-                             Formattable& result,
-                             ParsePosition& pos) const;
-
-    /**
-     * Convert an 'apostrophe-friendly' pattern into a standard
-     * pattern.  Standard patterns treat all apostrophes as
-     * quotes, which is problematic in some languages, e.g.
-     * French, where apostrophe is commonly used.  This utility
-     * assumes that only an unpaired apostrophe immediately before
-     * a brace is a true quote.  Other unpaired apostrophes are paired,
-     * and the resulting standard pattern string is returned.
-     *
-     * <p><b>Note</b> it is not guaranteed that the returned pattern
-     * is indeed a valid pattern.  The only effect is to convert
-     * between patterns having different quoting semantics.
-     *
-     * @param pattern the 'apostrophe-friendly' patttern to convert
-     * @param status    Input/output error code.  If the pattern
-     *                  cannot be parsed, the failure code is set.
-     * @return the standard equivalent of the original pattern
-     * @stable ICU 3.4
-     */
-    static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern,
-        UErrorCode& status);
-
-    /**
-     * Returns true if this MessageFormat uses named arguments,
-     * and false otherwise.  See class description.
-     *
-     * @return true if named arguments are used.
-     * @stable ICU 4.0
-     */
-    UBool usesNamedArguments() const;
-
-
-    /**
-     * This API is for ICU internal use only.
-     * Please do not use it.
-     *
-     * Returns argument types count in the parsed pattern.
-     * Used to distinguish pattern "{0} d" and "d".
-     *
-     * @return           The number of formattable types in the pattern
-     * @internal
-     */
-    int32_t getArgTypeCount() const;
-
-    /**
-     * 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;
-
-    /**
-     * 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);
-
-private:
-
-    Locale              fLocale;
-    UnicodeString       fPattern;
-    Format**            formatAliases; // see getFormats
-    int32_t             formatAliasesCapacity;
-    UProperty           idStart;
-    UProperty           idContinue;
-
-    MessageFormat(); // default constructor not implemented
-
-    /*
-     * A structure representing one subformat of this MessageFormat.
-     * Each subformat has a Format object, an offset into the plain
-     * pattern text fPattern, and an argument number.  The argument
-     * number corresponds to the array of arguments to be formatted.
-     * @internal
-     */
-    class Subformat;
-
-    /**
-     * A MessageFormat contains an array of subformats.  This array
-     * needs to grow dynamically if the MessageFormat is modified.
-     */
-    Subformat* subformats;
-    int32_t    subformatCount;
-    int32_t    subformatCapacity;
-
-    /**
-     * A MessageFormat formats an array of arguments.  Each argument
-     * has an expected type, based on the pattern.  For example, if
-     * the pattern contains the subformat "{3,number,integer}", then
-     * we expect argument 3 to have type Formattable::kLong.  This
-     * array needs to grow dynamically if the MessageFormat is
-     * modified.
-     */
-    Formattable::Type* argTypes;
-    int32_t            argTypeCount;
-    int32_t            argTypeCapacity;
-
-    /**
-      * Is true iff all argument names are non-negative numbers.
-      *
-      */
-    UBool isArgNumeric;
-
-    // Variable-size array management
-    UBool allocateSubformats(int32_t capacity);
-    UBool allocateArgTypes(int32_t capacity);
-
-    /**
-     * Default Format objects used when no format is specified and a
-     * numeric or date argument is formatted.  These are volatile
-     * cache objects maintained only for performance.  They do not
-     * participate in operator=(), copy constructor(), nor
-     * operator==().
-     */
-    NumberFormat* defaultNumberFormat;
-    DateFormat*   defaultDateFormat;
-
-    /**
-     * Method to retrieve default formats (or NULL on failure).
-     * These are semantically const, but may modify *this.
-     */
-    const NumberFormat* getDefaultNumberFormat(UErrorCode&) const;
-    const DateFormat*   getDefaultDateFormat(UErrorCode&) const;
-
-    /**
-     * Finds the word s, in the keyword list and returns the located index.
-     * @param s the keyword to be searched for.
-     * @param list the list of keywords to be searched with.
-     * @return the index of the list which matches the keyword s.
-     */
-    static int32_t findKeyword( const UnicodeString& s,
-                                const UChar * const *list);
-
-    /**
-     * Formats the array of arguments and copies the result into the
-     * result buffer, updates the field position.
-     *
-     * @param arguments The formattable objects array.
-     * @param cnt       The array count.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Field position status.
-     * @param recursionProtection
-     *                  Initially zero. Bits 0..9 are used to indicate
-     *                  that a parameter has already been seen, to
-     *                  avoid recursion.  Currently unused.
-     * @param success   The error code status.
-     * @return          Reference to 'appendTo' parameter.
-     */
-    UnicodeString&  format( const Formattable* arguments,
-                            int32_t cnt,
-                            UnicodeString& appendTo,
-                            FieldPosition& status,
-                            int32_t recursionProtection,
-                            UErrorCode& success) const;
-
-    UnicodeString&  format( const Formattable* arguments,
-                            const UnicodeString *argumentNames,
-                            int32_t cnt,
-                            UnicodeString& appendTo,
-                            FieldPosition& status,
-                            int32_t recursionProtection,
-                            UErrorCode& success) const;
-
-    void             makeFormat(int32_t offsetNumber,
-                                UnicodeString* segments,
-                                UParseError& parseError,
-                                UErrorCode& success);
-
-    /**
-     * Convenience method that ought to be in NumberFormat
-     */
-    NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const;
-
-    /**
-     * Checks the range of the source text to quote the special
-     * characters, { and ' and copy to target buffer.
-     * @param source
-     * @param start the text offset to start the process of in the source string
-     * @param end the text offset to end the process of in the source string
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     */
-    static void copyAndFixQuotes(const UnicodeString& appendTo, int32_t start, int32_t end, UnicodeString& target);
-
-    /**
-     * Returns array of argument types in the parsed pattern
-     * for use in C API.  Only for the use of umsg_vformat().  Not
-     * for public consumption.
-     * @param listCount  Output parameter to receive the size of array
-     * @return           The array of formattable types in the pattern
-     * @internal
-     */
-    const Formattable::Type* getArgTypeList(int32_t& listCount) const {
-        listCount = argTypeCount;
-        return argTypes;
-    }
-
-    /**
-     * Returns FALSE if the argument name is not legal.
-     * @param  argName   argument name.
-     * @return TRUE if the argument name is legal, otherwise return FALSE.
-     */
-    UBool isLegalArgName(const UnicodeString& argName) const;
-
-    friend class MessageFormatAdapter; // getFormatTypeList() access
-};
-
-inline UnicodeString&
-MessageFormat::format(const Formattable& obj,
-                      UnicodeString& appendTo,
-                      UErrorCode& status) const {
-    return Format::format(obj, appendTo, status);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _MSGFMT
-//eof
diff --git a/source/i18n/unicode/numfmt.h b/source/i18n/unicode/numfmt.h
deleted file mode 100644
index 63914ca..0000000
--- a/source/i18n/unicode/numfmt.h
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
-********************************************************************************
-* Copyright (C) 1997-2010, International Business Machines Corporation and others.
-* All Rights Reserved.
-********************************************************************************
-*
-* File NUMFMT.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*   03/18/97    clhuang     Updated per C++ implementation.
-*   04/17/97    aliu        Changed DigitCount to int per code review.
-*    07/20/98    stephen        JDK 1.2 sync up. Added scientific support.
-*                            Changed naming conventions to match C++ guidelines
-*                            Derecated Java style constants (eg, INTEGER_FIELD)
-********************************************************************************
-*/
-
-#ifndef NUMFMT_H
-#define NUMFMT_H
-
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Abstract base class for all number formats.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/unistr.h"
-#include "unicode/format.h"
-#include "unicode/unum.h" // UNumberFormatStyle
-#include "unicode/locid.h"
-#include "unicode/stringpiece.h"
-
-U_NAMESPACE_BEGIN
-
-#if !UCONFIG_NO_SERVICE
-class NumberFormatFactory;
-class StringEnumeration;
-#endif
-
-/**
- *
- * Abstract base class for all number formats.  Provides interface for
- * formatting and parsing a number.  Also provides methods for
- * determining which locales have number formats, and what their names
- * are.
- * <P>
- * NumberFormat helps you to format and parse numbers for any locale.
- * Your code can be completely independent of the locale conventions
- * for decimal points, thousands-separators, or even the particular
- * decimal digits used, or whether the number format is even decimal.
- * <P>
- * To format a number for the current Locale, use one of the static
- * factory methods:
- * <pre>
- * \code
- *    double myNumber = 7.0;
- *    UnicodeString myString;
- *    UErrorCode success = U_ZERO_ERROR;
- *    NumberFormat* nf = NumberFormat::createInstance(success)
- *    nf->format(myNumber, myString);
- *    cout << " Example 1: " << myString << endl;
- * \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
- *     UnicodeString myString;
- *     UErrorCode success = U_ZERO_ERROR;
- *     nf = NumberFormat::createInstance( success );
- *     int32_t a[] = { 123, 3333, -1234567 };
- *     const int32_t a_len = sizeof(a) / sizeof(a[0]);
- *     myString.remove();
- *     for (int32_t i = 0; i < a_len; i++) {
- *         nf->format(a[i], myString);
- *         myString += " ; ";
- *     }
- *     cout << " Example 2: " << myString << endl;
- * \endcode
- * </pre>
- * To format a number for a different Locale, specify it in the
- * call to createInstance().
- * <pre>
- * \code
- *     nf = NumberFormat::createInstance( Locale::FRENCH, success );
- * \endcode
- * </pre>
- * You can use a NumberFormat to parse also.
- * <pre>
- * \code
- *    UErrorCode success;
- *    Formattable result(-999);  // initialized with error code
- *    nf->parse(myString, result, success);
- * \endcode
- * </pre>
- * Use createInstance to get the normal number format for that country.
- * There are other static factory methods available.  Use getCurrency
- * to get the currency number format for that country.  Use getPercent
- * to get a format for displaying percentages. With this format, a
- * fraction from 0.53 is displayed as 53%.
- * <P>
- * Starting from ICU 4.2, you can use createInstance() by passing in a 'style'
- * as parameter to get the correct instance.
- * For example,
- * use createInstance(...kNumberStyle...) to get the normal number format,
- * createInstance(...kPercentStyle...) to get a format for displaying
- * percentage,
- * createInstance(...kScientificStyle...) to get a format for displaying
- * scientific number,
- * createInstance(...kCurrencyStyle...) to get the currency number format,
- * in which the currency is represented by its symbol, for example, "$3.00".
- * createInstance(...kIsoCurrencyStyle...)  to get the currency number format,
- * in which the currency is represented by its ISO code, for example "USD3.00".
- * createInstance(...kPluralCurrencyStyle...) to get the currency number format,
- * in which the currency is represented by its full name in plural format,
- * for example, "3.00 US dollars" or "1.00 US dollar".
- * <P>
- * You can also control the display of numbers with such methods as
- * getMinimumFractionDigits.  If you want even more control over the
- * format or parsing, or want to give your users more control, you can
- * try casting the NumberFormat you get from the factory methods to a
- * DecimalNumberFormat. This will work for the vast majority of
- * countries; just remember to put it in a try block in case you
- * encounter an unusual one.
- * <P>
- * You can also use forms of the parse and format methods with
- * ParsePosition and FieldPosition to allow you to:
- * <ul type=round>
- *   <li>(a) progressively parse through pieces of a string.
- *   <li>(b) align the decimal point and other areas.
- * </ul>
- * For example, you can align numbers in two ways.
- * <P>
- * If you are using a monospaced font with spacing for alignment, you
- * can pass the FieldPosition in your format call, with field =
- * INTEGER_FIELD. On output, getEndIndex will be set to the offset
- * between the last character of the integer and the decimal. Add
- * (desiredSpaceCount - getEndIndex) spaces at the front of the
- * string.
- * <P>
- * If you are using proportional fonts, instead of padding with
- * spaces, measure the width of the string in pixels from the start to
- * getEndIndex.  Then move the pen by (desiredPixelWidth -
- * widthToAlignmentPoint) before drawing the text.  It also works
- * where there is no decimal, but possibly additional characters at
- * the end, e.g. with parentheses in negative numbers: "(12)" for -12.
- * <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.
- *
- * @stable ICU 2.0
- */
-class U_I18N_API NumberFormat : public Format {
-public:
-
-    /**
-     * Constants for various number format styles.
-     * kNumberStyle specifies a normal number style of format.
-     * kCurrencyStyle specifies a currency format using currency symbol name,
-     * such as in "$1.00".
-     * kPercentStyle specifies a style of format to display percent.
-     * kScientificStyle specifies a style of format to display scientific number.
-     * kISOCurrencyStyle specifies a currency format using ISO currency code,
-     * such as in "USD1.00".
-     * kPluralCurrencyStyle specifies a currency format using currency plural
-     * names, such as in "1.00 US dollar" and "3.00 US dollars".
-     * @draft ICU 4.2
-     */
-    enum EStyles {
-        kNumberStyle,
-        kCurrencyStyle,
-        kPercentStyle,
-        kScientificStyle,
-        kIsoCurrencyStyle,
-        kPluralCurrencyStyle,
-        kStyleCount // ALWAYS LAST ENUM: number of styles
-    };
-
-    /**
-     * Alignment Field constants used to construct a FieldPosition object.
-     * Signifies that the position of the integer part or fraction part of
-     * a formatted number should be returned.
-     *
-     * Note: as of ICU 4.4, the values in this enum have been extended to
-     * support identification of all number format fields, not just those
-     * pertaining to alignment.
-     *
-     * @see FieldPosition
-     * @stable ICU 2.0
-     */
-    enum EAlignmentFields {
-        kIntegerField,
-        kFractionField,
-        kDecimalSeparatorField,
-        kExponentSymbolField,
-        kExponentSignField,
-        kExponentField,
-        kGroupingSeparatorField,
-        kCurrencyField,
-        kPercentField,
-        kPermillField,
-        kSignField,
-
-    /**
-     * These constants are provided for backwards compatibility only.
-     * Please use the C++ style constants defined above.
-     * @stable ICU 2.0
-     */
-        INTEGER_FIELD        = kIntegerField,
-        FRACTION_FIELD        = kFractionField
-    };
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~NumberFormat();
-
-    /**
-     * Return true if the given Format objects are semantically equal.
-     * Objects of different subclasses are considered unequal.
-     * @return    true if the given Format objects are semantically equal.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const Format& other) const;
-
-
-    using Format::format;
-
-    /**
-     * Format an object to produce a string.  This method handles
-     * Formattable objects with numeric types. If the Formattable
-     * object type is not a numeric type, then it returns a failing
-     * UErrorCode.
-     *
-     * @param obj       The object to format.
-     * @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;
-
-    /**
-     * Format an object to produce a string.  This method handles
-     * Formattable objects with numeric types. If the Formattable
-     * object type is not a numeric type, then it returns a failing
-     * UErrorCode.
-     *
-     * @param obj       The object to format.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.  Can be
-     *                  NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(const Formattable& obj,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-    /**
-     * Parse a string to produce an object.  This methods handles
-     * parsing of numeric strings into Formattable objects with numeric
-     * 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
-     * indicates the position after the successfully parsed text.  If
-     * an error occurs, parse_pos.index is unchanged.
-     * <P>
-     * When parsing, leading whitespace is discarded (with 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;
-
-    /**
-     * Format a double 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(  double number,
-                            UnicodeString& appendTo) const;
-
-    /**
-     * 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;
-
-    /**
-     * 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;
-
-    /**
-     * Format a double number. Concrete subclasses must implement
-     * these pure virtual methods.
-     *
-     * @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 = 0;
-    /**
-     * Format a double number. Subclasses must implement
-     * this method.
-     *
-     * @param number    The value to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(double number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-    /**
-     * Format a long number. Concrete subclasses must implement
-     * these pure virtual methods.
-     *
-     * @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 = 0;
-
-    /**
-     * Format an int32 number. Subclasses must implement
-     * this method.
-     *
-     * @param number    The value to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(int32_t number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-    /**
-     * Format an int64 number. (Not abstract to retain compatibility
-     * with earlier releases, however subclasses should override this
-     * method as it just delegates to format(int32_t number...);
-     *
-     * @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 an int64 number. Subclasses must implement
-     * this method.
-     *
-     * @param number    The value to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(int64_t number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-    /**
-     * Format a decimal number. Subclasses must implement
-     * this method.  The syntax of the unformatted number is a "numeric string"
-     * as defined in the Decimal Arithmetic Specification, available at
-     * http://speleotrove.com/decimal
-     *
-     * @param number    The unformatted number, as a string, to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     *                  Can be NULL.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable 4.4
-     */
-    virtual UnicodeString& format(const StringPiece &number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-public:
-    /**
-     * Format a decimal number. 
-     * The number is a DigitList wrapper onto a floating point decimal number.
-     * The default implementation in NumberFormat converts the decimal number
-     * to a double and formats that.  Subclasses of NumberFormat that want
-     * to specifically handle big decimal numbers must override this method.
-     * class DecimalFormat does so.
-     *
-     * @param number    The number, a DigitList format Decimal Floating Point.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.
-     * @param status    Output param filled with success/failure status.
-     * @return          Reference to 'appendTo' parameter.
-     * @internal
-     */
-    virtual UnicodeString& format(const DigitList &number,
-                                  UnicodeString& appendTo,
-                                  FieldPositionIterator* posIter,
-                                  UErrorCode& status) const;
-
-    /**
-     * Format a decimal number. 
-     * The number is a DigitList wrapper onto a floating point decimal number.
-     * The default implementation in NumberFormat converts the decimal number
-     * to a double and formats that.  Subclasses of NumberFormat that want
-     * to specifically handle big decimal numbers must override this method.
-     * class DecimalFormat does so.
-     *
-     * @param number    The number, a DigitList format Decimal Floating Point.
-     * @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.
-     * @internal
-     */
-    virtual UnicodeString& format(const DigitList &number,
-                                  UnicodeString& appendTo,
-                                  FieldPosition& pos,
-                                  UErrorCode& status) const;
-
-public:
-
-    /**
-     * Redeclared Format method.
-     * @param obj       The object to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Output parameter set to a failure error code
-     *                  when a failure occurs.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    UnicodeString& format(const Formattable& obj,
-                          UnicodeString& appendTo,
-                          UErrorCode& status) const;
-
-   /**
-    * Return a long if possible (e.g. within range LONG_MAX,
-    * LONG_MAX], and with no decimals), otherwise a double.  If
-    * IntegerOnly is set, will stop at a decimal point (or equivalent;
-    * e.g. for rational numbers "1 2/3", will stop after the 1).
-    * <P>
-    * If no object can be parsed, index is unchanged, and NULL is
-    * returned.
-    * <P>
-    * This is a pure virtual which concrete subclasses must implement.
-    *
-    * @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.
-    * @return               A Formattable object of numeric type.  The caller
-    *                       owns this an must delete it.  NULL on failure.
-    * @stable ICU 2.0
-    */
-    virtual void parse(const UnicodeString& text,
-                       Formattable& result,
-                       ParsePosition& parsePosition) const = 0;
-
-    /**
-     * Parse a string as a numeric value, and return a Formattable
-     * numeric object. This method parses integers only if IntegerOnly
-     * is set.
-     *
-     * @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 status        Output parameter set to a failure error code
-     *                      when a failure occurs.
-     * @return              A Formattable object of numeric type.  The caller
-     *                      owns this an must delete it.  NULL on failure.
-     * @see                 NumberFormat::isParseIntegerOnly
-     * @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;
-
-    /**
-     * Return true if this format will parse numbers as integers
-     * only.  For example in the English locale, with ParseIntegerOnly
-     * true, the string "1234." would be parsed as the integer value
-     * 1234 and parsing would stop at the "." character.  Of course,
-     * the exact format accepted by the parse operation is locale
-     * dependant and determined by sub-classes of NumberFormat.
-     * @return    true if this format will parse numbers as integers
-     *            only.
-     * @stable ICU 2.0
-     */
-    UBool isParseIntegerOnly(void) const;
-
-    /**
-     * Sets whether or not numbers should be parsed as integers only.
-     * @param value    set True, this format will parse numbers as integers
-     *                 only.
-     * @see isParseIntegerOnly
-     * @stable ICU 2.0
-     */
-    virtual void setParseIntegerOnly(UBool value);
-
-    /**
-     * Returns the default number format for the current default
-     * locale.  The default format is one of the styles provided by
-     * the other factory methods: getNumberInstance,
-     * getCurrencyInstance or getPercentInstance.  Exactly which one
-     * is locale dependant.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
-
-    /**
-     * Returns the default number format for the specified locale.
-     * The default format is one of the styles provided by the other
-     * factory methods: getNumberInstance, getCurrencyInstance or
-     * getPercentInstance.  Exactly which one is locale dependant.
-     * @param inLocale    the given locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
-                                        UErrorCode&);
-
-    /**
-     * Creates the specified decimal format style of the desired locale.
-     * @param desiredLocale    the given locale.
-     * @param choice           the given style.
-     * @param success          Output param filled with success/failure status.
-     * @return                 A new NumberFormat instance.
-     * @draft ICU 4.2
-     */
-    static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
-
-
-    /**
-     * Returns a currency format for the current default locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
-
-    /**
-     * Returns a currency format for the specified locale.
-     * @param inLocale    the given locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
-                                                UErrorCode&);
-
-    /**
-     * Returns a percentage format for the current default locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
-
-    /**
-     * Returns a percentage format for the specified locale.
-     * @param inLocale    the given locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
-                                               UErrorCode&);
-
-    /**
-     * Returns a scientific format for the current default locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
-
-    /**
-     * Returns a scientific format for the specified locale.
-     * @param inLocale    the given locale.
-     * @stable ICU 2.0
-     */
-    static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
-                                                UErrorCode&);
-
-    /**
-     * Get the set of Locales for which NumberFormats are installed.
-     * @param count    Output param to receive the size of the locales
-     * @stable ICU 2.0
-     */
-    static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
-
-#if !UCONFIG_NO_SERVICE
-    /**
-     * Register a new NumberFormatFactory.  The factory will be adopted.
-     * @param toAdopt the NumberFormatFactory 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 factory
-     * @stable ICU 2.6
-     */
-    static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
-
-    /**
-     * Unregister a previously-registered NumberFormatFactory using the key returned from the
-     * register call.  Key becomes invalid after a successful call and should not be used again.
-     * The NumberFormatFactory corresponding to the key will be deleted.
-     * @param key the registry key returned by a previous call to registerFactory
-     * @param status the in/out status code, no special meanings are assigned
-     * @return TRUE if the factory for the key was successfully unregistered
-     * @stable ICU 2.6
-     */
-    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.6
-     */
-    static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
-#endif /* UCONFIG_NO_SERVICE */
-
-    /**
-     * Returns true if grouping is used in this format. For example,
-     * in the English locale, with grouping on, the number 1234567
-     * might be formatted as "1,234,567". The grouping separator as
-     * well as the size of each group is locale dependant and is
-     * determined by sub-classes of NumberFormat.
-     * @see setGroupingUsed
-     * @stable ICU 2.0
-     */
-    UBool isGroupingUsed(void) const;
-
-    /**
-     * Set whether or not grouping will be used in this format.
-     * @param newValue    True, grouping will be used in this format.
-     * @see getGroupingUsed
-     * @stable ICU 2.0
-     */
-    virtual void setGroupingUsed(UBool newValue);
-
-    /**
-     * Returns the maximum number of digits allowed in the integer portion of a
-     * number.
-     * @return     the maximum number of digits allowed in the integer portion of a
-     *             number.
-     * @see setMaximumIntegerDigits
-     * @stable ICU 2.0
-     */
-    int32_t getMaximumIntegerDigits(void) const;
-
-    /**
-     * Sets the maximum number of digits allowed in the integer portion of a
-     * number. maximumIntegerDigits must be >= minimumIntegerDigits.  If the
-     * new value for maximumIntegerDigits is less than the current value
-     * of minimumIntegerDigits, then minimumIntegerDigits will also be set to
-     * the new value.
-     *
-     * @param newValue    the new value for the maximum number of digits
-     *                    allowed in the integer portion of a number.
-     * @see getMaximumIntegerDigits
-     * @stable ICU 2.0
-     */
-    virtual void setMaximumIntegerDigits(int32_t newValue);
-
-    /**
-     * Returns the minimum number of digits allowed in the integer portion of a
-     * number.
-     * @return    the minimum number of digits allowed in the integer portion of a
-     *            number.
-     * @see setMinimumIntegerDigits
-     * @stable ICU 2.0
-     */
-    int32_t getMinimumIntegerDigits(void) const;
-
-    /**
-     * Sets the minimum number of digits allowed in the integer portion of a
-     * number. minimumIntegerDigits must be &lt;= maximumIntegerDigits.  If the
-     * new value for minimumIntegerDigits exceeds the current value
-     * of maximumIntegerDigits, then maximumIntegerDigits will also be set to
-     * the new value.
-     * @param newValue    the new value to be set.
-     * @see getMinimumIntegerDigits
-     * @stable ICU 2.0
-     */
-    virtual void setMinimumIntegerDigits(int32_t newValue);
-
-    /**
-     * Returns the maximum number of digits allowed in the fraction portion of a
-     * number.
-     * @return    the maximum number of digits allowed in the fraction portion of a
-     *            number.
-     * @see setMaximumFractionDigits
-     * @stable ICU 2.0
-     */
-    int32_t getMaximumFractionDigits(void) const;
-
-    /**
-     * Sets the maximum number of digits allowed in the fraction portion of a
-     * number. maximumFractionDigits must be >= minimumFractionDigits.  If the
-     * new value for maximumFractionDigits is less than the current value
-     * of minimumFractionDigits, then minimumFractionDigits will also be set to
-     * the new value.
-     * @param newValue    the new value to be set.
-     * @see getMaximumFractionDigits
-     * @stable ICU 2.0
-     */
-    virtual void setMaximumFractionDigits(int32_t newValue);
-
-    /**
-     * Returns the minimum number of digits allowed in the fraction portion of a
-     * number.
-     * @return    the minimum number of digits allowed in the fraction portion of a
-     *            number.
-     * @see setMinimumFractionDigits
-     * @stable ICU 2.0
-     */
-    int32_t getMinimumFractionDigits(void) const;
-
-    /**
-     * Sets the minimum number of digits allowed in the fraction portion of a
-     * number. minimumFractionDigits must be &lt;= maximumFractionDigits.   If the
-     * new value for minimumFractionDigits exceeds the current value
-     * of maximumFractionDigits, then maximumIntegerDigits will also be set to
-     * the new value
-     * @param newValue    the new value to be set.
-     * @see getMinimumFractionDigits
-     * @stable ICU 2.0
-     */
-    virtual void setMinimumFractionDigits(int32_t newValue);
-
-    /**
-     * 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.
-     * @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);
-
-    /**
-     * Gets the currency used to display currency
-     * amounts.  This may be an empty string for some subclasses.
-     * @return a 3-letter null-terminated ISO code indicating
-     * the currency in use, or a pointer to the empty string.
-     * @stable ICU 2.6
-     */
-    const UChar* getCurrency() const;
-
-public:
-
-    /**
-     * Return the class ID for this class.  This is useful for
-     * comparing to a return value from getDynamicClassID(). Note that,
-     * because NumberFormat is an abstract base class, no fully constructed object
-     * will have the class ID returned by NumberFormat::getStaticClassID().
-     * @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.
-     * <P>
-     * @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;
-
-protected:
-
-    /**
-     * Default constructor for subclass use only.
-     * @stable ICU 2.0
-     */
-    NumberFormat();
-
-    /**
-     * Copy constructor.
-     * @stable ICU 2.0
-     */
-    NumberFormat(const NumberFormat&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 2.0
-     */
-    NumberFormat& operator=(const NumberFormat&);
-
-    /**
-     * 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;
-
-private:
-
-    /**
-     * Creates the specified decimal format style of the desired locale.
-     * @param desiredLocale    the given locale.
-     * @param choice           the given style.
-     * @param success          Output param filled with success/failure status.
-     * @return                 A new NumberFormat instance.
-     */
-    static NumberFormat* makeInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
-
-    UBool      fGroupingUsed;
-    int32_t     fMaxIntegerDigits;
-    int32_t     fMinIntegerDigits;
-    int32_t     fMaxFractionDigits;
-    int32_t     fMinFractionDigits;
-    UBool      fParseIntegerOnly;
-
-    // ISO currency code
-    UChar      fCurrency[4];
-
-    friend class ICUNumberFormatFactory; // access to makeInstance, EStyles
-    friend class ICUNumberFormatService;
-};
-
-#if !UCONFIG_NO_SERVICE
-/**
- * A NumberFormatFactory is used to register new number formats.  The factory
- * should be able to create any of the predefined formats for each locale it
- * supports.  When registered, the locales it supports extend or override the
- * locale already supported by ICU.
- *
- * @stable ICU 2.6
- */
-class U_I18N_API NumberFormatFactory : public UObject {
-public:
-
-    /**
-     * Destructor
-     * @stable ICU 3.0
-     */
-    virtual ~NumberFormatFactory();
-
-    /**
-     * Return true if this factory will be visible.  Default is true.
-     * If not visible, the locales supported by this factory will not
-     * be listed by getAvailableLocales.
-     * @stable ICU 2.6
-     */
-    virtual UBool visible(void) const = 0;
-
-    /**
-     * Return the locale names directly supported by this factory.  The number of names
-     * is returned in count;
-     * @stable ICU 2.6
-     */
-    virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
-
-    /**
-     * Return a number format of the appropriate type.  If the locale
-     * is not supported, return null.  If the locale is supported, but
-     * the type is not provided by this service, return null.  Otherwise
-     * return an appropriate instance of NumberFormat.
-     * @stable ICU 2.6
-     */
-    virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
-};
-
-/**
- * A NumberFormatFactory that supports a single locale.  It can be visible or invisible.
- * @stable ICU 2.6
- */
-class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory {
-protected:
-    /**
-     * True if the locale supported by this factory is visible.
-     * @stable ICU 2.6
-     */
-    const UBool _visible;
-
-    /**
-     * The locale supported by this factory, as a UnicodeString.
-     * @stable ICU 2.6
-     */
-    UnicodeString _id;
-
-public:
-    /**
-     * @stable ICU 2.6
-     */
-    SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
-
-    /**
-     * @stable ICU 3.0
-     */
-    virtual ~SimpleNumberFormatFactory();
-
-    /**
-     * @stable ICU 2.6
-     */
-    virtual UBool visible(void) const;
-
-    /**
-     * @stable ICU 2.6
-     */
-    virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
-};
-#endif /* #if !UCONFIG_NO_SERVICE */
-
-// -------------------------------------
-
-inline UBool
-NumberFormat::isParseIntegerOnly() const
-{
-    return fParseIntegerOnly;
-}
-
-inline UnicodeString&
-NumberFormat::format(const Formattable& obj,
-                     UnicodeString& appendTo,
-                     UErrorCode& status) const {
-    return Format::format(obj, appendTo, status);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _NUMFMT
-//eof
diff --git a/source/i18n/unicode/numsys.h b/source/i18n/unicode/numsys.h
deleted file mode 100644
index 4fed002..0000000
--- a/source/i18n/unicode/numsys.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-*
-* File NUMSYS.H
-*
-* Modification History:*
-*   Date        Name        Description
-*
-********************************************************************************
-*/
-
-#ifndef NUMSYS
-#define NUMSYS
-
-/**
- * \def NUMSYS_NAME_CAPACITY
- * Size of a numbering system name.
- * @internal
- */
-#define NUMSYS_NAME_CAPACITY 8
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: NumberingSystem object
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-
-#include "unicode/format.h"
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * Defines numbering systems. A numbering system describes the scheme by which 
- * numbers are to be presented to the end user.  In its simplest form, a numbering
- * system describes the set of digit characters that are to be used to display
- * numbers, such as Western digits, Thai digits, Arabic-Indic digits, etc. 
- * More complicated numbering systems are algorithmic in nature, and require use
- * of an RBNF formatter ( rule based number formatter ), in order to calculate
- * the characters to be displayed for a given number.  Examples of algorithmic
- * numbering systems include Roman numerals, Chinese numerals, and Hebrew numerals.
- * Formatting rules for many commonly used numbering systems are included in
- * the ICU package, based on the numbering system rules defined in CLDR.
- * Alternate numbering systems can be specified to a locale by using the
- * numbers locale keyword.
- */
-
-class U_I18N_API NumberingSystem : public UObject {
-public:
-
-    /**
-     * Default Constructor.
-     *
-     * @stable ICU 4.2
-     */
-    NumberingSystem();
-
-    /**
-     * Copy constructor.
-     * @stable ICU 4.2
-     */
-    NumberingSystem(const NumberingSystem& other);
-
-    /**
-     * Destructor.
-     * @stable ICU 4.2
-     */
-    virtual ~NumberingSystem();
-
-    /**
-     * Create the default numbering system associated with the specified locale.
-     * @param inLocale The given locale.
-     * @param status ICU status
-     * @stable ICU 4.2
-     */
-    static NumberingSystem* U_EXPORT2 createInstance(const Locale & inLocale, UErrorCode& status);
-
-    /**
-     * Create the default numbering system associated with the default locale.
-     * @stable ICU 4.2
-     */
-    static NumberingSystem* U_EXPORT2 createInstance(UErrorCode& status);
-
-    /**
-     * Create a numbering system using the specified radix, type, and description. 
-     * @param radix         The radix (base) for this numbering system.
-     * @param isAlgorithmic TRUE if the numbering system is algorithmic rather than numeric.
-     * @param description   The string representing the set of digits used in a numeric system, or the name of the RBNF
-     *                      ruleset to be used in an algorithmic system.
-     * @param status ICU status
-     * @stable ICU 4.2
-     */
-    static NumberingSystem* U_EXPORT2 createInstance(int32_t radix, UBool isAlgorithmic, const UnicodeString& description, UErrorCode& status );
-
-    /**
-     * Return a StringEnumeration over all the names of numbering systems known to ICU.
-     * @stable ICU 4.2
-     */
-
-     static StringEnumeration * U_EXPORT2 getAvailableNames(UErrorCode& status);
-
-    /**
-     * Create a numbering system from one of the predefined numbering systems known to ICU.
-     * @param name   The name of the numbering system.
-     * @param status ICU status
-     * @stable ICU 4.2
-     */
-    static NumberingSystem* U_EXPORT2 createInstanceByName(const char* name, UErrorCode& status);
-
-
-    /**
-     * Returns the radix of this numbering system.
-     * @stable ICU 4.2
-     */
-    int32_t getRadix();
-
-    /**
-     * Returns the name of this numbering system if it was created using one of the predefined names
-     * known to ICU.  Otherwise, returns NULL.
-     * @draft ICU 4.6
-     */
-    const char * getName();
-
-    /**
-     * Returns the description string of this numbering system, which is either
-     * the string of digits in the case of simple systems, or the ruleset name
-     * in the case of algorithmic systems.
-     * @stable ICU 4.2
-     */
-    virtual UnicodeString getDescription();
-
-
-
-    /**
-     * Returns TRUE if the given numbering system is algorithmic
-     *
-     * @return         TRUE if the numbering system is algorithmic.
-     *                 Otherwise, return FALSE.
-     * @stable ICU 4.2
-     */
-    UBool isAlgorithmic() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 4.2
-     *
-    */
-    static UClassID U_EXPORT2 getStaticClassID(void);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 4.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-
-private:
-    UnicodeString   desc;
-    int32_t         radix;
-    UBool           algorithmic;
-    char            name[NUMSYS_NAME_CAPACITY+1];
-
-    void setRadix(int32_t radix);
-
-    void setAlgorithmic(UBool algorithmic);
-
-    void setDesc(UnicodeString desc);
-
-    void setName(const char* name);
-
-    static UBool isValidDigitString(const UnicodeString &str);
-
-    UBool hasContiguousDecimalDigits() const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _NUMSYS
-//eof
diff --git a/source/i18n/unicode/plurfmt.h b/source/i18n/unicode/plurfmt.h
deleted file mode 100644
index 35a6172..0000000
--- a/source/i18n/unicode/plurfmt.h
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-
-* File PLURFMT.H
-*
-* Modification History:*
-*   Date        Name        Description
-*
-********************************************************************************
-*/
-
-#ifndef PLURFMT
-#define PLURFMT
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: PluralFormat object
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/numfmt.h"
-#include "unicode/plurrule.h"
-
-U_NAMESPACE_BEGIN
-
-class Hashtable;
-
-/**
- * <p>
- * <code>PluralFormat</code> supports the creation of internationalized
- * messages with plural inflection. It is based on <i>plural
- * selection</i>, i.e. the caller specifies messages for each
- * plural case that can appear in the users language and the
- * <code>PluralFormat</code> selects the appropriate message based on
- * the number.
- * </p>
- * <h4>The Problem of Plural Forms in Internationalized Messages</h4>
- * <p>
- * Different languages have different ways to inflect
- * plurals. Creating internationalized messages that include plural
- * forms is only feasible when the framework is able to handle plural
- * forms of <i>all</i> languages correctly. <code>ChoiceFormat</code>
- * doesn't handle this well, because it attaches a number interval to
- * each message and selects the message whose interval contains a
- * given number. This can only handle a finite number of
- * intervals. But in some languages, like Polish, one plural case
- * applies to infinitely many intervals (e.g., paucal applies to
- * numbers ending with 2, 3, or 4 except those ending with 12, 13, or
- * 14). Thus <code>ChoiceFormat</code> is not adequate.
- * </p><p>
- * <code>PluralFormat</code> deals with this by breaking the problem
- * into two parts:
- * <ul>
- * <li>It uses <code>PluralRules</code> that can define more complex
- *     conditions for a plural case than just a single interval. These plural
- *     rules define both what plural cases exist in a language, and to
- *     which numbers these cases apply.
- * <li>It provides predefined plural rules for many locales. Thus, the programmer
- *     need not worry about the plural cases of a language. On the flip side,
- *     the localizer does not have to specify the plural cases; he can simply
- *     use the predefined keywords. The whole plural formatting of messages can
- *     be done using localized patterns from resource bundles. For predefined plural
- *     rules, see CLDR <i>Language Plural Rules</i> page at 
- *    http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
- * </ul>
- * </p>
- * <h4>Usage of <code>PluralFormat</code></h4>
- * <p>
- * This discussion assumes that you use <code>PluralFormat</code> with
- * a predefined set of plural rules. You can create one using one of
- * the constructors that takes a <code>locale</code> object. To
- * specify the message pattern, you can either pass it to the
- * constructor or set it explicitly using the
- * <code>applyPattern()</code> method. The <code>format()</code>
- * method takes a number object and selects the message of the
- * matching plural case. This message will be returned.
- * </p>
- * <h5>Patterns and Their Interpretation</h5>
- * <p>
- * The pattern text defines the message output for each plural case of the
- * used locale. The pattern is a sequence of
- * <code><i>caseKeyword</i>{<i>message</i>}</code> clauses, separated by white
- * space characters. Each clause assigns the message <code><i>message</i></code>
- * to the plural case identified by <code><i>caseKeyword</i></code>.
- * </p><p>
- * There are 6 predefined casekeyword in ICU - 'zero', 'one', 'two', 'few', 'many' and
- * 'other'. You always have to define a message text for the default plural case
- * "<code>other</code>" which is contained in every rule set. If the plural
- * rules of the <code>PluralFormat</code> object do not contain a plural case
- * identified by <code><i>caseKeyword</i></code>, U_DEFAULT_KEYWORD_MISSING
- * will be set to status.
- * If you do not specify a message text for a particular plural case, the
- * message text of the plural case "<code>other</code>" gets assigned to this
- * plural case. If you specify more than one message for the same plural case,
- * U_DUPLICATE_KEYWORD will be set to status.
- * <br>
- * Spaces between <code><i>caseKeyword</i></code> and
- * <code><i>message</i></code>  will be ignored; spaces within
- * <code><i>message</i></code> will be preserved.
- * </p><p>
- * The message text for a particular plural case may contain other message
- * format patterns. <code>PluralFormat</code> preserves these so that you
- * can use the strings produced by <code>PluralFormat</code> with other
- * formatters. If you are using <code>PluralFormat</code> inside a
- * <code>MessageFormat</code> pattern, <code>MessageFormat</code> will
- * automatically evaluate the resulting format pattern.<br>
- * Thus, curly braces (<code>{</code>, <code>}</code>) are <i>only</i> allowed
- * in message texts to define a nested format pattern.<br>
- * The pound sign (<code>#</code>) will be interpreted as the number placeholder
- * in the message text, if it is not contained in curly braces (to preserve
- * <code>NumberFormat</code> patterns). <code>PluralFormat</code> will
- * replace each of those pound signs by the number passed to the
- * <code>format()</code> method. It will be formatted using a
- * <code>NumberFormat</code> for the <code>PluralFormat</code>'s locale. If you
- * need special number formatting, you have to explicitly specify a
- * <code>NumberFormat</code> for the <code>PluralFormat</code> to use.
- * </p>
- * Example
- * <pre>
- * \code
- * UErrorCode status = U_ZERO_ERROR;
- * MessageFormat* msgFmt = new MessageFormat(UnicodeString("{0, plural,
- *   one{{0, number, C''est #,##0.0#  fichier}} other {Ce sont # fichiers}} dans la liste."),
- *   Locale("fr"), status);
- * if (U_FAILURE(status)) {
- *     return;
- * }
- * Formattable args1[] = {(int32_t)0};
- * Formattable args2[] = {(int32_t)3};
- * FieldPosition ignore(FieldPosition::DONT_CARE);
- * UnicodeString result;
- * msgFmt->format(args1, 1, result, ignore, status);
- * cout << result << endl;
- * result.remove();
- * msgFmt->format(args2, 1, result, ignore, status);
- * cout << result << endl;
- * \endcode
- * </pre>
- * Produces the output:<br>
- * <code>C'est 0,0 fichier dans la liste.</code><br>
- * <code>Ce sont 3 fichiers dans la liste.</code>
- * <p>
- * <strong>Note:</strong><br>
- *   Currently <code>PluralFormat</code>
- *   does not make use of quotes like <code>MessageFormat</code>.
- *   If you use plural format strings with <code>MessageFormat</code> and want
- *   to use a quote sign <code>'</code>, you have to write <code>''</code>.
- *   <code>MessageFormat</code> unquotes this pattern and  passes the unquoted
- *   pattern to <code>PluralFormat</code>. It's a bit trickier if you use
- *   nested formats that do quoting. In the example above, we wanted to insert
- *   <code>'</code> in the number format pattern. Since
- *   <code>NumberFormat</code> supports quotes, we had to insert
- *   <code>''</code>. But since <code>MessageFormat</code> unquotes the
- *   pattern before it gets passed to <code>PluralFormat</code>, we have to
- *   double these quotes, i.e. write <code>''''</code>.
- * </p>
- * <h4>Defining Custom Plural Rules</h4>
- * <p>If you need to use <code>PluralFormat</code> with custom rules, you can
- * create a <code>PluralRules</code> object and pass it to
- * <code>PluralFormat</code>'s constructor. If you also specify a locale in this
- * constructor, this locale will be used to format the number in the message
- * texts.
- * </p><p>
- * For more information about <code>PluralRules</code>, see
- * {@link PluralRules}.
- * </p>
- *
- * ported from Java
- * @stable ICU 4.0
- */
-
-class U_I18N_API PluralFormat : public Format {
-public:
-
-    /**
-     * Creates a new <code>PluralFormat</code> for the default locale.
-     * This locale will be used to get the set of plural rules and for standard
-     * number formatting.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given locale.
-     * @param locale the <code>PluralFormat</code> will be configured with
-     *               rules for this locale. This locale will also be used for
-     *               standard number formatting.
-     * @param status output param set to success/failure code on exit, which
-     *               must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const Locale& locale, UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given set of rules.
-     * The standard number formatting will be done using the default locale.
-     * @param rules   defines the behavior of the <code>PluralFormat</code>
-     *                object.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const PluralRules& rules, UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given set of rules.
-     * The standard number formatting will be done using the given locale.
-     * @param locale  the default number formatting will be done using this
-     *                locale.
-     * @param rules   defines the behavior of the <code>PluralFormat</code>
-     *                object.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const Locale& locale, const PluralRules& rules, UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given pattern string.
-     * The default locale will be used to get the set of plural rules and for
-     * standard number formatting.
-     * @param  pattern the pattern for this <code>PluralFormat</code>.
-     *                 errors are returned to status if the pattern is invalid.
-     * @param status   output param set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const UnicodeString& pattern, UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given pattern string and
-     * locale.
-     * The locale will be used to get the set of plural rules and for
-     * standard number formatting.
-     * @param locale   the <code>PluralFormat</code> will be configured with
-     *                 rules for this locale. This locale will also be used for
-     *                 standard number formatting.
-     * @param pattern  the pattern for this <code>PluralFormat</code>.
-     *                 errors are returned to status if the pattern is invalid.
-     * @param status   output param set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const Locale& locale, const UnicodeString& pattern, UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given set of rules, a
-     * pattern and a locale.
-     * @param rules    defines the behavior of the <code>PluralFormat</code>
-     *                 object.
-     * @param pattern  the pattern for this <code>PluralFormat</code>.
-     *                 errors are returned to status if the pattern is invalid.
-     * @param status   output param set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const PluralRules& rules,
-                 const UnicodeString& pattern,
-                 UErrorCode& status);
-
-    /**
-     * Creates a new <code>PluralFormat</code> for a given set of rules, a
-     * pattern and a locale.
-     * @param locale  the <code>PluralFormat</code> will be configured with
-     *                rules for this locale. This locale will also be used for
-     *                standard number formatting.
-     * @param rules   defines the behavior of the <code>PluralFormat</code>
-     *                object.
-     * @param pattern the pattern for this <code>PluralFormat</code>.
-     *                errors are returned to status if the pattern is invalid.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    PluralFormat(const Locale& locale,
-                 const PluralRules& rules,
-                 const UnicodeString& pattern,
-                 UErrorCode& status);
-
-    /**
-      * copy constructor.
-      * @stable ICU 4.0
-      */
-    PluralFormat(const PluralFormat& other);
-
-    /**
-     * Destructor.
-     * @stable ICU 4.0
-     */
-    virtual ~PluralFormat();
-
-    /**
-     * Sets the pattern used by this plural format.
-     * The method parses the pattern and creates a map of format strings
-     * for the plural rules.
-     * Patterns and their interpretation are specified in the class description.
-     *
-     * @param pattern the pattern for this plural format
-     *                errors are returned to status if the pattern is invalid.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    void applyPattern(const UnicodeString& pattern, UErrorCode& status);
-
-
-    using Format::format;
-
-    /**
-     * Formats a plural message for a given number.
-     *
-     * @param number  a number for which the plural message should be formatted
-     *                for. If no pattern has been applied to this
-     *                <code>PluralFormat</code> object yet, the formatted number
-     *                will be returned.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @return        the string containing the formatted plural message.
-     * @stable ICU 4.0
-     */
-    UnicodeString format(int32_t number, UErrorCode& status) const;
-
-    /**
-     * Formats a plural message for a given number.
-     *
-     * @param number  a number for which the plural message should be formatted
-     *                for. If no pattern has been applied to this
-     *                PluralFormat object yet, the formatted number
-     *                will be returned.
-     * @param status  output param set to success or failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @return        the string containing the formatted plural message.
-     * @stable ICU 4.0
-     */
-    UnicodeString format(double number, UErrorCode& status) const;
-
-    /**
-     * Formats a plural message for a given number.
-     *
-     * @param number   a number for which the plural message should be formatted
-     *                 for. If no pattern has been applied to this
-     *                 <code>PluralFormat</code> object yet, the formatted number
-     *                 will be returned.
-     * @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 set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @return         the string containing the formatted plural message.
-     * @stable ICU 4.0
-     */
-    UnicodeString& format(int32_t number,
-                          UnicodeString& appendTo,
-                          FieldPosition& pos,
-                          UErrorCode& status) const;
-
-    /**
-     * Formats a plural message for a given number.
-     *
-     * @param number   a number for which the plural message should be formatted
-     *                 for. If no pattern has been applied to this
-     *                 PluralFormat object yet, the formatted number
-     *                 will be returned.
-     * @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 set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @return         the string containing the formatted plural message.
-     * @stable ICU 4.0
-     */
-    UnicodeString& format(double number,
-                          UnicodeString& appendTo,
-                          FieldPosition& pos,
-                          UErrorCode& status) const;
-
-    /**
-     * Sets the locale used by this <code>PluraFormat</code> object.
-     * Note: Calling this method resets this <code>PluraFormat</code> object,
-     *     i.e., a pattern that was applied previously will be removed,
-     *     and the NumberFormat is set to the default number format for
-     *     the locale.  The resulting format behaves the same as one
-     *     constructed from {@link #PluralFormat(const Locale& locale, UErrorCode& status)}.
-     * @param locale  the <code>locale</code> to use to configure the formatter.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.0
-     */
-    void setLocale(const Locale& locale, UErrorCode& status);
-
-    /**
-      * Sets the number format used by this formatter.  You only need to
-      * call this if you want a different number format than the default
-      * formatter for the locale.
-      * @param format  the number format to use.
-      * @param status  output param set to success/failure code on exit, which
-      *                must not indicate a failure before the function call.
-      * @stable ICU 4.0
-      */
-    void setNumberFormat(const NumberFormat* format, UErrorCode& status);
-
-    /**
-       * Assignment operator
-       *
-       * @param other    the PluralFormat object to copy from.
-       * @stable ICU 4.0
-       */
-    PluralFormat& operator=(const PluralFormat& other);
-
-    /**
-      * Return true if another object is semantically equal to this one.
-      *
-      * @param other    the PluralFormat object to be compared with.
-      * @return         true if other is semantically equal to this.
-      * @stable ICU 4.0
-      */
-    virtual UBool operator==(const Format& other) const;
-
-    /**
-     * Return true if another object is semantically unequal to this one.
-     *
-     * @param other    the PluralFormat object to be compared with.
-     * @return         true if other is semantically unequal to this.
-     * @stable ICU 4.0
-     */
-    virtual UBool operator!=(const Format& other) const;
-
-    /**
-     * Clones this Format object polymorphically.  The caller owns the
-     * result and should delete it when done.
-     * @stable ICU 4.0
-     */
-    virtual Format* clone(void) 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 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 4.0
-    */
-   UnicodeString& format(const Formattable& obj,
-                         UnicodeString& appendTo,
-                         FieldPosition& pos,
-                         UErrorCode& status) const;
-
-   /**
-    * Returns the pattern from applyPattern() or constructor().
-    *
-    * @param  appendTo  output parameter to receive result.
-     *                  Result is appended to existing contents.
-    * @return the UnicodeString with inserted pattern.
-    * @stable ICU 4.0
-    */
-   UnicodeString& toPattern(UnicodeString& appendTo);
-
-   /**
-    * This method is not yet supported by <code>PluralFormat</code>.
-    * <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.
-    * @stable ICU 4.0
-    */
-   virtual void parseObject(const UnicodeString& source,
-                            Formattable& result,
-                            ParsePosition& parse_pos) const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 4.0
-     *
-     */
-    static UClassID U_EXPORT2 getStaticClassID(void);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 4.0
-     */
-     virtual UClassID getDynamicClassID() const;
-
-private:
-    typedef enum fmtToken {
-        none,
-        tLetter,
-        tNumber,
-        tSpace,
-        tNumberSign,
-        tLeftBrace,
-        tRightBrace
-    }fmtToken;
-
-    Locale  locale;
-    PluralRules* pluralRules;
-    UnicodeString pattern;
-    Hashtable  *fParsedValuesHash;
-    NumberFormat*  numberFormat;
-    NumberFormat*  replacedNumberFormat;
-
-    PluralFormat();   // default constructor not implemented
-    void init(const PluralRules* rules, const Locale& curlocale, UErrorCode& status);
-    UBool inRange(UChar ch, fmtToken& type);
-    UBool checkSufficientDefinition();
-    void parsingFailure();
-    UnicodeString insertFormattedNumber(double number,
-                                        UnicodeString& message,
-                                        UnicodeString& appendTo,
-                                        FieldPosition& pos) const;
-    void copyHashtable(Hashtable *other, UErrorCode& status);
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _PLURFMT
-//eof
diff --git a/source/i18n/unicode/plurrule.h b/source/i18n/unicode/plurrule.h
deleted file mode 100644
index 7c05fec..0000000
--- a/source/i18n/unicode/plurrule.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2008-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-*
-* File PLURRULE.H
-*
-* Modification History:*
-*   Date        Name        Description
-*
-********************************************************************************
-*/
-
-#ifndef PLURRULE
-#define PLURRULE
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: PluralRules object
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/format.h"
-
-U_NAMESPACE_BEGIN
-
-class Hashtable;
-class RuleChain;
-class RuleParser;
-
-/**
- * Defines rules for mapping positive long values onto a small set of
- * keywords. Rules are constructed from a text description, consisting
- * of a series of keywords and conditions.  The {@link #select} method
- * examines each condition in order and returns the keyword for the
- * first condition that matches the number.  If none match,
- * default rule(other) is returned.
- *
- * Examples:<pre>
- *   "one: n is 1; few: n in 2..4"</pre>
- *  This defines two rules, for 'one' and 'few'.  The condition for
- *  'one' is "n is 1" which means that the number must be equal to
- *  1 for this condition to pass.  The condition for 'few' is
- *  "n in 2..4" which means that the number must be between 2 and
- *  4 inclusive for this condition to pass.  All other numbers
- *  are assigned the keyword "other" by the default rule.
- *  </p><pre>
- *    "zero: n is 0; one: n is 1; zero: n mod 100 in 1..19"</pre>
- *  This illustrates that the same keyword can be defined multiple times.
- *  Each rule is examined in order, and the first keyword whose condition
- *  passes is the one returned.  Also notes that a modulus is applied
- *  to n in the last rule.  Thus its condition holds for 119, 219, 319...
- *  </p><pre>
- *    "one: n is 1; few: n mod 10 in 2..4 and n mod 100 not in 12..14"</pre>
- *  This illustrates conjunction and negation.  The condition for 'few'
- *  has two parts, both of which must be met: "n mod 10 in 2..4" and
- *  "n mod 100 not in 12..14".  The first part applies a modulus to n
- *  before the test as in the previous example.  The second part applies
- *  a different modulus and also uses negation, thus it matches all
- *  numbers _not_ in 12, 13, 14, 112, 113, 114, 212, 213, 214...
- *  </p>
- *  <p>
- * Syntax:<pre>
- * \code
- * rules         = rule (';' rule)*
- * rule          = keyword ':' condition
- * keyword       = <identifier>
- * condition     = and_condition ('or' and_condition)*
- * and_condition = relation ('and' relation)*
- * relation      = is_relation | in_relation | within_relation | 'n' <EOL>
- * is_relation   = expr 'is' ('not')? value
- * in_relation   = expr ('not')? 'in' range
- * within_relation = expr ('not')? 'within' range
- * expr          = 'n' ('mod' value)?
- * value         = digit+
- * digit         = 0|1|2|3|4|5|6|7|8|9
- * range         = value'..'value
- * \endcode
- * </pre></p>
- * <p>
- *  The difference between 'in' and 'within' is that 'in' only includes
- *  integers in the specified range, while 'within' includes all values.</p>
- *  <p>
- *  Keywords
- *  could be defined by users or from ICU locale data. There are 6
- *  predefined values in ICU - 'zero', 'one', 'two', 'few', 'many' and
- *  'other'. Callers need to check the value of keyword returned by
- *  {@link #select} method.
- *  </p>
- *
- * Examples:<pre>
- * UnicodeString keyword = pl->select(number);
- * if (keyword== UnicodeString("one") {
- *     ...
- * }
- * else if ( ... )
- * </pre>
- * <strong>Note:</strong><br>
- *  <p>
- *   ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
- *   For these predefined rules, see CLDR page at 
- *    http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
- * </p>
- */
-class U_I18N_API PluralRules : public UObject {
-public:
-
-    /**
-     * Constructor.
-     * @param status  Output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     *
-     * @stable ICU 4.0
-     */
-    PluralRules(UErrorCode& status);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 4.0
-     */
-    PluralRules(const PluralRules& other);
-
-    /**
-     * Destructor.
-     * @stable ICU 4.0
-     */
-    virtual ~PluralRules();
-
-    /**
-     * Clone
-     * @stable ICU 4.0
-     */
-    PluralRules* clone() const;
-
-    /**
-      * Assignment operator.
-      * @stable ICU 4.0
-      */
-    PluralRules& operator=(const PluralRules&);
-
-    /**
-     * Creates a PluralRules from a description if it is parsable, otherwise
-     * returns null.
-     *
-     * @param description rule description
-     * @param status      Output param set to success/failure code on exit, which
-     *                    must not indicate a failure before the function call.
-     * @return            new PluralRules pointer. NULL if there is an error.
-     * @stable ICU 4.0
-     */
-    static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
-                                              UErrorCode& status);
-
-    /**
-     * The default rules that accept any number.
-     *
-     * @param status  Output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @return        new PluralRules pointer. NULL if there is an error.
-     * @stable ICU 4.0
-     */
-    static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
-
-    /**
-     * Provides access to the predefined <code>PluralRules</code> for a given
-     * locale.
-     *
-     * @param locale  The locale for which a <code>PluralRules</code> object is
-     *                returned.
-     * @param status  Output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @return        The predefined <code>PluralRules</code> object pointer for
-     *                this locale. If there's no predefined rules for this locale,
-     *                the rules for the closest parent in the locale hierarchy
-     *                that has one will  be returned.  The final fallback always
-     *                returns the default 'other' rules.
-     * @stable ICU 4.0
-     */
-    static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
-    
-    /**
-     * Given a number, returns the keyword of the first rule that applies to
-     * the number.  This function can be used with isKeyword* functions to
-     * determine the keyword for default plural rules.
-     *
-     * @param number  The number for which the rule has to be determined.
-     * @return        The keyword of the selected rule.
-     * @stable ICU 4.0
-     */
-    UnicodeString select(int32_t number) const;
-    
-    /**
-     * Given a number, returns the keyword of the first rule that applies to
-     * the number.  This function can be used with isKeyword* functions to
-     * determine the keyword for default plural rules.
-     *
-     * @param number  The number for which the rule has to be determined.
-     * @return        The keyword of the selected rule.
-     * @stable ICU 4.0
-     */
-    UnicodeString select(double number) const;
-
-    /**
-     * Returns a list of all rule keywords used in this <code>PluralRules</code>
-     * object.  The rule 'other' is always present by default.
-     *
-     * @param status Output param set to success/failure code on exit, which
-     *               must not indicate a failure before the function call.
-     * @return       StringEnumeration with the keywords.
-     *               The caller must delete the object.
-     * @stable ICU 4.0
-     */
-    StringEnumeration* getKeywords(UErrorCode& status) const;
-
-    /**
-     * Returns TRUE if the given keyword is defined in this
-     * <code>PluralRules</code> object.
-     *
-     * @param keyword  the input keyword.
-     * @return         TRUE if the input keyword is defined.
-     *                 Otherwise, return FALSE.
-     * @stable ICU 4.0
-     */
-    UBool isKeyword(const UnicodeString& keyword) const;
-
-
-    /**
-     * Returns keyword for default plural form.
-     *
-     * @return         keyword for default plural form.
-     * @internal 4.0
-     * @stable ICU 4.0
-     */
-    UnicodeString getKeywordOther() const;
-
-    /**
-     * Compares the equality of two PluralRules objects.
-     *
-     * @param other The other PluralRules object to be compared with.
-     * @return      True if the given PluralRules is the same as this
-     *              PluralRules; false otherwise.
-     * @stable ICU 4.0
-     */
-    virtual UBool operator==(const PluralRules& other) const;
-
-    /**
-     * Compares the inequality of two PluralRules objects.
-     *
-     * @param other The PluralRules object to be compared with.
-     * @return      True if the given PluralRules is not the same as this
-     *              PluralRules; false otherwise.
-     * @stable ICU 4.0
-     */
-    UBool operator!=(const PluralRules& other) const  {return !operator==(other);}
-
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 4.0
-     *
-    */
-    static UClassID U_EXPORT2 getStaticClassID(void);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 4.0
-     */
-    virtual UClassID getDynamicClassID() const;
-
-
-private:
-    Hashtable       *fLocaleStringsHash;
-    UnicodeString   mLocaleName;
-    RuleChain       *mRules;
-    RuleParser      *mParser;
-
-    PluralRules();   // default constructor not implemented
-    int32_t getRepeatLimit() const;
-    void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status);
-    void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName);
-    void addRules(RuleChain& rules);
-    int32_t getNumberValue(const UnicodeString& token) const;
-    UnicodeString getRuleFromResource(const Locale& locale, UErrorCode& status);
-
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _PLURRULE
-//eof
diff --git a/source/i18n/unicode/rbnf.h b/source/i18n/unicode/rbnf.h
deleted file mode 100644
index 59835d3..0000000
--- a/source/i18n/unicode/rbnf.h
+++ /dev/null
@@ -1,1059 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 1997-2010, 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_NUMBERING_SYSTEM,
-    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 four 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"),
-   * URBNF_DURATION, which formats a duration in seconds as hours, minutes, and seconds,
-   * and URBNF_NUMBERING_SYSTEM, which is used to invoke rules for alternate numbering
-   * systems such as the Hebrew numbering system, or for Roman Numerals, etc.
-   * @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());
-
-
-  using NumberFormat::format;
-
-  /**
-   * 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;
-
-    // Temporary workaround - when noParse is true, do noting in parse.
-    // TODO: We need a real fix - see #6895/#6896
-    UBool noParse;
-};
-
-// ---------------
-
-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
diff --git a/source/i18n/unicode/rbtz.h b/source/i18n/unicode/rbtz.h
deleted file mode 100644
index 2be2967..0000000
--- a/source/i18n/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 3.8
-     */
-    RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
-
-    /**
-     * Copy constructor.
-     * @param source    The RuleBasedTimeZone object to be copied.
-     * @stable ICU 3.8
-     */
-    RuleBasedTimeZone(const RuleBasedTimeZone& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~RuleBasedTimeZone();
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // RBTZ_H
-
-//eof
diff --git a/source/i18n/unicode/regex.h b/source/i18n/unicode/regex.h
deleted file mode 100644
index d8d7bc0..0000000
--- a/source/i18n/unicode/regex.h
+++ /dev/null
@@ -1,1772 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2002-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   file name:  regex.h
-*   encoding:   US-ASCII
-*   indentation:4
-*
-*   created on: 2002oct22
-*   created by: Andy Heninger
-*
-*   ICU Regular Expressions, API for C++
-*/
-
-#ifndef REGEX_H
-#define REGEX_H
-
-//#define REGEX_DEBUG
-
-/**
- * \file
- * \brief  C++ API:  Regular Expressions
- *
- * <h2>Regular Expression API</h2>
- *
- * <p>The ICU API for processing regular expressions consists of two classes,
- *  <code>RegexPattern</code> and <code>RegexMatcher</code>.
- *  <code>RegexPattern</code> objects represent a pre-processed, or compiled
- *  regular expression.  They are created from a regular expression pattern string,
- *  and can be used to create <code>RegexMatcher</code> objects for the pattern.</p>
- *
- * <p>Class <code>RegexMatcher</code> bundles together a regular expression
- *  pattern and a target string to which the search pattern will be applied.
- *  <code>RegexMatcher</code> includes API for doing plain find or search
- *  operations, for search and replace operations, and for obtaining detailed
- *  information about bounds of a match. </p>
- *
- * <p>Note that by constructing <code>RegexMatcher</code> objects directly from regular
- * expression pattern strings application code can be simplified and the explicit
- * need for <code>RegexPattern</code> objects can usually be eliminated.
- * </p>
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_REGULAR_EXPRESSIONS
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/utext.h"
-#include "unicode/parseerr.h"
-
-#include "unicode/uregex.h"
-
-U_NAMESPACE_BEGIN
-
-
-// Forward Declarations...
-
-class RegexMatcher;
-class RegexPattern;
-class UVector;
-class UVector32;
-class UVector64;
-class UnicodeSet;
-struct REStackFrame;
-struct Regex8BitSet;
-class  RuleBasedBreakIterator;
-class  RegexCImpl;
-
-
-
-
-/**
- *   RBBIPatternDump   Debug function, displays the compiled form of a pattern.
- *   @internal
- */
-#ifdef REGEX_DEBUG
-U_INTERNAL void U_EXPORT2
-    RegexPatternDump(const RegexPattern *pat);
-#else
-    #undef RegexPatternDump
-    #define RegexPatternDump(pat)
-#endif
-
-
-
-/**
-  * Class <code>RegexPattern</code> represents a compiled regular expression.  It includes
-  * factory methods for creating a RegexPattern object from the source (string) form
-  * of a regular expression, methods for creating RegexMatchers that allow the pattern
-  * to be applied to input text, and a few convenience methods for simple common
-  * uses of regular expressions.
-  *
-  * <p>Class RegexPattern is not intended to be subclassed.</p>
-  *
-  * @stable ICU 2.4
-  */
-class U_I18N_API RegexPattern: public UObject {
-public:
-
-    /**
-     * default constructor.  Create a RegexPattern object that refers to no actual
-     *   pattern.  Not normally needed; RegexPattern objects are usually
-     *   created using the factory method <code>compile()</code>.
-     *
-     * @stable ICU 2.4
-     */
-    RegexPattern();
-
-    /**
-     * Copy Constructor.  Create a new RegexPattern object that is equivalent
-     *                    to the source object.
-     * @param source the pattern object to be copied.
-     * @stable ICU 2.4
-     */
-    RegexPattern(const RegexPattern &source);
-
-    /**
-     * Destructor.  Note that a RegexPattern object must persist so long as any
-     *  RegexMatcher objects that were created from the RegexPattern are active.
-     * @stable ICU 2.4
-     */
-    virtual ~RegexPattern();
-
-    /**
-     * Comparison operator.  Two RegexPattern objects are considered equal if they
-     * were constructed from identical source patterns using the same match flag
-     * settings.
-     * @param that a RegexPattern object to compare with "this".
-     * @return TRUE if the objects are equivalent.
-     * @stable ICU 2.4
-     */
-    UBool           operator==(const RegexPattern& that) const;
-
-    /**
-     * Comparison operator.  Two RegexPattern objects are considered equal if they
-     * were constructed from identical source patterns using the same match flag
-     * settings.
-     * @param that a RegexPattern object to compare with "this".
-     * @return TRUE if the objects are different.
-     * @stable ICU 2.4
-     */
-    inline UBool    operator!=(const RegexPattern& that) const {return ! operator ==(that);};
-
-    /**
-     * Assignment operator.  After assignment, this RegexPattern will behave identically
-     *     to the source object.
-     * @stable ICU 2.4
-     */
-    RegexPattern  &operator =(const RegexPattern &source);
-
-    /**
-     * Create an exact copy of this RegexPattern object.  Since RegexPattern is not
-     * intended to be subclasses, <code>clone()</code> and the copy construction are
-     * equivalent operations.
-     * @return the copy of this RegexPattern
-     * @stable ICU 2.4
-     */
-    virtual RegexPattern  *clone() const;
-
-
-   /**
-    * Compiles the regular expression in string form into a RegexPattern
-    * object.  These compile methods, rather than the constructors, are the usual
-    * way that RegexPattern objects are created.
-    *
-    * <p>Note that RegexPattern objects must not be deleted while RegexMatcher
-    * objects created from the pattern are active.  RegexMatchers keep a pointer
-    * back to their pattern, so premature deletion of the pattern is a
-    * catastrophic error.</p>
-    *
-    * <p>All pattern match mode flags are set to their default values.</p>
-    *
-    * <p>Note that it is often more convenient to construct a RegexMatcher directly
-    *    from a pattern string rather than separately compiling the pattern and
-    *    then creating a RegexMatcher object from the pattern.</p>
-    *
-    * @param regex The regular expression to be compiled.
-    * @param pe    Receives the position (line and column nubers) of any error
-    *              within the regular expression.)
-    * @param status A reference to a UErrorCode to receive any errors.
-    * @return      A regexPattern object for the compiled pattern.
-    *
-    * @stable ICU 2.4
-    */
-    static RegexPattern * U_EXPORT2 compile( const UnicodeString &regex,
-        UParseError          &pe,
-        UErrorCode           &status);
-
-
-   /**
-    * Compiles the regular expression in string form into a RegexPattern
-    * object.  These compile methods, rather than the constructors, are the usual
-    * way that RegexPattern objects are created.
-    *
-    * <p>Note that RegexPattern objects must not be deleted while RegexMatcher
-    * objects created from the pattern are active.  RegexMatchers keep a pointer
-    * back to their pattern, so premature deletion of the pattern is a
-    * catastrophic error.</p>
-    *
-    * <p>All pattern match mode flags are set to their default values.</p>
-    *
-    * <p>Note that it is often more convenient to construct a RegexMatcher directly
-    *    from a pattern string rather than separately compiling the pattern and
-    *    then creating a RegexMatcher object from the pattern.</p>
-    *
-    * @param regex The regular expression to be compiled. Note, the text referred
-    *              to by this UText must not be deleted during the lifetime of the
-    *              RegexPattern object or any RegexMatcher object created from it.
-    * @param pe    Receives the position (line and column nubers) of any error
-    *              within the regular expression.)
-    * @param status A reference to a UErrorCode to receive any errors.
-    * @return      A regexPattern object for the compiled pattern.
-    *
-    * @draft ICU 4.6
-    */
-    static RegexPattern * U_EXPORT2 compile( UText *regex,
-        UParseError          &pe,
-        UErrorCode           &status);
-
-   /**
-    * Compiles the regular expression in string form into a RegexPattern
-    * object using the specified match mode flags.  These compile methods,
-    * rather than the constructors, are the usual way that RegexPattern objects
-    * are created.
-    *
-    * <p>Note that RegexPattern objects must not be deleted while RegexMatcher
-    * objects created from the pattern are active.  RegexMatchers keep a pointer
-    * back to their pattern, so premature deletion of the pattern is a
-    * catastrophic error.</p>
-    *
-    * <p>Note that it is often more convenient to construct a RegexMatcher directly
-    *    from a pattern string instead of than separately compiling the pattern and
-    *    then creating a RegexMatcher object from the pattern.</p>
-    *
-    * @param regex The regular expression to be compiled.
-    * @param flags The match mode flags to be used.
-    * @param pe    Receives the position (line and column numbers) of any error
-    *              within the regular expression.)
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return      A regexPattern object for the compiled pattern.
-    *
-    * @stable ICU 2.4
-    */
-    static RegexPattern * U_EXPORT2 compile( const UnicodeString &regex,
-        uint32_t             flags,
-        UParseError          &pe,
-        UErrorCode           &status);
-        
-        
-   /**
-    * Compiles the regular expression in string form into a RegexPattern
-    * object using the specified match mode flags.  These compile methods,
-    * rather than the constructors, are the usual way that RegexPattern objects
-    * are created.
-    *
-    * <p>Note that RegexPattern objects must not be deleted while RegexMatcher
-    * objects created from the pattern are active.  RegexMatchers keep a pointer
-    * back to their pattern, so premature deletion of the pattern is a
-    * catastrophic error.</p>
-    *
-    * <p>Note that it is often more convenient to construct a RegexMatcher directly
-    *    from a pattern string instead of than separately compiling the pattern and
-    *    then creating a RegexMatcher object from the pattern.</p>
-    *
-    * @param regex The regular expression to be compiled. Note, the text referred
-    *              to by this UText must not be deleted during the lifetime of the
-    *              RegexPattern object or any RegexMatcher object created from it.
-    * @param flags The match mode flags to be used.
-    * @param pe    Receives the position (line and column numbers) of any error
-    *              within the regular expression.)
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return      A regexPattern object for the compiled pattern.
-    *
-    * @draft ICU 4.6
-    */
-    static RegexPattern * U_EXPORT2 compile( UText *regex,
-        uint32_t             flags,
-        UParseError          &pe,
-        UErrorCode           &status);
-    
-
-   /**
-    * Compiles the regular expression in string form into a RegexPattern
-    * object using the specified match mode flags.  These compile methods,
-    * rather than the constructors, are the usual way that RegexPattern objects
-    * are created.
-    *
-    * <p>Note that RegexPattern objects must not be deleted while RegexMatcher
-    * objects created from the pattern are active.  RegexMatchers keep a pointer
-    * back to their pattern, so premature deletion of the pattern is a
-    * catastrophic error.</p>
-    *
-    * <p>Note that it is often more convenient to construct a RegexMatcher directly
-    *    from a pattern string instead of than separately compiling the pattern and
-    *    then creating a RegexMatcher object from the pattern.</p>
-    *
-    * @param regex The regular expression to be compiled.
-    * @param flags The match mode flags to be used.
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return      A regexPattern object for the compiled pattern.
-    *
-    * @stable ICU 2.6
-    */
-    static RegexPattern * U_EXPORT2 compile( const UnicodeString &regex,
-        uint32_t             flags,
-        UErrorCode           &status);
-
-
-   /**
-    * Compiles the regular expression in string form into a RegexPattern
-    * object using the specified match mode flags.  These compile methods,
-    * rather than the constructors, are the usual way that RegexPattern objects
-    * are created.
-    *
-    * <p>Note that RegexPattern objects must not be deleted while RegexMatcher
-    * objects created from the pattern are active.  RegexMatchers keep a pointer
-    * back to their pattern, so premature deletion of the pattern is a
-    * catastrophic error.</p>
-    *
-    * <p>Note that it is often more convenient to construct a RegexMatcher directly
-    *    from a pattern string instead of than separately compiling the pattern and
-    *    then creating a RegexMatcher object from the pattern.</p>
-    *
-    * @param regex The regular expression to be compiled. Note, the text referred
-    *              to by this UText must not be deleted during the lifetime of the
-    *              RegexPattern object or any RegexMatcher object created from it.
-    * @param flags The match mode flags to be used.
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return      A regexPattern object for the compiled pattern.
-    *
-    * @draft ICU 4.6
-    */
-    static RegexPattern * U_EXPORT2 compile( UText *regex,
-        uint32_t             flags,
-        UErrorCode           &status);
-    
-
-   /**
-    * Get the match mode flags that were used when compiling this pattern.
-    * @return  the match mode flags
-    * @stable ICU 2.4
-    */
-    virtual uint32_t flags() const;
-
-   /**
-    * Creates a RegexMatcher that will match the given input against this pattern.  The
-    * RegexMatcher can then be used to perform match, find or replace operations
-    * on the input.  Note that a RegexPattern object must not be deleted while
-    * RegexMatchers created from it still exist and might possibly be used again.
-    * <p>
-    * The matcher will retain a reference to the supplied input string, and all regexp
-    * pattern matching operations happen directly on this original string.  It is
-    * critical that the string not be altered or deleted before use by the regular
-    * expression operations is complete.
-    *
-    * @param input    The input string to which the regular expression will be applied.
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return         A RegexMatcher object for this pattern and input.
-    *
-    * @stable ICU 2.4
-    */
-    virtual RegexMatcher *matcher(const UnicodeString &input,
-        UErrorCode          &status) const;
-        
-        
-   /**
-    * Flag to disambiguate RegexPattern::matcher signature
-    * @draft ICU 4.6
-    */
-    enum PatternIsUTextFlag { PATTERN_IS_UTEXT };
-
-   /**
-    * Creates a RegexMatcher that will match the given input against this pattern.  The
-    * RegexMatcher can then be used to perform match, find or replace operations
-    * on the input.  Note that a RegexPattern object must not be deleted while
-    * RegexMatchers created from it still exist and might possibly be used again.
-    * <p>
-    * The matcher will make a shallow clone of the supplied input text, and all regexp
-    * pattern matching operations happen on this clone.  While read-only operations on
-    * the supplied text are permitted, it is critical that the underlying string not be
-    * altered or deleted before use by the regular expression operations is complete.
-    *
-    * @param input    The input text to which the regular expression will be applied.
-    * @param flag     Must be RegexPattern::PATTERN_IS_UTEXT; used to disambiguate
-    *                 method signature.
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return         A RegexMatcher object for this pattern and input.
-    *
-    * @draft ICU 4.6
-    */
-    virtual RegexMatcher *matcher(UText *input,
-        PatternIsUTextFlag	flag, 
-        UErrorCode          &status) const;
-
-private:
-    /**
-     * Cause a compilation error if an application accidently attempts to
-     *   create a matcher with a (UChar *) string as input rather than
-     *   a UnicodeString.  Avoids a dangling reference to a temporary string.
-     * <p>
-     * To efficiently work with UChar *strings, wrap the data in a UnicodeString
-     * using one of the aliasing constructors, such as
-     * <code>UnicodeString(UBool isTerminated, const UChar *text, int32_t textLength);</code>
-     * or in a UText, using
-     * <code>utext_openUChars(UText *ut, const UChar *text, int64_t textLength, UErrorCode *status);</code>
-     *
-     * @internal
-     */
-    RegexMatcher *matcher(const UChar *input,
-        UErrorCode          &status) const;
-public:
-
-
-   /**
-    * Creates a RegexMatcher that will match against this pattern.  The
-    * RegexMatcher can be used to perform match, find or replace operations.
-    * Note that a RegexPattern object must not be deleted while
-    * RegexMatchers created from it still exist and might possibly be used again.
-    *
-    * @param status   A reference to a UErrorCode to receive any errors.
-    * @return      A RegexMatcher object for this pattern and input.
-    *
-    * @stable ICU 2.6
-    */
-    virtual RegexMatcher *matcher(UErrorCode  &status) const;
-
-
-   /**
-    * Test whether a string matches a regular expression.  This convenience function
-    * both compiles the reguluar expression and applies it in a single operation.
-    * Note that if the same pattern needs to be applied repeatedly, this method will be
-    * less efficient than creating and reusing a RegexMatcher object.
-    *
-    * @param regex The regular expression
-    * @param input The string data to be matched
-    * @param pe Receives the position of any syntax errors within the regular expression
-    * @param status A reference to a UErrorCode to receive any errors.
-    * @return True if the regular expression exactly matches the full input string.
-    *
-    * @stable ICU 2.4
-    */
-    static UBool U_EXPORT2 matches(const UnicodeString   &regex,
-        const UnicodeString   &input,
-              UParseError     &pe,
-              UErrorCode      &status);
-
-
-   /**
-    * Test whether a string matches a regular expression.  This convenience function
-    * both compiles the reguluar expression and applies it in a single operation.
-    * Note that if the same pattern needs to be applied repeatedly, this method will be
-    * less efficient than creating and reusing a RegexMatcher object.
-    *
-    * @param regex The regular expression
-    * @param input The string data to be matched
-    * @param pe Receives the position of any syntax errors within the regular expression
-    * @param status A reference to a UErrorCode to receive any errors.
-    * @return True if the regular expression exactly matches the full input string.
-    *
-    * @draft ICU 4.6
-    */
-    static UBool U_EXPORT2 matches(UText *regex,
-        UText           *input,
-        UParseError     &pe,
-        UErrorCode      &status);
-
-
-   /**
-    * Returns the regular expression from which this pattern was compiled. This method will work
-    * even if the pattern was compiled from a UText.
-    *
-    * Note: If the pattern was originally compiled from a UText, and that UText was modified,
-    * the returned string may no longer reflect the RegexPattern object.
-    * @stable ICU 2.4
-    */
-    virtual UnicodeString pattern() const;
-    
-    
-   /**
-    * Returns the regular expression from which this pattern was compiled. This method will work
-    * even if the pattern was compiled from a UnicodeString.
-    *
-    * Note: This is the original input, not a clone. If the pattern was originally compiled from a
-    * UText, and that UText was modified, the returned UText may no longer reflect the RegexPattern
-    * object.
-    *
-    * @draft ICU 4.6
-    */
-    virtual UText *patternText(UErrorCode      &status) const;
-
-
-    /**
-     * Split a string into fields.  Somewhat like split() from Perl.
-     * The pattern matches identify delimiters that separate the input
-     *  into fields.  The input data between the matches becomes the
-     *  fields themselves.
-     * <p>
-     *  For the best performance on split() operations,
-     *  <code>RegexMatcher::split</code> is perferable to this function
-     *
-     * @param input   The string to be split into fields.  The field delimiters
-     *                match the pattern (in the "this" object)
-     * @param dest    An array of UnicodeStrings to receive the results of the split.
-     *                This is an array of actual UnicodeString objects, not an
-     *                array of pointers to strings.  Local (stack based) arrays can
-     *                work well here.
-     * @param destCapacity  The number of elements in the destination array.
-     *                If the number of fields found is less than destCapacity, the
-     *                extra strings in the destination array are not altered.
-     *                If the number of destination strings is less than the number
-     *                of fields, the trailing part of the input string, including any
-     *                field delimiters, is placed in the last destination string.
-     * @param status  A reference to a UErrorCode to receive any errors.
-     * @return        The number of fields into which the input string was split.
-     * @stable ICU 2.4
-     */
-    virtual int32_t  split(const UnicodeString &input,
-        UnicodeString    dest[],
-        int32_t          destCapacity,
-        UErrorCode       &status) const;
-
-
-    /**
-     * Split a string into fields.  Somewhat like split() from Perl.
-     * The pattern matches identify delimiters that separate the input
-     *  into fields.  The input data between the matches becomes the
-     *  fields themselves.
-     * <p>
-     *  For the best performance on split() operations,
-     *  <code>RegexMatcher::split</code> is perferable to this function
-     *
-     * @param input   The string to be split into fields.  The field delimiters
-     *                match the pattern (in the "this" object)
-     * @param dest    An array of mutable UText structs to receive the results of the split.
-     *                If a field is NULL, a new UText is allocated to contain the results for
-     *                that field. This new UText is not guaranteed to be mutable.
-     * @param destCapacity  The number of elements in the destination array.
-     *                If the number of fields found is less than destCapacity, the
-     *                extra strings in the destination array are not altered.
-     *                If the number of destination strings is less than the number
-     *                of fields, the trailing part of the input string, including any
-     *                field delimiters, is placed in the last destination string.
-     * @param status  A reference to a UErrorCode to receive any errors.
-     * @return        The number of fields into which the input string was split.
-     *
-     * @draft ICU 4.6
-     */
-    virtual int32_t  split(UText *input,
-        UText            *dest[],
-        int32_t          destCapacity,
-        UErrorCode       &status) const;
-
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.4
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.4
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-    //
-    //  Implementation Data
-    //
-    UText          *fPattern;      // The original pattern string.
-    UnicodeString  *fPatternString; // The original pattern UncodeString if relevant
-    uint32_t        fFlags;        // The flags used when compiling the pattern.
-                                   //
-    UVector64       *fCompiledPat; // The compiled pattern p-code.
-    UnicodeString   fLiteralText;  // Any literal string data from the pattern,
-                                   //   after un-escaping, for use during the match.
-
-    UVector         *fSets;        // Any UnicodeSets referenced from the pattern.
-    Regex8BitSet    *fSets8;       //      (and fast sets for latin-1 range.)
-
-
-    UErrorCode      fDeferredStatus; // status if some prior error has left this
-                                   //  RegexPattern in an unusable state.
-
-    int32_t         fMinMatchLen;  // Minimum Match Length.  All matches will have length
-                                   //   >= this value.  For some patterns, this calculated
-                                   //   value may be less than the true shortest
-                                   //   possible match.
-    
-    int32_t         fFrameSize;    // Size of a state stack frame in the
-                                   //   execution engine.
-
-    int32_t         fDataSize;     // The size of the data needed by the pattern that
-                                   //   does not go on the state stack, but has just
-                                   //   a single copy per matcher.
-
-    UVector32       *fGroupMap;    // Map from capture group number to position of
-                                   //   the group's variables in the matcher stack frame.
-
-    int32_t         fMaxCaptureDigits;
-
-    UnicodeSet     **fStaticSets;  // Ptr to static (shared) sets for predefined
-                                   //   regex character classes, e.g. Word.
-
-    Regex8BitSet   *fStaticSets8;  // Ptr to the static (shared) latin-1 only
-                                   //  sets for predefined regex classes.
-
-    int32_t         fStartType;    // Info on how a match must start.
-    int32_t         fInitialStringIdx;     //
-    int32_t         fInitialStringLen;
-    UnicodeSet     *fInitialChars;
-    UChar32         fInitialChar;
-    Regex8BitSet   *fInitialChars8;
-    UBool           fNeedsAltInput;
-
-    friend class RegexCompile;
-    friend class RegexMatcher;
-    friend class RegexCImpl;
-
-    //
-    //  Implementation Methods
-    //
-    void        init();            // Common initialization, for use by constructors.
-    void        zap();             // Common cleanup
-#ifdef REGEX_DEBUG
-    void        dumpOp(int32_t index) const;
-    friend     void U_EXPORT2 RegexPatternDump(const RegexPattern *);
-#endif
-
-};
-
-
-
-/**
- *  class RegexMatcher bundles together a reular expression pattern and
- *  input text to which the expression can be applied.  It includes methods
- *  for testing for matches, and for find and replace operations.
- *
- * <p>Class RegexMatcher is not intended to be subclassed.</p>
- *
- * @stable ICU 2.4
- */
-class U_I18N_API RegexMatcher: public UObject {
-public:
-
-    /**
-      * Construct a RegexMatcher for a regular expression.
-      * This is a convenience method that avoids the need to explicitly create
-      * a RegexPattern object.  Note that if several RegexMatchers need to be
-      * created for the same expression, it will be more efficient to
-      * separately create and cache a RegexPattern object, and use
-      * its matcher() method to create the RegexMatcher objects.
-      *
-      *  @param regexp The Regular Expression to be compiled.
-      *  @param flags  Regular expression options, such as case insensitive matching.
-      *                @see UREGEX_CASE_INSENSITIVE
-      *  @param status Any errors are reported by setting this UErrorCode variable.
-      *  @stable ICU 2.6
-      */
-    RegexMatcher(const UnicodeString &regexp, uint32_t flags, UErrorCode &status);
-
-    /**
-      * Construct a RegexMatcher for a regular expression.
-      * This is a convenience method that avoids the need to explicitly create
-      * a RegexPattern object.  Note that if several RegexMatchers need to be
-      * created for the same expression, it will be more efficient to
-      * separately create and cache a RegexPattern object, and use
-      * its matcher() method to create the RegexMatcher objects.
-      *
-      *  @param regexp The regular expression to be compiled.
-      *  @param flags  Regular expression options, such as case insensitive matching.
-      *                @see UREGEX_CASE_INSENSITIVE
-      *  @param status Any errors are reported by setting this UErrorCode variable.
-      *
-      *  @draft ICU 4.6
-      */
-    RegexMatcher(UText *regexp, uint32_t flags, UErrorCode &status);
-    
-    /**
-      * Construct a RegexMatcher for a regular expression.
-      * This is a convenience method that avoids the need to explicitly create
-      * a RegexPattern object.  Note that if several RegexMatchers need to be
-      * created for the same expression, it will be more efficient to
-      * separately create and cache a RegexPattern object, and use
-      * its matcher() method to create the RegexMatcher objects.
-      * <p>
-      * The matcher will retain a reference to the supplied input string, and all regexp
-      * pattern matching operations happen directly on the original string.  It is
-      * critical that the string not be altered or deleted before use by the regular
-      * expression operations is complete.
-      *
-      *  @param regexp The Regular Expression to be compiled.
-      *  @param input  The string to match.  The matcher retains a reference to the
-      *                caller's string; mo copy is made.
-      *  @param flags  Regular expression options, such as case insensitive matching.
-      *                @see UREGEX_CASE_INSENSITIVE
-      *  @param status Any errors are reported by setting this UErrorCode variable.
-      *  @stable ICU 2.6
-      */
-    RegexMatcher(const UnicodeString &regexp, const UnicodeString &input,
-        uint32_t flags, UErrorCode &status);
-
-    /**
-      * Construct a RegexMatcher for a regular expression.
-      * This is a convenience method that avoids the need to explicitly create
-      * a RegexPattern object.  Note that if several RegexMatchers need to be
-      * created for the same expression, it will be more efficient to
-      * separately create and cache a RegexPattern object, and use
-      * its matcher() method to create the RegexMatcher objects.
-      * <p>
-      * The matcher will make a shallow clone of the supplied input text, and all regexp
-      * pattern matching operations happen on this clone.  While read-only operations on
-      * the supplied text are permitted, it is critical that the underlying string not be
-      * altered or deleted before use by the regular expression operations is complete.
-      *
-      *  @param regexp The Regular Expression to be compiled.
-      *  @param input  The string to match.  The matcher retains a shallow clone of the text.
-      *  @param flags  Regular expression options, such as case insensitive matching.
-      *                @see UREGEX_CASE_INSENSITIVE
-      *  @param status Any errors are reported by setting this UErrorCode variable.
-      *
-      *  @draft ICU 4.6
-      */
-    RegexMatcher(UText *regexp, UText *input,
-        uint32_t flags, UErrorCode &status);
-
-private:
-    /**
-     * Cause a compilation error if an application accidently attempts to
-     *   create a matcher with a (UChar *) string as input rather than
-     *   a UnicodeString.    Avoids a dangling reference to a temporary string.
-     * <p>
-     * To efficiently work with UChar *strings, wrap the data in a UnicodeString
-     * using one of the aliasing constructors, such as
-     * <code>UnicodeString(UBool isTerminated, const UChar *text, int32_t textLength);</code>
-     * or in a UText, using
-     * <code>utext_openUChars(UText *ut, const UChar *text, int64_t textLength, UErrorCode *status);</code>
-     *
-     * @internal
-     */
-    RegexMatcher(const UnicodeString &regexp, const UChar *input,
-        uint32_t flags, UErrorCode &status);
-public:
-
-
-   /**
-    *   Destructor.
-    *
-    *  @stable ICU 2.4
-    */
-    virtual ~RegexMatcher();
-
-
-   /**
-    *   Attempts to match the entire input region against the pattern.
-    *    @param   status     A reference to a UErrorCode to receive any errors.
-    *    @return TRUE if there is a match
-    *    @stable ICU 2.4
-    */
-    virtual UBool matches(UErrorCode &status);
-
-
-   /**
-    *   Resets the matcher, then attempts to match the input beginning 
-    *   at the specified startIndex, and extending to the end of the input.
-    *   The input region is reset to include the entire input string.
-    *   A successful match must extend to the end of the input.
-    *    @param   startIndex The input string (native) index at which to begin matching.
-    *    @param   status     A reference to a UErrorCode to receive any errors.
-    *    @return TRUE if there is a match
-    *    @stable ICU 2.8
-    */
-    virtual UBool matches(int64_t startIndex, UErrorCode &status);
-
-
-   /**
-    *   Attempts to match the input string, starting from the beginning of the region,
-    *   against the pattern.  Like the matches() method, this function 
-    *   always starts at the beginning of the input region;
-    *   unlike that function, it does not require that the entire region be matched.
-    *
-    *   <p>If the match succeeds then more information can be obtained via the <code>start()</code>,
-    *     <code>end()</code>, and <code>group()</code> functions.</p>
-    *
-    *    @param   status     A reference to a UErrorCode to receive any errors.
-    *    @return  TRUE if there is a match at the start of the input string.
-    *    @stable ICU 2.4
-    */
-    virtual UBool lookingAt(UErrorCode &status);
-
-
-  /**
-    *   Attempts to match the input string, starting from the specified index, against the pattern.
-    *   The match may be of any length, and is not required to extend to the end
-    *   of the input string.  Contrast with match().
-    *
-    *   <p>If the match succeeds then more information can be obtained via the <code>start()</code>,
-    *     <code>end()</code>, and <code>group()</code> functions.</p>
-    *
-    *    @param   startIndex The input string (native) index at which to begin matching.
-    *    @param   status     A reference to a UErrorCode to receive any errors.
-    *    @return  TRUE if there is a match.
-    *    @stable ICU 2.8
-    */
-    virtual UBool lookingAt(int64_t startIndex, UErrorCode &status);
-
-
-   /**
-    *  Find the next pattern match in the input string.
-    *  The find begins searching the input at the location following the end of
-    *  the previous match, or at the start of the string if there is no previous match.
-    *  If a match is found, <code>start(), end()</code> and <code>group()</code>
-    *  will provide more information regarding the match.
-    *  <p>Note that if the input string is changed by the application,
-    *     use find(startPos, status) instead of find(), because the saved starting
-    *     position may not be valid with the altered input string.</p>
-    *  @return  TRUE if a match is found.
-    *  @stable ICU 2.4
-    */
-    virtual UBool find();
-
-
-   /**
-    *   Resets this RegexMatcher and then attempts to find the next substring of the
-    *   input string that matches the pattern, starting at the specified index.
-    *
-    *   @param   start     The (native) index in the input string to begin the search.
-    *   @param   status    A reference to a UErrorCode to receive any errors.
-    *   @return  TRUE if a match is found.
-    *   @stable ICU 2.4
-    */
-    virtual UBool find(int64_t start, UErrorCode &status);
-
-
-   /**
-    *   Returns a string containing the text matched by the previous match.
-    *   If the pattern can match an empty string, an empty string may be returned.
-    *   @param   status      A reference to a UErrorCode to receive any errors.
-    *                        Possible errors are  U_REGEX_INVALID_STATE if no match
-    *                        has been attempted or the last match failed.
-    *   @return  a string containing the matched input text.
-    *   @stable ICU 2.4
-    */
-    virtual UnicodeString group(UErrorCode &status) const;
-
-
-   /**
-    *    Returns a string containing the text captured by the given group
-    *    during the previous match operation.  Group(0) is the entire match.
-    *
-    *    @param groupNum the capture group number
-    *    @param   status     A reference to a UErrorCode to receive any errors.
-    *                        Possible errors are  U_REGEX_INVALID_STATE if no match
-    *                        has been attempted or the last match failed and
-    *                        U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number.
-    *    @return the captured text
-    *    @stable ICU 2.4
-    */
-    virtual UnicodeString group(int32_t groupNum, UErrorCode &status) const;
-
-
-   /**
-    *   Returns the number of capturing groups in this matcher's pattern.
-    *   @return the number of capture groups
-    *   @stable ICU 2.4
-    */
-    virtual int32_t groupCount() const;
-
-
-   /**
-    *   Returns a shallow clone of the entire live input string with the UText current native index
-    *   set to the beginning of the requested group.
-    *   Note that copying the entire input string may cause significant performance and memory issues.
-    *   @param   dest        The UText into which the input should be copied, or NULL to create a new UText
-    *   @param   group_len   A reference to receive the length of the desired capture group
-    *   @param   status      A reference to a UErrorCode to receive any errors.
-    *                        Possible errors are  U_REGEX_INVALID_STATE if no match
-    *                        has been attempted or the last match failed and
-    *                        U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number.
-    *   @return dest if non-NULL, a shallow copy of the input text otherwise
-    *
-    *   @draft ICU 4.6
-    */
-    virtual UText *group(UText *dest, int64_t &group_len, UErrorCode &status) const; 
-
-   /**
-    * @draft ICU 4.6
-    */
-    virtual UText *group(int32_t groupNum, UText *dest, int64_t &group_len, UErrorCode &status) const;
-
-   /**
-    *   Returns a string containing the text captured by the given group
-    *   during the previous match operation.  Group(0) is the entire match.
-    *
-    *   @param   groupNum    the capture group number
-    *   @param   dest        A mutable UText in which the matching text is placed.
-    *                        If NULL, a new UText will be created (which may not be mutable).
-    *   @param   status      A reference to a UErrorCode to receive any errors.
-    *                        Possible errors are  U_REGEX_INVALID_STATE if no match
-    *                        has been attempted or the last match failed.
-    *   @return  A string containing the matched input text. If a pre-allocated UText
-    *            was provided, it will always be used and returned.
-    *
-    *   @internal ICU 4.4 technology preview
-    */
-    virtual UText *group(int32_t groupNum, UText *dest, UErrorCode &status) const;
-
-
-   /**
-    *   Returns the index in the input string of the start of the text matched
-    *   during the previous match operation.
-    *    @param   status      a reference to a UErrorCode to receive any errors.
-    *    @return              The (native) position in the input string of the start of the last match.
-    *    @stable ICU 2.4
-    */
-    virtual int32_t start(UErrorCode &status) const;
-
-   /**
-    *   @draft ICU 4.6
-    */
-    virtual int64_t start64(UErrorCode &status) const;
-
-
-   /**
-    *   Returns the index in the input string of the start of the text matched by the
-    *    specified capture group during the previous match operation.  Return -1 if
-    *    the capture group exists in the pattern, but was not part of the last match.
-    *
-    *    @param  group       the capture group number
-    *    @param  status      A reference to a UErrorCode to receive any errors.  Possible
-    *                        errors are  U_REGEX_INVALID_STATE if no match has been
-    *                        attempted or the last match failed, and
-    *                        U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number
-    *    @return the (native) start position of substring matched by the specified group.
-    *    @stable ICU 2.4
-    */
-    virtual int32_t start(int32_t group, UErrorCode &status) const;
-
-   /**
-    *   @draft ICU 4.6
-    */
-    virtual int64_t start64(int32_t group, UErrorCode &status) const;
-
-
-   /**
-    *    Returns the index in the input string of the first character following the
-    *    text matched during the previous match operation.
-    *   @param   status      A reference to a UErrorCode to receive any errors.  Possible
-    *                        errors are  U_REGEX_INVALID_STATE if no match has been
-    *                        attempted or the last match failed.
-    *    @return the index of the last character matched, plus one.
-    *                        The index value returned is a native index, corresponding to
-    *                        code units for the underlying encoding type, for example,
-    *                        a byte index for UTF8.
-    *   @stable ICU 2.4
-    */
-    virtual int32_t end(UErrorCode &status) const;
-
-   /**
-    *   @draft ICU 4.6
-    */
-    virtual int64_t end64(UErrorCode &status) const;
-
-
-   /**
-    *    Returns the index in the input string of the character following the
-    *    text matched by the specified capture group during the previous match operation.
-    *    @param group  the capture group number
-    *    @param   status      A reference to a UErrorCode to receive any errors.  Possible
-    *                        errors are  U_REGEX_INVALID_STATE if no match has been
-    *                        attempted or the last match failed and
-    *                        U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number
-    *    @return  the index of the first character following the text
-    *              captured by the specifed group during the previous match operation.
-    *              Return -1 if the capture group exists in the pattern but was not part of the match.
-    *              The index value returned is a native index, corresponding to
-    *              code units for the underlying encoding type, for example,
-    *              a byte index for UTF8.
-    *    @stable ICU 2.4
-    */
-    virtual int32_t end(int32_t group, UErrorCode &status) const;
-
-   /**
-    *   @draft ICU 4.6
-    */
-    virtual int64_t end64(int32_t group, UErrorCode &status) const;
-
-
-   /**
-    *   Resets this matcher.  The effect is to remove any memory of previous matches,
-    *       and to cause subsequent find() operations to begin at the beginning of
-    *       the input string.
-    *
-    *   @return this RegexMatcher.
-    *   @stable ICU 2.4
-    */
-    virtual RegexMatcher &reset();
-
-
-   /**
-    *   Resets this matcher, and set the current input position.
-    *   The effect is to remove any memory of previous matches,
-    *       and to cause subsequent find() operations to begin at
-    *       the specified (native) position in the input string.
-    * <p>
-    *   The matcher's region is reset to its default, which is the entire
-    *   input string.
-    * <p>
-    *   An alternative to this function is to set a match region
-    *   beginning at the desired index.
-    *
-    *   @return this RegexMatcher.
-    *   @stable ICU 2.8
-    */
-    virtual RegexMatcher &reset(int64_t index, UErrorCode &status);
-
-
-   /**
-    *   Resets this matcher with a new input string.  This allows instances of RegexMatcher
-    *     to be reused, which is more efficient than creating a new RegexMatcher for
-    *     each input string to be processed.
-    *   @param input The new string on which subsequent pattern matches will operate.
-    *                The matcher retains a reference to the callers string, and operates
-    *                directly on that.  Ownership of the string remains with the caller.
-    *                Because no copy of the string is made, it is essential that the
-    *                caller not delete the string until after regexp operations on it
-    *                are done.
-    *                Note that while a reset on the matcher with an input string that is then
-    *                modified across/during matcher operations may be supported currently for UnicodeString,
-    *                this was not originally intended behavior, and support for this is not guaranteed
-    *                in upcoming versions of ICU.
-    *   @return this RegexMatcher.
-    *   @stable ICU 2.4
-    */
-    virtual RegexMatcher &reset(const UnicodeString &input);
-
-
-   /**
-    *   Resets this matcher with a new input string.  This allows instances of RegexMatcher
-    *     to be reused, which is more efficient than creating a new RegexMatcher for
-    *     each input string to be processed.
-    *   @param input The new string on which subsequent pattern matches will operate.
-    *                The matcher makes a shallow clone of the given text; ownership of the
-    *                original string remains with the caller. Because no deep copy of the
-    *                text is made, it is essential that the caller not modify the string
-    *                until after regexp operations on it are done.
-    *   @return this RegexMatcher.
-    *
-    *   @draft ICU 4.6
-    */
-    virtual RegexMatcher &reset(UText *input);
-
-private:
-    /**
-     * Cause a compilation error if an application accidently attempts to
-     *   reset a matcher with a (UChar *) string as input rather than
-     *   a UnicodeString.    Avoids a dangling reference to a temporary string.
-     * <p>
-     * To efficiently work with UChar *strings, wrap the data in a UnicodeString
-     * using one of the aliasing constructors, such as
-     * <code>UnicodeString(UBool isTerminated, const UChar *text, int32_t textLength);</code>
-     * or in a UText, using
-     * <code>utext_openUChars(UText *ut, const UChar *text, int64_t textLength, UErrorCode *status);</code>
-     *
-     * @internal
-     */
-    RegexMatcher &reset(const UChar *input);
-public:
-
-   /**
-    *   Returns the input string being matched.  Ownership of the string belongs to
-    *   the matcher; it should not be altered or deleted. This method will work even if the input
-    *   was originally supplied as a UText.
-    *   @return the input string
-    *   @stable ICU 2.4
-    */
-    virtual const UnicodeString &input() const;
-    
-   /**
-    *   Returns the input string being matched.  This is the live input text; it should not be
-    *   altered or deleted. This method will work even if the input was originally supplied as
-    *   a UnicodeString.
-    *   @return the input text
-    *
-    *   @draft ICU 4.6
-    */
-    virtual UText *inputText() const;
-    
-   /**
-    *   Returns the input string being matched, either by copying it into the provided
-    *   UText parameter or by returning a shallow clone of the live input. Note that copying
-    *   the entire input may cause significant performance and memory issues.
-    *   @param dest The UText into which the input should be copied, or NULL to create a new UText
-    *   @return dest if non-NULL, a shallow copy of the input text otherwise
-    *
-    *   @draft ICU 4.6
-    */
-    virtual UText *getInput(UText *dest, UErrorCode &status) const;
-    
-
-   /** Sets the limits of this matcher's region.
-     * The region is the part of the input string that will be searched to find a match.
-     * Invoking this method resets the matcher, and then sets the region to start
-     * at the index specified by the start parameter and end at the index specified
-     * by the end parameter.
-     *
-     * Depending on the transparency and anchoring being used (see useTransparentBounds
-     * and useAnchoringBounds), certain constructs such as anchors may behave differently
-     * at or around the boundaries of the region
-     *
-     * The function will fail if start is greater than limit, or if either index
-     *  is less than zero or greater than the length of the string being matched.
-     *
-     * @param start  The (native) index to begin searches at.
-     * @param limit  The index to end searches at (exclusive).
-     * @param status A reference to a UErrorCode to receive any errors.
-     * @stable ICU 4.0
-     */
-     virtual RegexMatcher &region(int64_t start, int64_t limit, UErrorCode &status);
-
-   /** 
-     * Identical to region(start, limit, status) but also allows a start position without
-     *  resetting the region state.
-     * @param startIndex  The (native) index within the region bounds at which to begin searches.
-     * @param status A reference to a UErrorCode to receive any errors.
-     *                If startIndex is not within the specified region bounds, 
-     *                U_INDEX_OUTOFBOUNDS_ERROR is returned.
-     * @draft ICU 4.6
-     */
-     virtual RegexMatcher &region(int64_t regionStart, int64_t regionLimit, int64_t startIndex, UErrorCode &status);
-
-   /**
-     * Reports the start index of this matcher's region. The searches this matcher
-     * conducts are limited to finding matches within regionStart (inclusive) and
-     * regionEnd (exclusive).
-     *
-     * @return The starting (native) index of this matcher's region.
-     * @stable ICU 4.0
-     */
-     virtual int32_t regionStart() const;
-
-   /**
-    *   @draft ICU 4.6
-    */
-     virtual int64_t regionStart64() const;
-
-
-    /**
-      * Reports the end (limit) index (exclusive) of this matcher's region. The searches
-      * this matcher conducts are limited to finding matches within regionStart
-      * (inclusive) and regionEnd (exclusive).
-      *
-      * @return The ending point (native) of this matcher's region.
-      * @stable ICU 4.0
-      */
-      virtual int32_t regionEnd() const;
-
-   /**
-    *   @draft ICU 4.6
-    */
-      virtual int64_t regionEnd64() const;
-
-    /**
-      * Queries the transparency of region bounds for this matcher.
-      * See useTransparentBounds for a description of transparent and opaque bounds.
-      * By default, a matcher uses opaque region boundaries.
-      *
-      * @return TRUE if this matcher is using opaque bounds, false if it is not.
-      * @stable ICU 4.0
-      */
-      virtual UBool hasTransparentBounds() const;
-
-    /**
-      * Sets the transparency of region bounds for this matcher.
-      * Invoking this function with an argument of true will set this matcher to use transparent bounds.
-      * If the boolean argument is false, then opaque bounds will be used.
-      *
-      * Using transparent bounds, the boundaries of this matcher's region are transparent
-      * to lookahead, lookbehind, and boundary matching constructs. Those constructs can
-      * see text beyond the boundaries of the region while checking for a match.
-      *
-      * With opaque bounds, no text outside of the matcher's region is visible to lookahead,
-      * lookbehind, and boundary matching constructs.
-      *
-      * By default, a matcher uses opaque bounds.
-      *
-      * @param   b TRUE for transparent bounds; FALSE for opaque bounds
-      * @return  This Matcher;
-      * @stable ICU 4.0
-      **/
-      virtual RegexMatcher &useTransparentBounds(UBool b);
-
-     
-    /**
-      * Return true if this matcher is using anchoring bounds.
-      * By default, matchers use anchoring region boounds.
-      *
-      * @return TRUE if this matcher is using anchoring bounds.
-      * @stable ICU 4.0
-      */    
-      virtual UBool hasAnchoringBounds() const;
-
-
-    /**
-      * Set whether this matcher is using Anchoring Bounds for its region.
-      * With anchoring bounds, pattern anchors such as ^ and $ will match at the start
-      * and end of the region.  Without Anchoring Bounds, anchors will only match at
-      * the positions they would in the complete text.
-      *
-      * Anchoring Bounds are the default for regions.
-      *
-      * @param b TRUE if to enable anchoring bounds; FALSE to disable them.
-      * @return  This Matcher
-      * @stable ICU 4.0
-      */
-      virtual RegexMatcher &useAnchoringBounds(UBool b);
-
-
-    /**
-      * Return TRUE if the most recent matching operation touched the
-      *  end of the text being processed.  In this case, additional input text could
-      *  change the results of that match.
-      *
-      *  hitEnd() is defined for both successful and unsuccessful matches.
-      *  In either case hitEnd() will return TRUE if if the end of the text was
-      *  reached at any point during the matching process.
-      *
-      *  @return  TRUE if the most recent match hit the end of input
-      *  @stable ICU 4.0
-      */
-      virtual UBool hitEnd() const;
-
-    /**
-      * Return TRUE the most recent match succeeded and additional input could cause
-      * it to fail. If this method returns false and a match was found, then more input
-      * might change the match but the match won't be lost. If a match was not found,
-      * then requireEnd has no meaning.
-      *
-      * @return TRUE if more input could cause the most recent match to no longer match.
-      * @stable ICU 4.0
-      */
-      virtual UBool requireEnd() const;
-
-
-   /**
-    *    Returns the pattern that is interpreted by this matcher.
-    *    @return  the RegexPattern for this RegexMatcher
-    *    @stable ICU 2.4
-    */
-    virtual const RegexPattern &pattern() const;
-
-
-   /**
-    *    Replaces every substring of the input that matches the pattern
-    *    with the given replacement string.  This is a convenience function that
-    *    provides a complete find-and-replace-all operation.
-    *
-    *    This method first resets this matcher. It then scans the input string
-    *    looking for matches of the pattern. Input that is not part of any
-    *    match is left unchanged; each match is replaced in the result by the
-    *    replacement string. The replacement string may contain references to
-    *    capture groups.
-    *
-    *    @param   replacement a string containing the replacement text.
-    *    @param   status      a reference to a UErrorCode to receive any errors.
-    *    @return              a string containing the results of the find and replace.
-    *    @stable ICU 2.4
-    */
-    virtual UnicodeString replaceAll(const UnicodeString &replacement, UErrorCode &status);
-
-
-   /**
-    *    Replaces every substring of the input that matches the pattern
-    *    with the given replacement string.  This is a convenience function that
-    *    provides a complete find-and-replace-all operation.
-    *
-    *    This method first resets this matcher. It then scans the input string
-    *    looking for matches of the pattern. Input that is not part of any
-    *    match is left unchanged; each match is replaced in the result by the
-    *    replacement string. The replacement string may contain references to
-    *    capture groups.
-    *
-    *    @param   replacement a string containing the replacement text.
-    *    @param   dest        a mutable UText in which the results are placed.
-    *                          If NULL, a new UText will be created (which may not be mutable).
-    *    @param   status      a reference to a UErrorCode to receive any errors.
-    *    @return              a string containing the results of the find and replace.
-    *                          If a pre-allocated UText was provided, it will always be used and returned.
-    *
-    *    @draft ICU 4.6
-    */
-    virtual UText *replaceAll(UText *replacement, UText *dest, UErrorCode &status);
-    
-
-   /**
-    * Replaces the first substring of the input that matches
-    * the pattern with the replacement string.   This is a convenience
-    * function that provides a complete find-and-replace operation.
-    *
-    * <p>This function first resets this RegexMatcher. It then scans the input string
-    * looking for a match of the pattern. Input that is not part
-    * of the match is appended directly to the result string; the match is replaced
-    * in the result by the replacement string. The replacement string may contain
-    * references to captured groups.</p>
-    *
-    * <p>The state of the matcher (the position at which a subsequent find()
-    *    would begin) after completing a replaceFirst() is not specified.  The
-    *    RegexMatcher should be reset before doing additional find() operations.</p>
-    *
-    *    @param   replacement a string containing the replacement text.
-    *    @param   status      a reference to a UErrorCode to receive any errors.
-    *    @return              a string containing the results of the find and replace.
-    *    @stable ICU 2.4
-    */
-    virtual UnicodeString replaceFirst(const UnicodeString &replacement, UErrorCode &status);
-    
-
-   /**
-    * Replaces the first substring of the input that matches
-    * the pattern with the replacement string.   This is a convenience
-    * function that provides a complete find-and-replace operation.
-    *
-    * <p>This function first resets this RegexMatcher. It then scans the input string
-    * looking for a match of the pattern. Input that is not part
-    * of the match is appended directly to the result string; the match is replaced
-    * in the result by the replacement string. The replacement string may contain
-    * references to captured groups.</p>
-    *
-    * <p>The state of the matcher (the position at which a subsequent find()
-    *    would begin) after completing a replaceFirst() is not specified.  The
-    *    RegexMatcher should be reset before doing additional find() operations.</p>
-    *
-    *    @param   replacement a string containing the replacement text.
-    *    @param   dest        a mutable UText in which the results are placed.
-    *                          If NULL, a new UText will be created (which may not be mutable).
-    *    @param   status      a reference to a UErrorCode to receive any errors.
-    *    @return              a string containing the results of the find and replace.
-    *                          If a pre-allocated UText was provided, it will always be used and returned.
-    *
-    *    @draft ICU 4.6
-    */
-    virtual UText *replaceFirst(UText *replacement, UText *dest, UErrorCode &status);
-    
-    
-   /**
-    *   Implements a replace operation intended to be used as part of an
-    *   incremental find-and-replace.
-    *
-    *   <p>The input string, starting from the end of the previous replacement and ending at
-    *   the start of the current match, is appended to the destination string.  Then the
-    *   replacement string is appended to the output string,
-    *   including handling any substitutions of captured text.</p>
-    *
-    *   <p>For simple, prepackaged, non-incremental find-and-replace
-    *   operations, see replaceFirst() or replaceAll().</p>
-    *
-    *   @param   dest        A UnicodeString to which the results of the find-and-replace are appended.
-    *   @param   replacement A UnicodeString that provides the text to be substituted for
-    *                        the input text that matched the regexp pattern.  The replacement
-    *                        text may contain references to captured text from the
-    *                        input.
-    *   @param   status      A reference to a UErrorCode to receive any errors.  Possible
-    *                        errors are  U_REGEX_INVALID_STATE if no match has been
-    *                        attempted or the last match failed, and U_INDEX_OUTOFBOUNDS_ERROR
-    *                        if the replacement text specifies a capture group that
-    *                        does not exist in the pattern.
-    *
-    *   @return  this  RegexMatcher
-    *   @stable ICU 2.4
-    *
-    */
-    virtual RegexMatcher &appendReplacement(UnicodeString &dest,
-        const UnicodeString &replacement, UErrorCode &status);
-    
-    
-   /**
-    *   Implements a replace operation intended to be used as part of an
-    *   incremental find-and-replace.
-    *
-    *   <p>The input string, starting from the end of the previous replacement and ending at
-    *   the start of the current match, is appended to the destination string.  Then the
-    *   replacement string is appended to the output string,
-    *   including handling any substitutions of captured text.</p>
-    *
-    *   <p>For simple, prepackaged, non-incremental find-and-replace
-    *   operations, see replaceFirst() or replaceAll().</p>
-    *
-    *   @param   dest        A mutable UText to which the results of the find-and-replace are appended.
-    *                         Must not be NULL.
-    *   @param   replacement A UText that provides the text to be substituted for
-    *                        the input text that matched the regexp pattern.  The replacement
-    *                        text may contain references to captured text from the input.
-    *   @param   status      A reference to a UErrorCode to receive any errors.  Possible
-    *                        errors are  U_REGEX_INVALID_STATE if no match has been
-    *                        attempted or the last match failed, and U_INDEX_OUTOFBOUNDS_ERROR
-    *                        if the replacement text specifies a capture group that
-    *                        does not exist in the pattern.
-    *
-    *   @return  this  RegexMatcher
-    *
-    *   @draft ICU 4.6
-    */
-    virtual RegexMatcher &appendReplacement(UText *dest,
-        UText *replacement, UErrorCode &status);
-
-
-   /**
-    * As the final step in a find-and-replace operation, append the remainder
-    * of the input string, starting at the position following the last appendReplacement(),
-    * to the destination string. <code>appendTail()</code> is intended to be invoked after one
-    * or more invocations of the <code>RegexMatcher::appendReplacement()</code>.
-    *
-    *  @param dest A UnicodeString to which the results of the find-and-replace are appended.
-    *  @return  the destination string.
-    *  @stable ICU 2.4
-    */
-    virtual UnicodeString &appendTail(UnicodeString &dest);
-
-
-   /**
-    * As the final step in a find-and-replace operation, append the remainder
-    * of the input string, starting at the position following the last appendReplacement(),
-    * to the destination string. <code>appendTail()</code> is intended to be invoked after one
-    * or more invocations of the <code>RegexMatcher::appendReplacement()</code>.
-    *
-    *  @param dest A mutable UText to which the results of the find-and-replace are appended.
-    *               Must not be NULL.
-    *  @return  the destination string.
-    *
-    *  @draft ICU 4.6
-    */
-    virtual UText *appendTail(UText *dest, UErrorCode &status);
-
-
-    /**
-     * Split a string into fields.  Somewhat like split() from Perl.
-     * The pattern matches identify delimiters that separate the input
-     *  into fields.  The input data between the matches becomes the
-     *  fields themselves.
-     *
-     * @param input   The string to be split into fields.  The field delimiters
-     *                match the pattern (in the "this" object).  This matcher
-     *                will be reset to this input string.
-     * @param dest    An array of UnicodeStrings to receive the results of the split.
-     *                This is an array of actual UnicodeString objects, not an
-     *                array of pointers to strings.  Local (stack based) arrays can
-     *                work well here.
-     * @param destCapacity  The number of elements in the destination array.
-     *                If the number of fields found is less than destCapacity, the
-     *                extra strings in the destination array are not altered.
-     *                If the number of destination strings is less than the number
-     *                of fields, the trailing part of the input string, including any
-     *                field delimiters, is placed in the last destination string.
-     * @param status  A reference to a UErrorCode to receive any errors.
-     * @return        The number of fields into which the input string was split.
-     * @stable ICU 2.6
-     */
-    virtual int32_t  split(const UnicodeString &input,
-        UnicodeString    dest[],
-        int32_t          destCapacity,
-        UErrorCode       &status);
-
-
-    /**
-     * Split a string into fields.  Somewhat like split() from Perl.
-     * The pattern matches identify delimiters that separate the input
-     *  into fields.  The input data between the matches becomes the
-     *  fields themselves.
-     *
-     * @param input   The string to be split into fields.  The field delimiters
-     *                match the pattern (in the "this" object).  This matcher
-     *                will be reset to this input string.
-     * @param dest    An array of mutable UText structs to receive the results of the split.
-     *                If a field is NULL, a new UText is allocated to contain the results for
-     *                that field. This new UText is not guaranteed to be mutable.
-     * @param destCapacity  The number of elements in the destination array.
-     *                If the number of fields found is less than destCapacity, the
-     *                extra strings in the destination array are not altered.
-     *                If the number of destination strings is less than the number
-     *                of fields, the trailing part of the input string, including any
-     *                field delimiters, is placed in the last destination string.
-     * @param status  A reference to a UErrorCode to receive any errors.
-     * @return        The number of fields into which the input string was split.
-     *
-     * @draft ICU 4.6
-     */
-    virtual int32_t  split(UText *input,
-        UText           *dest[],
-        int32_t          destCapacity,
-        UErrorCode       &status);
-    
-  /**
-    *   Set a processing time limit for match operations with this Matcher.
-    *  
-    *   Some patterns, when matching certain strings, can run in exponential time.
-    *   For practical purposes, the match operation may appear to be in an
-    *   infinite loop.
-    *   When a limit is set a match operation will fail with an error if the
-    *   limit is exceeded.
-    *   <p>
-    *   The units of the limit are steps of the match engine.
-    *   Correspondence with actual processor time will depend on the speed
-    *   of the processor and the details of the specific pattern, but will
-    *   typically be on the order of milliseconds.
-    *   <p>
-    *   By default, the matching time is not limited.
-    *   <p>
-    *
-    *   @param   limit       The limit value, or 0 for no limit.
-    *   @param   status      A reference to a UErrorCode to receive any errors.
-    *   @stable ICU 4.0
-    */
-    virtual void setTimeLimit(int32_t limit, UErrorCode &status);
-
-  /**
-    * Get the time limit, if any, for match operations made with this Matcher.
-    *
-    *   @return the maximum allowed time for a match, in units of processing steps.
-    *   @stable ICU 4.0
-    */
-    virtual int32_t getTimeLimit() const;
-
-  /**
-    *  Set the amount of heap storage avaliable for use by the match backtracking stack.
-    *  The matcher is also reset, discarding any results from previous matches.
-    *  <p>
-    *  ICU uses a backtracking regular expression engine, with the backtrack stack
-    *  maintained on the heap.  This function sets the limit to the amount of memory
-    *  that can be used  for this purpose.  A backtracking stack overflow will
-    *  result in an error from the match operation that caused it.
-    *  <p>
-    *  A limit is desirable because a malicious or poorly designed pattern can use
-    *  excessive memory, potentially crashing the process.  A limit is enabled
-    *  by default.
-    *  <p>
-    *  @param limit  The maximum size, in bytes, of the matching backtrack stack.
-    *                A value of zero means no limit.
-    *                The limit must be greater or equal to zero.
-    *
-    *  @param status   A reference to a UErrorCode to receive any errors.
-    *
-    *  @stable ICU 4.0
-    */
-    virtual void setStackLimit(int32_t  limit, UErrorCode &status);
-    
-  /**
-    *  Get the size of the heap storage available for use by the back tracking stack.
-    *
-    *  @return  the maximum backtracking stack size, in bytes, or zero if the
-    *           stack size is unlimited.
-    *  @stable ICU 4.0
-    */
-    virtual int32_t  getStackLimit() const;
-
-
-  /**
-    * Set a callback function for use with this Matcher.
-    * During matching operations the function will be called periodically,
-    * giving the application the opportunity to terminate a long-running
-    * match.
-    *
-    *    @param   callback    A pointer to the user-supplied callback function.
-    *    @param   context     User context pointer.  The value supplied at the
-    *                         time the callback function is set will be saved
-    *                         and passed to the callback each time that it is called.
-    *    @param   status      A reference to a UErrorCode to receive any errors.
-    *  @stable ICU 4.0
-    */
-    virtual void setMatchCallback(URegexMatchCallback     *callback,
-                                  const void              *context,
-                                  UErrorCode              &status);
-
-
-  /**
-    *  Get the callback function for this URegularExpression.
-    *
-    *    @param   callback    Out paramater, receives a pointer to the user-supplied 
-    *                         callback function.
-    *    @param   context     Out parameter, receives the user context pointer that
-    *                         was set when uregex_setMatchCallback() was called.
-    *    @param   status      A reference to a UErrorCode to receive any errors.
-    *    @stable ICU 4.0
-    */
-    virtual void getMatchCallback(URegexMatchCallback     *&callback,
-                                  const void              *&context,
-                                  UErrorCode              &status);
-
-
-  /**
-    * Set a progress callback function for use with find operations on this Matcher.
-    * During find operations, the callback will be invoked after each return from a
-    * match attempt, giving the application the opportunity to terminate a long-running
-    * find operation.
-    *
-    *    @param   callback    A pointer to the user-supplied callback function.
-    *    @param   context     User context pointer.  The value supplied at the
-    *                         time the callback function is set will be saved
-    *                         and passed to the callback each time that it is called.
-    *    @param   status      A reference to a UErrorCode to receive any errors.
-    *    @draft ICU 4.6
-    */
-    virtual void setFindProgressCallback(URegexFindProgressCallback      *callback,
-                                              const void                              *context,
-                                              UErrorCode                              &status);
-
-
-  /**
-    *  Get the find progress callback function for this URegularExpression.
-    *
-    *    @param   callback    Out paramater, receives a pointer to the user-supplied 
-    *                         callback function.
-    *    @param   context     Out parameter, receives the user context pointer that
-    *                         was set when uregex_setFindProgressCallback() was called.
-    *    @param   status      A reference to a UErrorCode to receive any errors.
-    *    @draft ICU 4.6
-    */
-    virtual void getFindProgressCallback(URegexFindProgressCallback      *&callback,
-                                              const void                      *&context,
-                                              UErrorCode                      &status);
-
-
-   /**
-     *   setTrace   Debug function, enable/disable tracing of the matching engine.
-     *              For internal ICU development use only.  DO NO USE!!!!
-     *   @internal
-     */
-    void setTrace(UBool state);
-
-
-    /**
-    * ICU "poor man's RTTI", returns a UClassID for this class.
-    *
-    * @stable ICU 2.2
-    */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-private:
-    // Constructors and other object boilerplate are private.
-    // Instances of RegexMatcher can not be assigned, copied, cloned, etc.
-    RegexMatcher();                  // default constructor not implemented
-    RegexMatcher(const RegexPattern *pat);
-    RegexMatcher(const RegexMatcher &other);
-    RegexMatcher &operator =(const RegexMatcher &rhs);
-    void init(UErrorCode &status);                      // Common initialization
-    void init2(UText *t, UErrorCode &e);  // Common initialization, part 2.
-
-    friend class RegexPattern;
-    friend class RegexCImpl;
-public:
-    /** @internal  */
-    void resetPreserveRegion();  // Reset matcher state, but preserve any region.
-private:
-
-    //
-    //  MatchAt   This is the internal interface to the match engine itself.
-    //            Match status comes back in matcher member variables.
-    //
-    void                 MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status);
-    inline void          backTrack(int64_t &inputIdx, int32_t &patIdx);
-    UBool                isWordBoundary(int64_t pos);         // perform Perl-like  \b test
-    UBool                isUWordBoundary(int64_t pos);        // perform RBBI based \b test
-    REStackFrame        *resetStack();
-    inline REStackFrame *StateSave(REStackFrame *fp, int64_t savePatIdx, UErrorCode &status);
-    void                 IncrementTime(UErrorCode &status);
-    UBool                ReportFindProgress(int64_t matchIndex, UErrorCode &status);
-    
-    int64_t              appendGroup(int32_t groupNum, UText *dest, UErrorCode &status) const;
-    
-    UBool                findUsingChunk();
-    void                 MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &status);
-    UBool                isChunkWordBoundary(int32_t pos);
-
-    const RegexPattern  *fPattern;
-    RegexPattern        *fPatternOwned;    // Non-NULL if this matcher owns the pattern, and
-                                           //   should delete it when through.
-
-    const UnicodeString *fInput;           // The string being matched. Only used for input()
-    UText               *fInputText;       // The text being matched. Is never NULL.
-    UText               *fAltInputText;    // A shallow copy of the text being matched.
-                                           //   Only created if the pattern contains backreferences.
-    int64_t              fInputLength;     // Full length of the input text.
-    int32_t              fFrameSize;       // The size of a frame in the backtrack stack.
-    
-    int64_t              fRegionStart;     // Start of the input region, default = 0.
-    int64_t              fRegionLimit;     // End of input region, default to input.length.
-    
-    int64_t              fAnchorStart;     // Region bounds for anchoring operations (^ or $).
-    int64_t              fAnchorLimit;     //   See useAnchoringBounds
-    
-    int64_t              fLookStart;       // Region bounds for look-ahead/behind and
-    int64_t              fLookLimit;       //   and other boundary tests.  See
-                                           //   useTransparentBounds
-
-    int64_t              fActiveStart;     // Currently active bounds for matching.
-    int64_t              fActiveLimit;     //   Usually is the same as region, but
-                                           //   is changed to fLookStart/Limit when
-                                           //   entering look around regions.
-
-    UBool                fTransparentBounds;  // True if using transparent bounds.
-    UBool                fAnchoringBounds; // True if using anchoring bounds.
-
-    UBool                fMatch;           // True if the last attempted match was successful.
-    int64_t              fMatchStart;      // Position of the start of the most recent match
-    int64_t              fMatchEnd;        // First position after the end of the most recent match
-                                           //   Zero if no previous match, even when a region
-                                           //   is active.
-    int64_t              fLastMatchEnd;    // First position after the end of the previous match,
-                                           //   or -1 if there was no previous match.
-    int64_t              fAppendPosition;  // First position after the end of the previous
-                                           //   appendReplacement().  As described by the
-                                           //   JavaDoc for Java Matcher, where it is called 
-                                           //   "append position"
-    UBool                fHitEnd;          // True if the last match touched the end of input.
-    UBool                fRequireEnd;      // True if the last match required end-of-input
-                                           //    (matched $ or Z)
-
-    UVector64           *fStack;
-    REStackFrame        *fFrame;           // After finding a match, the last active stack frame,
-                                           //   which will contain the capture group results.
-                                           //   NOT valid while match engine is running.
-
-    int64_t             *fData;            // Data area for use by the compiled pattern.
-    int64_t             fSmallData[8];     //   Use this for data if it's enough.
-
-    int32_t             fTimeLimit;        // Max time (in arbitrary steps) to let the
-                                           //   match engine run.  Zero for unlimited.
-    
-    int32_t             fTime;             // Match time, accumulates while matching.
-    int32_t             fTickCounter;      // Low bits counter for time.  Counts down StateSaves.
-                                           //   Kept separately from fTime to keep as much
-                                           //   code as possible out of the inline
-                                           //   StateSave function.
-
-    int32_t             fStackLimit;       // Maximum memory size to use for the backtrack
-                                           //   stack, in bytes.  Zero for unlimited.
-
-    URegexMatchCallback *fCallbackFn;       // Pointer to match progress callback funct.
-                                           //   NULL if there is no callback.
-    const void         *fCallbackContext;  // User Context ptr for callback function.
-
-    URegexFindProgressCallback  *fFindProgressCallbackFn;  // Pointer to match progress callback funct.
-                                                           //   NULL if there is no callback.
-    const void         *fFindProgressCallbackContext;      // User Context ptr for callback function.
-
-
-    UBool               fInputUniStrMaybeMutable;  // Set when fInputText wraps a UnicodeString that may be mutable - compatibility.
-
-    UBool               fTraceDebug;       // Set true for debug tracing of match engine.
-
-    UErrorCode          fDeferredStatus;   // Save error state that cannot be immediately
-                                           //   reported, or that permanently disables this matcher.
-
-    RuleBasedBreakIterator  *fWordBreakItr;
-
-
-};
-
-U_NAMESPACE_END
-#endif  // UCONFIG_NO_REGULAR_EXPRESSIONS
-#endif
diff --git a/source/i18n/unicode/search.h b/source/i18n/unicode/search.h
deleted file mode 100644
index 8b82906..0000000
--- a/source/i18n/unicode/search.h
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2001-2008 IBM and others. All rights reserved.
-**********************************************************************
-*   Date        Name        Description
-*  03/22/2000   helena      Creation.
-**********************************************************************
-*/
-
-#ifndef SEARCH_H
-#define SEARCH_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: SearchIterator object.
- */
- 
-#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/chariter.h"
-#include "unicode/brkiter.h"
-#include "unicode/usearch.h"
-
-/**
-* @stable ICU 2.0
-*/
-struct USearch;
-/**
-* @stable ICU 2.0
-*/
-typedef struct USearch USearch;
-
-U_NAMESPACE_BEGIN
-
-/**
- *
- * <tt>SearchIterator</tt> is an abstract base class that provides 
- * methods to search for a pattern within a text string. Instances of
- * <tt>SearchIterator</tt> maintain a current position and scans over the 
- * target text, returning the indices the pattern is matched and the length 
- * of each match.
- * <p>
- * <tt>SearchIterator</tt> defines a protocol for text searching. 
- * Subclasses provide concrete implementations of various search algorithms. 
- * For example, <tt>StringSearch</tt> implements language-sensitive pattern 
- * matching based on the comparison rules defined in a 
- * <tt>RuleBasedCollator</tt> object. 
- * <p> 
- * Other options for searching includes using a BreakIterator to restrict 
- * the points at which matches are detected.
- * <p>
- * <tt>SearchIterator</tt> provides an API that is similar to that of
- * other text iteration classes such as <tt>BreakIterator</tt>. Using 
- * this class, it is easy to scan through text looking for all occurances of 
- * a given pattern. The following example uses a <tt>StringSearch</tt> 
- * object to find all instances of "fox" in the target string. Any other 
- * subclass of <tt>SearchIterator</tt> can be used in an identical 
- * manner.
- * <pre><code>
- * UnicodeString target("The quick brown fox jumped over the lazy fox");
- * UnicodeString pattern("fox");
- *
- * SearchIterator *iter  = new StringSearch(pattern, target);
- * UErrorCode      error = U_ZERO_ERROR;
- * for (int pos = iter->first(error); pos != USEARCH_DONE; 
- *                               pos = iter->next(error)) {
- *     printf("Found match at %d pos, length is %d\n", pos, 
- *                                             iter.getMatchLength());
- * }
- * </code></pre>
- *
- * @see StringSearch
- * @see RuleBasedCollator
- */
-class U_I18N_API SearchIterator : public UObject {
-
-public:
-
-    // public constructors and destructors -------------------------------
-
-    /** 
-    * Copy constructor that creates a SearchIterator instance with the same 
-    * behavior, and iterating over the same text. 
-    * @param other the SearchIterator instance to be copied.
-    * @stable ICU 2.0
-    */
-    SearchIterator(const SearchIterator &other);
-
-    /**
-     * Destructor. Cleans up the search iterator data struct.
-     * @stable ICU 2.0
-     */
-    virtual ~SearchIterator();
-
-    // public get and set methods ----------------------------------------
-
-    /**
-     * Sets the index to point to the given position, and clears any state 
-     * that's affected.
-     * <p>
-     * This method takes the argument index and sets the position in the text 
-     * string accordingly without checking if the index is pointing to a 
-     * valid starting point to begin searching. 
-     * @param position within the text to be set. If position is less
-     *             than or greater than the text range for searching, 
-     *          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-     * @param status for errors if it occurs
-     * @stable ICU 2.0
-     */
-    virtual void setOffset(int32_t position, UErrorCode &status) = 0;
-
-    /**
-     * Return the current index in the text being searched.
-     * If the iteration has gone past the end of the text
-     * (or past the beginning for a backwards search), USEARCH_DONE
-     * is returned.
-     * @return current index in the text being searched.
-     * @stable ICU 2.0
-     */
-    virtual int32_t getOffset(void) const = 0;
-
-    /**
-    * Sets the text searching attributes located in the enum 
-    * USearchAttribute with values from the enum USearchAttributeValue.
-    * USEARCH_DEFAULT can be used for all attributes for resetting.
-    * @param attribute text attribute (enum USearchAttribute) to be set
-    * @param value text attribute value
-    * @param status for errors if it occurs
-    * @stable ICU 2.0
-    */
-    void setAttribute(USearchAttribute       attribute,
-                      USearchAttributeValue  value,
-                      UErrorCode            &status);
-
-    /**    
-    * Gets the text searching attributes
-    * @param attribute text attribute (enum USearchAttribute) to be retrieve
-    * @return text attribute value
-    * @stable ICU 2.0
-    */
-    USearchAttributeValue getAttribute(USearchAttribute  attribute) const;
-    
-    /**
-    * Returns the index to the match in the text string that was searched.
-    * This call returns a valid result only after a successful call to 
-    * <tt>first</tt>, <tt>next</tt>, <tt>previous</tt>, or <tt>last</tt>.
-    * Just after construction, or after a searching method returns 
-    * <tt>USEARCH_DONE</tt>, this method will return <tt>USEARCH_DONE</tt>.
-    * <p>
-    * Use getMatchedLength to get the matched string length.
-    * @return index of a substring within the text string that is being 
-    *         searched.
-    * @see #first
-    * @see #next
-    * @see #previous
-    * @see #last
-    * @stable ICU 2.0
-    */
-    int32_t getMatchedStart(void) const;
-
-    /**
-     * Returns the length of text in the string which matches the search 
-     * pattern. This call returns a valid result only after a successful call 
-     * to <tt>first</tt>, <tt>next</tt>, <tt>previous</tt>, or <tt>last</tt>.
-     * Just after construction, or after a searching method returns 
-     * <tt>USEARCH_DONE</tt>, this method will return 0.
-     * @return The length of the match in the target text, or 0 if there
-     *         is no match currently.
-     * @see #first
-     * @see #next
-     * @see #previous
-     * @see #last
-     * @stable ICU 2.0
-     */
-    int32_t getMatchedLength(void) const;
-    
-    /**
-     * Returns the text that was matched by the most recent call to 
-     * <tt>first</tt>, <tt>next</tt>, <tt>previous</tt>, or <tt>last</tt>.
-     * If the iterator is not pointing at a valid match (e.g. just after 
-     * construction or after <tt>USEARCH_DONE</tt> has been returned, 
-     * returns an empty string. 
-     * @param result stores the matched string or an empty string if a match
-     *        is not found.
-     * @see #first
-     * @see #next
-     * @see #previous
-     * @see #last
-     * @stable ICU 2.0
-     */
-    void getMatchedText(UnicodeString &result) const;
-    
-    /**
-     * Set the BreakIterator that will be used to restrict the points
-     * at which matches are detected. The user is responsible for deleting 
-     * the breakiterator.
-     * @param breakiter A BreakIterator that will be used to restrict the 
-     *                points at which matches are detected. If a match is 
-     *                found, but the match's start or end index is not a 
-     *                boundary as determined by the <tt>BreakIterator</tt>, 
-     *                the match will be rejected and another will be searched 
-     *                for. If this parameter is <tt>NULL</tt>, no break
-     *                detection is attempted.
-     * @param status for errors if it occurs
-     * @see BreakIterator
-     * @stable ICU 2.0
-     */
-    void setBreakIterator(BreakIterator *breakiter, UErrorCode &status);
-    
-    /**
-     * Returns the BreakIterator that is used to restrict the points at 
-     * which matches are detected.  This will be the same object that was 
-     * passed to the constructor or to <tt>setBreakIterator</tt>.
-     * Note that <tt>NULL</tt> is a legal value; it means that break
-     * detection should not be attempted.
-     * @return BreakIterator used to restrict matchings.
-     * @see #setBreakIterator
-     * @stable ICU 2.0
-     */
-    const BreakIterator * getBreakIterator(void) const;
-
-    /**
-     * Set the string text to be searched. Text iteration will hence begin at 
-     * the start of the text string. This method is useful if you want to 
-     * re-use an iterator to search for the same pattern within a different 
-     * body of text. The user is responsible for deleting the text.
-     * @param text string to be searched.
-     * @param status for errors. If the text length is 0, 
-     *        an U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    virtual void setText(const UnicodeString &text, UErrorCode &status);    
-
-    /**
-     * Set the string text to be searched. Text iteration will hence begin at 
-     * the start of the text string. This method is useful if you want to 
-     * re-use an iterator to search for the same pattern within a different 
-     * body of text.
-     * <p>
-     * Note: No parsing of the text within the <tt>CharacterIterator</tt> 
-     * will be done during searching for this version. The block of text 
-     * in <tt>CharacterIterator</tt> will be used as it is.
-     * The user is responsible for deleting the text.
-     * @param text string iterator to be searched.
-     * @param status for errors if any. If the text length is 0 then an 
-     *        U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    virtual void setText(CharacterIterator &text, UErrorCode &status);
-    
-    /**
-     * Return the string text to be searched.
-     * @return text string to be searched.
-     * @stable ICU 2.0
-     */
-    const UnicodeString & getText(void) const;
-
-    // operator overloading ----------------------------------------------
-
-    /**
-     * Equality operator. 
-     * @param that SearchIterator instance to be compared.
-     * @return TRUE if both BreakIterators are of the same class, have the 
-     *         same behavior, terates over the same text and have the same
-     *         attributes. FALSE otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const SearchIterator &that) const;
-
-    /**
-     * Not-equal operator. 
-     * @param that SearchIterator instance to be compared.
-     * @return FALSE if operator== returns TRUE, and vice versa.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const SearchIterator &that) const;
-
-    // public methods ----------------------------------------------------
-
-    /**
-     * Returns a copy of SearchIterator with the same behavior, and 
-     * iterating over the same text, as this one. Note that all data will be
-     * replicated, except for the text string to be searched.
-     * @return cloned object
-     * @stable ICU 2.0
-     */
-    virtual SearchIterator* safeClone(void) const = 0;
-
-    /**
-     * Returns the first index at which the string text matches the search 
-     * pattern. The iterator is adjusted so that its current index (as 
-     * returned by <tt>getOffset</tt>) is the match position if one 
-     * was found.
-     * If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-     * the iterator will be adjusted to the index USEARCH_DONE
-     * @param  status for errors if it occurs
-     * @return The character index of the first match, or 
-     *         <tt>USEARCH_DONE</tt> if there are no matches.
-     * @see #getOffset
-     * @stable ICU 2.0
-     */
-    int32_t first(UErrorCode &status);
-
-    /**
-     * Returns the first index greater than <tt>position</tt> at which the 
-     * string text matches the search pattern. The iterator is adjusted so 
-     * that its current index (as returned by <tt>getOffset</tt>) is the 
-     * match position if one was found. If a match is not found, 
-     * <tt>USEARCH_DONE</tt> will be returned and the iterator will be 
-     * adjusted to the index USEARCH_DONE
-     * @param  position where search if to start from. If position is less
-     *             than or greater than the text range for searching, 
-     *          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-     * @param  status for errors if it occurs
-     * @return The character index of the first match following 
-     *         <tt>position</tt>, or <tt>USEARCH_DONE</tt> if there are no 
-     *         matches.
-     * @see #getOffset
-     * @stable ICU 2.0
-     */
-    int32_t following(int32_t position, UErrorCode &status);
-    
-    /**
-     * Returns the last index in the target text at which it matches the 
-     * search pattern. The iterator is adjusted so that its current index 
-     * (as returned by <tt>getOffset</tt>) is the match position if one was 
-     * found.
-     * If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-     * the iterator will be adjusted to the index USEARCH_DONE.
-     * @param  status for errors if it occurs
-     * @return The index of the first match, or <tt>USEARCH_DONE</tt> if 
-     *         there are no matches.
-     * @see #getOffset
-     * @stable ICU 2.0
-     */
-    int32_t last(UErrorCode &status);
-
-    /**
-     * Returns the first index less than <tt>position</tt> at which the string 
-     * text matches the search pattern. The iterator is adjusted so that its 
-     * current index (as returned by <tt>getOffset</tt>) is the match 
-     * position if one was found. If a match is not found, 
-     * <tt>USEARCH_DONE</tt> will be returned and the iterator will be 
-     * adjusted to the index USEARCH_DONE
-     * @param  position where search is to start from. If position is less
-     *             than or greater than the text range for searching, 
-     *          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-     * @param  status for errors if it occurs
-     * @return The character index of the first match preceding 
-     *         <tt>position</tt>, or <tt>USEARCH_DONE</tt> if there are 
-     *         no matches.
-     * @see #getOffset
-     * @stable ICU 2.0
-     */
-    int32_t preceding(int32_t position, UErrorCode &status);
-
-    /**
-     * Returns the index of the next point at which the text matches the
-     * search pattern, starting from the current position
-     * The iterator is adjusted so that its current index (as returned by 
-     * <tt>getOffset</tt>) is the match position if one was found.
-     * If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-     * the iterator will be adjusted to a position after the end of the text 
-     * string.
-     * @param  status for errors if it occurs
-     * @return The index of the next match after the current position,
-     *          or <tt>USEARCH_DONE</tt> if there are no more matches.
-     * @see #getOffset
-     * @stable ICU 2.0
-     */
-     int32_t next(UErrorCode &status);
-
-    /**
-     * Returns the index of the previous point at which the string text 
-     * matches the search pattern, starting at the current position.
-     * The iterator is adjusted so that its current index (as returned by 
-     * <tt>getOffset</tt>) is the match position if one was found.
-     * If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-     * the iterator will be adjusted to the index USEARCH_DONE
-     * @param  status for errors if it occurs
-     * @return The index of the previous match before the current position,
-     *          or <tt>USEARCH_DONE</tt> if there are no more matches.
-     * @see #getOffset
-     * @stable ICU 2.0
-     */
-    int32_t previous(UErrorCode &status);
-
-    /** 
-    * Resets the iteration.
-    * Search will begin at the start of the text string if a forward 
-    * iteration is initiated before a backwards iteration. Otherwise if a 
-    * backwards iteration is initiated before a forwards iteration, the 
-    * search will begin at the end of the text string.    
-    * @stable ICU 2.0
-    */
-    virtual void reset();
-
-protected:
-    // protected data members ---------------------------------------------
-
-    /**
-    * C search data struct
-    * @stable ICU 2.0
-    */
-    USearch *m_search_;
-
-    /**
-    * Break iterator.
-    * Currently the C++ breakiterator does not have getRules etc to reproduce
-    * another in C. Hence we keep the original around and do the verification
-    * at the end of the match. The user is responsible for deleting this
-    * break iterator.
-    * @stable ICU 2.0
-    */
-    BreakIterator *m_breakiterator_;
-    
-    /**
-    * Unicode string version of the search text
-    * @stable ICU 2.0
-    */
-    UnicodeString  m_text_;
-
-    // protected constructors and destructors -----------------------------
-
-    /**
-    * Default constructor.
-    * Initializes data to the default values.
-    * @stable ICU 2.0
-    */
-    SearchIterator();
-
-    /**
-     * Constructor for use by subclasses.
-     * @param text The target text to be searched.
-     * @param breakiter A {@link BreakIterator} that is used to restrict the 
-     *                points at which matches are detected. If 
-     *                <tt>handleNext</tt> or <tt>handlePrev</tt> finds a 
-     *                match, but the match's start or end index is not a 
-     *                boundary as determined by the <tt>BreakIterator</tt>, 
-     *                the match is rejected and <tt>handleNext</tt> or 
-     *                <tt>handlePrev</tt> is called again. If this parameter 
-     *                is <tt>NULL</tt>, no break detection is attempted.  
-     * @see #handleNext
-     * @see #handlePrev
-     * @stable ICU 2.0
-     */
-    SearchIterator(const UnicodeString &text, 
-                         BreakIterator *breakiter = NULL);
-
-    /**
-     * Constructor for use by subclasses.
-     * <p>
-     * Note: No parsing of the text within the <tt>CharacterIterator</tt> 
-     * will be done during searching for this version. The block of text 
-     * in <tt>CharacterIterator</tt> will be used as it is.
-     * @param text The target text to be searched.
-     * @param breakiter A {@link BreakIterator} that is used to restrict the 
-     *                points at which matches are detected. If 
-     *                <tt>handleNext</tt> or <tt>handlePrev</tt> finds a 
-     *                match, but the match's start or end index is not a 
-     *                boundary as determined by the <tt>BreakIterator</tt>, 
-     *                the match is rejected and <tt>handleNext</tt> or 
-     *                <tt>handlePrev</tt> is called again. If this parameter 
-     *                is <tt>NULL</tt>, no break detection is attempted.
-     * @see #handleNext
-     * @see #handlePrev
-     * @stable ICU 2.0
-     */
-    SearchIterator(CharacterIterator &text, BreakIterator *breakiter = NULL);
-
-    // protected methods --------------------------------------------------
-
-    /**
-     * Assignment operator. Sets this iterator to have the same behavior,
-     * and iterate over the same text, as the one passed in.
-     * @param that instance to be copied.
-     * @stable ICU 2.0
-     */
-    SearchIterator & operator=(const SearchIterator &that);
-
-    /**
-     * Abstract method which subclasses override to provide the mechanism
-     * for finding the next match in the target text. This allows different
-     * subclasses to provide different search algorithms.
-     * <p>
-     * If a match is found, the implementation should return the index at
-     * which the match starts and should call 
-     * <tt>setMatchLength</tt> with the number of characters 
-     * in the target text that make up the match. If no match is found, the 
-     * method should return USEARCH_DONE.
-     * <p>
-     * @param position The index in the target text at which the search 
-     *                 should start.
-     * @param status for error codes if it occurs.
-     * @return index at which the match starts, else if match is not found 
-     *         USEARCH_DONE is returned
-     * @see #setMatchLength
-     * @stable ICU 2.0
-     */
-    virtual int32_t handleNext(int32_t position, UErrorCode &status) 
-                                                                         = 0;
-
-    /**
-     * Abstract method which subclasses override to provide the mechanism for
-     * finding the previous match in the target text. This allows different
-     * subclasses to provide different search algorithms.
-     * <p>
-     * If a match is found, the implementation should return the index at
-     * which the match starts and should call 
-     * <tt>setMatchLength</tt> with the number of characters 
-     * in the target text that make up the match. If no match is found, the 
-     * method should return USEARCH_DONE.
-     * <p>
-     * @param position The index in the target text at which the search 
-     *                 should start.
-     * @param status for error codes if it occurs.
-     * @return index at which the match starts, else if match is not found 
-     *         USEARCH_DONE is returned
-     * @see #setMatchLength
-     * @stable ICU 2.0
-     */
-     virtual int32_t handlePrev(int32_t position, UErrorCode &status) 
-                                                                         = 0;
-
-    /**
-     * Sets the length of the currently matched string in the text string to
-     * be searched.
-     * Subclasses' <tt>handleNext</tt> and <tt>handlePrev</tt>
-     * methods should call this when they find a match in the target text.
-     * @param length length of the matched text.
-     * @see #handleNext
-     * @see #handlePrev
-     * @stable ICU 2.0
-     */
-    virtual void setMatchLength(int32_t length);
-
-    /**
-     * Sets the offset of the currently matched string in the text string to
-     * be searched.
-     * Subclasses' <tt>handleNext</tt> and <tt>handlePrev</tt>
-     * methods should call this when they find a match in the target text.
-     * @param position start offset of the matched text.
-     * @see #handleNext
-     * @see #handlePrev
-     * @stable ICU 2.0
-     */
-    virtual void setMatchStart(int32_t position);
-
-    /**
-    * sets match not found 
-    * @stable ICU 2.0
-    */
-    void setMatchNotFound();
-};
-
-inline UBool SearchIterator::operator!=(const SearchIterator &that) const
-{
-   return !operator==(that); 
-}
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
-
diff --git a/source/i18n/unicode/selfmt.h b/source/i18n/unicode/selfmt.h
deleted file mode 100644
index e53f4ce..0000000
--- a/source/i18n/unicode/selfmt.h
+++ /dev/null
@@ -1,377 +0,0 @@
-/********************************************************************
- * COPYRIGHT:
- * Copyright (c) 1997-2010, International Business Machines Corporation and
- * others. All Rights Reserved.
- * Copyright (C) 2010 , Yahoo! Inc.
- ********************************************************************
- *
- * File SELFMT.H
- *
- * Modification History:
- *
- *   Date        Name        Description
- *   11/11/09    kirtig      Finished first cut of implementation.
- ********************************************************************/
-
-#ifndef SELFMT
-#define SELFMT
-
-#include "unicode/utypes.h"
-#include "unicode/numfmt.h"
-
-/**
- * \file
- * \brief C++ API: SelectFormat object
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-U_NAMESPACE_BEGIN
-
-class Hashtable;
-
-/**
-  * <p><code>SelectFormat</code> supports the creation of  internationalized
-  * messages by selecting phrases based on keywords. The pattern  specifies
-  * how to map keywords to phrases and provides a default phrase. The
-  * object provided to the format method is a string that's matched
-  * against the keywords. If there is a match, the corresponding phrase
-  * is selected; otherwise, the default phrase is used.</p>
-  *
-  * <h4>Using <code>SelectFormat</code> for Gender Agreement</h4>
-  *
-  * <p>The main use case for the select format is gender based  inflection.
-  * When names or nouns are inserted into sentences, their gender can  affect pronouns,
-  * verb forms, articles, and adjectives. Special care needs to be
-  * taken for the case where the gender cannot be determined.
-  * The impact varies between languages:</p>
-  * \htmlonly
-  * <ul>
-  * <li>English has three genders, and unknown gender is handled as a  special
-  * case. Names use the gender of the named person (if known), nouns  referring
-  * to people use natural gender, and inanimate objects are usually  neutral.
-  * The gender only affects pronouns: "he", "she", "it", "they".
-  *
-  * <li>German differs from English in that the gender of nouns is  rather
-  * arbitrary, even for nouns referring to people ("M&#x00E4;dchen", girl, is  neutral).
-  * The gender affects pronouns ("er", "sie", "es"), articles ("der",  "die",
-  * "das"), and adjective forms ("guter Mann", "gute Frau", "gutes  M&#x00E4;dchen").
-  *
-  * <li>French has only two genders; as in German the gender of nouns
-  * is rather arbitrary - for sun and moon, the genders
-  * are the opposite of those in German. The gender affects
-  * pronouns ("il", "elle"), articles ("le", "la"),
-  * adjective forms ("bon", "bonne"), and sometimes
-  * verb forms ("all&#x00E9;", "all&#x00E9;e").
-  *
-  * <li>Polish distinguishes five genders (or noun classes),
-  * human masculine, animate non-human masculine, inanimate masculine,
-  * feminine, and neuter.
-  * </ul>
-  * \endhtmlonly
-  * <p>Some other languages have noun classes that are not related to  gender,
-  * but similar in grammatical use.
-  * Some African languages have around 20 noun classes.</p>
-  *
-  * <p>To enable localizers to create sentence patterns that take their
-  * language's gender dependencies into consideration, software has to  provide
-  * information about the gender associated with a noun or name to
-  * <code>MessageFormat</code>.
-  * Two main cases can be distinguished:</p>
-  *
-  * <ul>
-  * <li>For people, natural gender information should be maintained  for each person.
-  * The keywords "male", "female", "mixed" (for groups of people)
-  * and "unknown" are used.
-  *
-  * <li>For nouns, grammatical gender information should be maintained  for
-  * each noun and per language, e.g., in resource bundles.
-  * The keywords "masculine", "feminine", and "neuter" are commonly  used,
-  * but some languages may require other keywords.
-  * </ul>
-  *
-  * <p>The resulting keyword is provided to <code>MessageFormat</code>  as a
-  * parameter separate from the name or noun it's associated with. For  example,
-  * to generate a message such as "Jean went to Paris", three separate  arguments
-  * would be provided: The name of the person as argument 0, the  gender of
-  * the person as argument 1, and the name of the city as argument 2.
-  * The sentence pattern for English, where the gender of the person has
-  * no impact on this simple sentence, would not refer to argument 1  at all:</p>
-  *
-  * <pre>{0} went to {2}.</pre>
-  *
-  * <p>The sentence pattern for French, where the gender of the person affects
-  * the form of the participle, uses a select format based on argument 1:</p>
-  *
-  * \htmlonly<pre>{0} est {1, select, female {all&#x00E9;e} other {all&#x00E9;}} &#x00E0; {2}.</pre>\endhtmlonly
-  *
-  * <p>Patterns can be nested, so that it's possible to handle  interactions of
-  * number and gender where necessary. For example, if the above  sentence should
-  * allow for the names of several people to be inserted, the  following sentence
-  * pattern can be used (with argument 0 the list of people's names,
-  * argument 1 the number of people, argument 2 their combined gender, and
-  * argument 3 the city name):</p>
-  *
-  * \htmlonly
-  * <pre>{0} {1, plural,
-  *                 one {est {2, select, female {all&#x00E9;e} other  {all&#x00E9;}}}
-  *                 other {sont {2, select, female {all&#x00E9;es} other {all&#x00E9;s}}}
-  *          }&#x00E0; {3}.</pre>
-  * \endhtmlonly
-  *
-  * <h4>Patterns and Their Interpretation</h4>
-  *
-  * <p>The <code>SelectFormat</code> pattern text defines the phrase  output
-  * for each user-defined keyword.
-  * The pattern is a sequence of <code><i>keyword</i>{<i>phrase</i>}</code>
-  * clauses.
-  * Each clause assigns the phrase <code><i>phrase</i></code>
-  * to the user-defined <code><i>keyword</i></code>.</p>
-  *
-  * <p>Keywords must match the pattern [a-zA-Z][a-zA-Z0-9_-]*; keywords
-  * that don't match this pattern result in the error code
-  * <code>U_ILLEGAL_CHARACTER</code>.
-  * You always have to define a phrase for the default keyword
-  * <code>other</code>; this phrase is returned when the keyword
-  * provided to
-  * the <code>format</code> method matches no other keyword.
-  * If a pattern does not provide a phrase for <code>other</code>, the  method
-  * it's provided to returns the error  <code>U_DEFAULT_KEYWORD_MISSING</code>.
-  * If a pattern provides more than one phrase for the same keyword, the
-  * error <code>U_DUPLICATE_KEYWORD</code> is returned.
-  * <br>
-  * Spaces between <code><i>keyword</i></code> and
-  * <code>{<i>phrase</i>}</code>  will be ignored; spaces within
-  * <code>{<i>phrase</i>}</code> will be preserved.<p>
-  *
-  * <p>The phrase for a particular select case may contain other message
-  * format patterns. <code>SelectFormat</code> preserves these so that  you
-  * can use the strings produced by <code>SelectFormat</code> with other
-  * formatters. If you are using <code>SelectFormat</code> inside a
-  * <code>MessageFormat</code> pattern, <code>MessageFormat</code> will
-  * automatically evaluate the resulting format pattern.
-  * Thus, curly braces (<code>{</code>, <code>}</code>) are <i>only</i> allowed
-  * in phrases to define a nested format pattern.</p>
-  *
-  * <p>Example:
-  * \htmlonly
-  *
-  * UErrorCode status = U_ZERO_ERROR;
-  * MessageFormat *msgFmt = new MessageFormat(UnicodeString("{0} est  {1, select, female {all&#x00E9;e} other {all&#x00E9;}} &#x00E0; Paris."), Locale("fr"),  status);
-  * if (U_FAILURE(status)) {
-  *       return;
-  * }
-  * FieldPosition ignore(FieldPosition::DONT_CARE);
-  * UnicodeString result;
-  *
-  * char* str1= "Kirti,female";
-  * Formattable args1[] = {"Kirti","female"};
-  * msgFmt->format(args1, 2, result, ignore, status);
-  * cout << "Input is " << str1 << " and result is: " << result << endl;
-  * delete msgFmt;
-  *
-  * \endhtmlonly
-  * </p>
-  *
-  * Produces the output:<br>
-  * \htmlonly
-  * <code>Kirti est all&#x00E9;e &#x00E0; Paris.</code>
-  * \endhtmlonly
-  *
-  * @stable ICU 4.4
-  */
-
-class U_I18N_API SelectFormat : public Format {
-public:
-
-    /**
-     * Creates a new <code>SelectFormat</code> for a given pattern string.
-     * @param  pattern the pattern for this <code>SelectFormat</code>.
-     *                 errors are returned to status if the pattern is invalid.
-     * @param status   output param set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @stable ICU 4.4
-     */
-    SelectFormat(const UnicodeString& pattern, UErrorCode& status);
-
-    /**
-     * copy constructor.
-     * @stable ICU 4.4
-     */
-    SelectFormat(const SelectFormat& other);
-
-    /**
-     * Destructor.
-     * @stable ICU 4.4
-     */
-    virtual ~SelectFormat();
-
-    /**
-     * Sets the pattern used by this select format.
-     * for the keyword rules.
-     * Patterns and their interpretation are specified in the class description.
-     *
-     * @param pattern the pattern for this select format
-     *                errors are returned to status if the pattern is invalid.
-     * @param status  output param set to success/failure code on exit, which
-     *                must not indicate a failure before the function call.
-     * @stable ICU 4.4
-     */
-    void applyPattern(const UnicodeString& pattern, UErrorCode& status);
-
-
-    using Format::format;
-
-    /**
-     * Selects the phrase for  the given keyword
-     *
-     * @param keyword  The keyword that is used to select an alternative.
-     * @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 set to success/failure code on exit, which
-     *                 must not indicate a failure before the function call.
-     * @return         Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    UnicodeString& format(const UnicodeString& keyword,
-                            UnicodeString& appendTo,
-                            FieldPosition& pos,
-                            UErrorCode& status) const;
-
-    /**
-     * Assignment operator
-     *
-     * @param other    the SelectFormat object to copy from.
-     * @stable ICU 4.4
-     */
-    SelectFormat& operator=(const SelectFormat& other);
-
-    /**
-     * Return true if another object is semantically equal to this one.
-     *
-     * @param other    the SelectFormat object to be compared with.
-     * @return         true if other is semantically equal to this.
-     * @stable ICU 4.4
-     */
-    virtual UBool operator==(const Format& other) const;
-
-    /**
-     * Return true if another object is semantically unequal to this one.
-     *
-     * @param other    the SelectFormat object to be compared with.
-     * @return         true if other is semantically unequal to this.
-     * @stable ICU 4.4
-     */
-    virtual UBool operator!=(const Format& other) const;
-
-    /**
-     * Clones this Format object polymorphically.  The caller owns the
-     * result and should delete it when done.
-     * @stable ICU 4.4
-     */
-    virtual Format* clone(void) const;
-
-    /**
-     * Format an object to produce a string.
-     * This method handles keyword strings.
-     * If the Formattable object is not a <code>UnicodeString</code>,
-     * then it returns a failing UErrorCode.
-     *
-     * @param obj       A keyword string that is used to select an alternative.
-     * @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 4.4
-     */
-    UnicodeString& format(const Formattable& obj,
-                         UnicodeString& appendTo,
-                         FieldPosition& pos,
-                         UErrorCode& status) const;
-
-    /**
-     * Returns the pattern from applyPattern() or constructor.
-     *
-     * @param  appendTo  output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @return the UnicodeString with inserted pattern.
-     * @stable ICU 4.4
-     */
-    UnicodeString& toPattern(UnicodeString& appendTo);
-
-    /**
-     * This method is not yet supported by <code>SelectFormat</code>.
-     * <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.
-     * @stable ICU 4.4
-     */
-    virtual void parseObject(const UnicodeString& source,
-                            Formattable& result,
-                            ParsePosition& parse_pos) const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     * @stable ICU 4.4
-     */
-    static UClassID U_EXPORT2 getStaticClassID(void);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     * @stable ICU 4.4
-     */
-    virtual UClassID getDynamicClassID() const;
-
-private:
-    typedef enum classesForSelectFormat{
-        tStartKeyword,
-        tContinueKeyword,
-        tLeftBrace,
-        tRightBrace,
-        tSpace,
-        tOther
-    }CharacterClass;
-
-    UnicodeString pattern;
-    //Hash to store the keyword, phrase pairs.
-    Hashtable  *parsedValuesHash;
-
-    SelectFormat();   // default constructor not implemented.
-    void initHashTable(UErrorCode &status);
-    void cleanHashTable();
-
-    //For the applyPattern , classifies char.s in one of the characterClass.
-    CharacterClass classifyCharacter(UChar ch) const;
-    //Checks if the "other" keyword is present in pattern.
-    UBool checkSufficientDefinition();
-    //Checks if the keyword passed is valid.
-    UBool checkValidKeyword(const UnicodeString& argKeyword) const;
-    void parsingFailure();
-    void copyHashtable(Hashtable *other, UErrorCode& status);
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _SELFMT
-//eof
diff --git a/source/i18n/unicode/simpletz.h b/source/i18n/unicode/simpletz.h
deleted file mode 100644
index 871c960..0000000
--- a/source/i18n/unicode/simpletz.h
+++ /dev/null
@@ -1,927 +0,0 @@
-/*
- ********************************************************************************
- * Copyright (C) 1997-2009, International Business Machines                     *
- * Corporation and others. All Rights Reserved.                                 *
- ********************************************************************************
- *
- * File SIMPLETZ.H
- *
- * Modification History:
- *
- *   Date        Name        Description
- *   04/21/97    aliu        Overhauled header.
- *   08/10/98    stephen     JDK 1.2 sync
- *                           Added setStartRule() / setEndRule() overloads
- *                           Added hasSameRules()
- *   09/02/98    stephen     Added getOffset(monthLen)
- *                           Changed getOffset() to take UErrorCode
- *   07/09/99    stephen     Removed millisPerHour (unused, for HP compiler)
- *   12/02/99    aliu        Added TimeMode and constructor and setStart/EndRule
- *                           methods that take TimeMode. Added to docs.
- ********************************************************************************
- */
-
-#ifndef SIMPLETZ_H
-#define SIMPLETZ_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: SimpleTimeZone is a concrete subclass of TimeZone.
- */
- 
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/basictz.h"
-
-U_NAMESPACE_BEGIN
-
-// forward declaration
-class InitialTimeZoneRule;
-class TimeZoneTransition;
-class AnnualTimeZoneRule;
-
-/**
- * <code>SimpleTimeZone</code> is a concrete subclass of <code>TimeZone</code>
- * that represents a time zone for use with a Gregorian calendar. This
- * class does not handle historical changes.
- * <P>
- * When specifying daylight-savings-time begin and end dates, use a negative value for
- * <code>dayOfWeekInMonth</code> to indicate that <code>SimpleTimeZone</code> should
- * count from the end of the month backwards. For example, if Daylight Savings
- * Time starts or ends at the last Sunday a month, use <code>dayOfWeekInMonth = -1</code>
- * along with <code>dayOfWeek = UCAL_SUNDAY</code> to specify the rule.
- *
- * @see      Calendar
- * @see      GregorianCalendar
- * @see      TimeZone
- * @author   D. Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu
- */
-class U_I18N_API SimpleTimeZone: public BasicTimeZone {
-public:
-
-    /**
-     * TimeMode is used, together with a millisecond offset after
-     * midnight, to specify a rule transition time.  Most rules
-     * transition at a local wall time, that is, according to the
-     * current time in effect, either standard, or DST.  However, some
-     * rules transition at local standard time, and some at a specific
-     * UTC time.  Although it might seem that all times could be
-     * converted to wall time, thus eliminating the need for this
-     * parameter, this is not the case.
-     * @stable ICU 2.0
-     */
-    enum TimeMode {
-        WALL_TIME = 0,
-        STANDARD_TIME,
-        UTC_TIME
-    };
-
-    /**
-     * Copy constructor
-     * @param source the object to be copied.
-     * @stable ICU 2.0
-     */
-    SimpleTimeZone(const SimpleTimeZone& source);
-
-    /**
-     * Default assignment operator
-     * @param right    the object to be copied.
-     * @stable ICU 2.0
-     */
-    SimpleTimeZone& operator=(const SimpleTimeZone& right);
-
-    /**
-     * Destructor
-     * @stable ICU 2.0
-     */
-    virtual ~SimpleTimeZone();
-
-    /**
-     * Returns true if the two TimeZone objects are equal; that is, they have
-     * the same ID, raw GMT offset, and DST rules.
-     *
-     * @param that  The SimpleTimeZone object to be compared with.
-     * @return      True if the given time zone is equal to this time zone; false
-     *              otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const TimeZone& that) const;
-
-    /**
-     * Constructs a SimpleTimeZone with the given raw GMT offset and time zone ID,
-     * and which doesn't observe daylight savings time.  Normally you should use
-     * TimeZone::createInstance() to create a TimeZone instead of creating a
-     * SimpleTimeZone directly with this constructor.
-     *
-     * @param rawOffsetGMT  The given base time zone offset to GMT.
-     * @param ID         The timezone ID which is obtained from
-     *                   TimeZone.getAvailableIDs.
-     * @stable ICU 2.0
-     */
-    SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
-
-    /**
-     * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID,
-     * and times to start and end daylight savings time. To create a TimeZone that
-     * doesn't observe daylight savings time, don't use this constructor; use
-     * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use
-     * TimeZone.createInstance() to create a TimeZone instead of creating a
-     * SimpleTimeZone directly with this constructor.
-     * <P>
-     * Various types of daylight-savings time rules can be specfied by using different
-     * values for startDay and startDayOfWeek and endDay and endDayOfWeek.  For a
-     * complete explanation of how these parameters work, see the documentation for
-     * setStartRule().
-     *
-     * @param rawOffsetGMT      The new SimpleTimeZone's raw GMT offset
-     * @param ID                The new SimpleTimeZone's time zone ID.
-     * @param savingsStartMonth The daylight savings starting month. Month is
-     *                          0-based. eg, 0 for January.
-     * @param savingsStartDayOfWeekInMonth   The daylight savings starting
-     *                          day-of-week-in-month. See setStartRule() for a
-     *                          complete explanation.
-     * @param savingsStartDayOfWeek The daylight savings starting day-of-week.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsStartTime  The daylight savings starting time, expressed as the
-     *                          number of milliseconds after midnight.
-     * @param savingsEndMonth   The daylight savings ending month. Month is
-     *                          0-based. eg, 0 for January.
-     * @param savingsEndDayOfWeekInMonth     The daylight savings ending day-of-week-in-month.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsEndDayOfWeek The daylight savings ending day-of-week.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsEndTime    The daylight savings ending time, expressed as the
-     *                          number of milliseconds after midnight.
-     * @param status            An UErrorCode to receive the status.
-     * @stable ICU 2.0
-     */
-    SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
-        int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
-        int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
-        int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
-        int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
-        UErrorCode& status);
-    /**
-     * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID,
-     * and times to start and end daylight savings time. To create a TimeZone that
-     * doesn't observe daylight savings time, don't use this constructor; use
-     * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use
-     * TimeZone.createInstance() to create a TimeZone instead of creating a
-     * SimpleTimeZone directly with this constructor.
-     * <P>
-     * Various types of daylight-savings time rules can be specfied by using different
-     * values for startDay and startDayOfWeek and endDay and endDayOfWeek.  For a
-     * complete explanation of how these parameters work, see the documentation for
-     * setStartRule().
-     *
-     * @param rawOffsetGMT      The new SimpleTimeZone's raw GMT offset
-     * @param ID                The new SimpleTimeZone's time zone ID.
-     * @param savingsStartMonth The daylight savings starting month. Month is
-     *                          0-based. eg, 0 for January.
-     * @param savingsStartDayOfWeekInMonth   The daylight savings starting
-     *                          day-of-week-in-month. See setStartRule() for a
-     *                          complete explanation.
-     * @param savingsStartDayOfWeek The daylight savings starting day-of-week.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsStartTime  The daylight savings starting time, expressed as the
-     *                          number of milliseconds after midnight.
-     * @param savingsEndMonth   The daylight savings ending month. Month is
-     *                          0-based. eg, 0 for January.
-     * @param savingsEndDayOfWeekInMonth     The daylight savings ending day-of-week-in-month.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsEndDayOfWeek The daylight savings ending day-of-week.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsEndTime    The daylight savings ending time, expressed as the
-     *                          number of milliseconds after midnight.
-     * @param savingsDST        The number of milliseconds added to standard time
-     *                          to get DST time. Default is one hour.
-     * @param status            An UErrorCode to receive the status.
-     * @stable ICU 2.0
-     */
-    SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
-        int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
-        int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
-        int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
-        int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
-        int32_t savingsDST, UErrorCode& status);
-
-    /**
-     * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID,
-     * and times to start and end daylight savings time. To create a TimeZone that
-     * doesn't observe daylight savings time, don't use this constructor; use
-     * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use
-     * TimeZone.createInstance() to create a TimeZone instead of creating a
-     * SimpleTimeZone directly with this constructor.
-     * <P>
-     * Various types of daylight-savings time rules can be specfied by using different
-     * values for startDay and startDayOfWeek and endDay and endDayOfWeek.  For a
-     * complete explanation of how these parameters work, see the documentation for
-     * setStartRule().
-     *
-     * @param rawOffsetGMT      The new SimpleTimeZone's raw GMT offset
-     * @param ID                The new SimpleTimeZone's time zone ID.
-     * @param savingsStartMonth The daylight savings starting month. Month is
-     *                          0-based. eg, 0 for January.
-     * @param savingsStartDayOfWeekInMonth   The daylight savings starting
-     *                          day-of-week-in-month. See setStartRule() for a
-     *                          complete explanation.
-     * @param savingsStartDayOfWeek The daylight savings starting day-of-week.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsStartTime  The daylight savings starting time, expressed as the
-     *                          number of milliseconds after midnight.
-     * @param savingsStartTimeMode Whether the start time is local wall time, local
-     *                          standard time, or UTC time. Default is local wall time.
-     * @param savingsEndMonth   The daylight savings ending month. Month is
-     *                          0-based. eg, 0 for January.
-     * @param savingsEndDayOfWeekInMonth     The daylight savings ending day-of-week-in-month.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsEndDayOfWeek The daylight savings ending day-of-week.
-     *                          See setStartRule() for a complete explanation.
-     * @param savingsEndTime    The daylight savings ending time, expressed as the
-     *                          number of milliseconds after midnight.
-     * @param savingsEndTimeMode Whether the end time is local wall time, local
-     *                          standard time, or UTC time. Default is local wall time.
-     * @param savingsDST        The number of milliseconds added to standard time
-     *                          to get DST time. Default is one hour.
-     * @param status            An UErrorCode to receive the status.
-     * @stable ICU 2.0
-     */
-    SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
-        int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
-        int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
-        TimeMode savingsStartTimeMode,
-        int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
-        int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
-        int32_t savingsDST, UErrorCode& status);
-
-    /**
-     * Sets the daylight savings starting year, that is, the year this time zone began
-     * observing its specified daylight savings time rules.  The time zone is considered
-     * not to observe daylight savings time prior to that year; SimpleTimeZone doesn't
-     * support historical daylight-savings-time rules.
-     * @param year the daylight savings starting year.
-     * @stable ICU 2.0
-     */
-    void setStartYear(int32_t year);
-
-    /**
-     * Sets the daylight savings starting rule. For example, in the U.S., Daylight Savings
-     * Time starts at the second Sunday in March, at 2 AM in standard time.
-     * Therefore, you can set the start rule by calling:
-     * setStartRule(UCAL_MARCH, 2, UCAL_SUNDAY, 2*60*60*1000);
-     * The dayOfWeekInMonth and dayOfWeek parameters together specify how to calculate
-     * the exact starting date.  Their exact meaning depend on their respective signs,
-     * allowing various types of rules to be constructed, as follows:
-     * <ul>
-     *   <li>If both dayOfWeekInMonth and dayOfWeek are positive, they specify the
-     *       day of week in the month (e.g., (2, WEDNESDAY) is the second Wednesday
-     *       of the month).</li>
-     *   <li>If dayOfWeek is positive and dayOfWeekInMonth is negative, they specify
-     *       the day of week in the month counting backward from the end of the month.
-     *       (e.g., (-1, MONDAY) is the last Monday in the month)</li>
-     *   <li>If dayOfWeek is zero and dayOfWeekInMonth is positive, dayOfWeekInMonth
-     *       specifies the day of the month, regardless of what day of the week it is.
-     *       (e.g., (10, 0) is the tenth day of the month)</li>
-     *   <li>If dayOfWeek is zero and dayOfWeekInMonth is negative, dayOfWeekInMonth
-     *       specifies the day of the month counting backward from the end of the
-     *       month, regardless of what day of the week it is (e.g., (-2, 0) is the
-     *       next-to-last day of the month).</li>
-     *   <li>If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the
-     *       first specified day of the week on or after the specfied day of the month.
-     *       (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month
-     *       [or the 15th itself if the 15th is a Sunday].)</li>
-     *   <li>If dayOfWeek and DayOfWeekInMonth are both negative, they specify the
-     *       last specified day of the week on or before the specified day of the month.
-     *       (e.g., (-20, -TUESDAY) is the last Tuesday before the 20th of the month
-     *       [or the 20th itself if the 20th is a Tuesday].)</li>
-     * </ul>
-     * @param month the daylight savings starting month. Month is 0-based.
-     * eg, 0 for January.
-     * @param dayOfWeekInMonth the daylight savings starting
-     * day-of-week-in-month. Please see the member description for an example.
-     * @param dayOfWeek the daylight savings starting day-of-week. Please see
-     * the member description for an example.
-     * @param time the daylight savings starting time. Please see the member
-     * description for an example.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
-                      int32_t time, UErrorCode& status);
-    /**
-     * Sets the daylight savings starting rule. For example, in the U.S., Daylight Savings
-     * Time starts at the second Sunday in March, at 2 AM in standard time.
-     * Therefore, you can set the start rule by calling:
-     * setStartRule(UCAL_MARCH, 2, UCAL_SUNDAY, 2*60*60*1000);
-     * The dayOfWeekInMonth and dayOfWeek parameters together specify how to calculate
-     * the exact starting date.  Their exact meaning depend on their respective signs,
-     * allowing various types of rules to be constructed, as follows:
-     * <ul>
-     *   <li>If both dayOfWeekInMonth and dayOfWeek are positive, they specify the
-     *       day of week in the month (e.g., (2, WEDNESDAY) is the second Wednesday
-     *       of the month).</li>
-     *   <li>If dayOfWeek is positive and dayOfWeekInMonth is negative, they specify
-     *       the day of week in the month counting backward from the end of the month.
-     *       (e.g., (-1, MONDAY) is the last Monday in the month)</li>
-     *   <li>If dayOfWeek is zero and dayOfWeekInMonth is positive, dayOfWeekInMonth
-     *       specifies the day of the month, regardless of what day of the week it is.
-     *       (e.g., (10, 0) is the tenth day of the month)</li>
-     *   <li>If dayOfWeek is zero and dayOfWeekInMonth is negative, dayOfWeekInMonth
-     *       specifies the day of the month counting backward from the end of the
-     *       month, regardless of what day of the week it is (e.g., (-2, 0) is the
-     *       next-to-last day of the month).</li>
-     *   <li>If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the
-     *       first specified day of the week on or after the specfied day of the month.
-     *       (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month
-     *       [or the 15th itself if the 15th is a Sunday].)</li>
-     *   <li>If dayOfWeek and DayOfWeekInMonth are both negative, they specify the
-     *       last specified day of the week on or before the specified day of the month.
-     *       (e.g., (-20, -TUESDAY) is the last Tuesday before the 20th of the month
-     *       [or the 20th itself if the 20th is a Tuesday].)</li>
-     * </ul>
-     * @param month the daylight savings starting month. Month is 0-based.
-     * eg, 0 for January.
-     * @param dayOfWeekInMonth the daylight savings starting
-     * day-of-week-in-month. Please see the member description for an example.
-     * @param dayOfWeek the daylight savings starting day-of-week. Please see
-     * the member description for an example.
-     * @param time the daylight savings starting time. Please see the member
-     * description for an example.
-     * @param mode whether the time is local wall time, local standard time,
-     * or UTC time. Default is local wall time.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
-                      int32_t time, TimeMode mode, UErrorCode& status);
-
-    /**
-     * Sets the DST start rule to a fixed date within a month.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    The date in that month (1-based).
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST takes effect in local wall time, which is
-     *                      standard time in this case.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
-                      UErrorCode& status);
-    /**
-     * Sets the DST start rule to a fixed date within a month.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    The date in that month (1-based).
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST takes effect in local wall time, which is
-     *                      standard time in this case.
-     * @param mode whether the time is local wall time, local standard time,
-     * or UTC time. Default is local wall time.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
-                      TimeMode mode, UErrorCode& status);
-
-    /**
-     * Sets the DST start rule to a weekday before or after a give date within
-     * a month, e.g., the first Monday on or after the 8th.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    A date within that month (1-based).
-     * @param dayOfWeek     The day of the week on which this rule occurs.
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST takes effect in local wall time, which is
-     *                      standard time in this case.
-     * @param after         If true, this rule selects the first dayOfWeek on
-     *                      or after dayOfMonth.  If false, this rule selects
-     *                      the last dayOfWeek on or before dayOfMonth.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
-                      int32_t time, UBool after, UErrorCode& status);
-    /**
-     * Sets the DST start rule to a weekday before or after a give date within
-     * a month, e.g., the first Monday on or after the 8th.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    A date within that month (1-based).
-     * @param dayOfWeek     The day of the week on which this rule occurs.
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST takes effect in local wall time, which is
-     *                      standard time in this case.
-     * @param mode whether the time is local wall time, local standard time,
-     * or UTC time. Default is local wall time.
-     * @param after         If true, this rule selects the first dayOfWeek on
-     *                      or after dayOfMonth.  If false, this rule selects
-     *                      the last dayOfWeek on or before dayOfMonth.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
-                      int32_t time, TimeMode mode, UBool after, UErrorCode& status);
-
-    /**
-     * Sets the daylight savings ending rule. For example, if Daylight
-     * Savings Time ends at the last (-1) Sunday in October, at 2 AM in standard time.
-     * Therefore, you can set the end rule by calling:
-     * <pre>
-     *    setEndRule(UCAL_OCTOBER, -1, UCAL_SUNDAY, 2*60*60*1000);
-     * </pre>
-     * Various other types of rules can be specified by manipulating the dayOfWeek
-     * and dayOfWeekInMonth parameters.  For complete details, see the documentation
-     * for setStartRule().
-     *
-     * @param month the daylight savings ending month. Month is 0-based.
-     * eg, 0 for January.
-     * @param dayOfWeekInMonth the daylight savings ending
-     * day-of-week-in-month. See setStartRule() for a complete explanation.
-     * @param dayOfWeek the daylight savings ending day-of-week. See setStartRule()
-     * for a complete explanation.
-     * @param time the daylight savings ending time. Please see the member
-     * description for an example.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
-                    int32_t time, UErrorCode& status);
-
-    /**
-     * Sets the daylight savings ending rule. For example, if Daylight
-     * Savings Time ends at the last (-1) Sunday in October, at 2 AM in standard time.
-     * Therefore, you can set the end rule by calling:
-     * <pre>
-     *    setEndRule(UCAL_OCTOBER, -1, UCAL_SUNDAY, 2*60*60*1000);
-     * </pre>
-     * Various other types of rules can be specified by manipulating the dayOfWeek
-     * and dayOfWeekInMonth parameters.  For complete details, see the documentation
-     * for setStartRule().
-     *
-     * @param month the daylight savings ending month. Month is 0-based.
-     * eg, 0 for January.
-     * @param dayOfWeekInMonth the daylight savings ending
-     * day-of-week-in-month. See setStartRule() for a complete explanation.
-     * @param dayOfWeek the daylight savings ending day-of-week. See setStartRule()
-     * for a complete explanation.
-     * @param time the daylight savings ending time. Please see the member
-     * description for an example.
-     * @param mode whether the time is local wall time, local standard time,
-     * or UTC time. Default is local wall time.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
-                    int32_t time, TimeMode mode, UErrorCode& status);
-
-    /**
-     * Sets the DST end rule to a fixed date within a month.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    The date in that month (1-based).
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST ends in local wall time, which is daylight
-     *                      time in this case.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
-
-    /**
-     * Sets the DST end rule to a fixed date within a month.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    The date in that month (1-based).
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST ends in local wall time, which is daylight
-     *                      time in this case.
-     * @param mode whether the time is local wall time, local standard time,
-     * or UTC time. Default is local wall time.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
-                    TimeMode mode, UErrorCode& status);
-
-    /**
-     * Sets the DST end rule to a weekday before or after a give date within
-     * a month, e.g., the first Monday on or after the 8th.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    A date within that month (1-based).
-     * @param dayOfWeek     The day of the week on which this rule occurs.
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST ends in local wall time, which is daylight
-     *                      time in this case.
-     * @param after         If true, this rule selects the first dayOfWeek on
-     *                      or after dayOfMonth.  If false, this rule selects
-     *                      the last dayOfWeek on or before dayOfMonth.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
-                    int32_t time, UBool after, UErrorCode& status);
-
-    /**
-     * Sets the DST end rule to a weekday before or after a give date within
-     * a month, e.g., the first Monday on or after the 8th.
-     *
-     * @param month         The month in which this rule occurs (0-based).
-     * @param dayOfMonth    A date within that month (1-based).
-     * @param dayOfWeek     The day of the week on which this rule occurs.
-     * @param time          The time of that day (number of millis after midnight)
-     *                      when DST ends in local wall time, which is daylight
-     *                      time in this case.
-     * @param mode whether the time is local wall time, local standard time,
-     * or UTC time. Default is local wall time.
-     * @param after         If true, this rule selects the first dayOfWeek on
-     *                      or after dayOfMonth.  If false, this rule selects
-     *                      the last dayOfWeek on or before dayOfMonth.
-     * @param status An UErrorCode
-     * @stable ICU 2.0
-     */
-    void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
-                    int32_t time, TimeMode mode, UBool after, UErrorCode& status);
-
-    /**
-     * 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 in GMT, NOT local time.
-     *
-     * @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, UTT (NOT local time).
-     * @param status     An UErrorCode to receive the status.
-     * @return           The offset in milliseconds to add to GMT to get local time.
-     * @stable ICU 2.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.
-     * @param era the era of the given date.
-     * @param year the year in the given date.
-     * @param month the month in the given date.
-     * Month is 0-based. e.g., 0 for January.
-     * @param day the day-in-month of the given date.
-     * @param dayOfWeek the day-of-week of the given date.
-     * @param milliseconds the millis in day in <em>standard</em> local time.
-     * @param monthLength the length of the given month in days.
-     * @param status     An UErrorCode to receive the status.
-     * @return the offset to add *to* GMT to get local time.
-     * @stable ICU 2.0
-     */
-    virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
-                           uint8_t dayOfWeek, int32_t milliseconds,
-                           int32_t monthLength, 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.
-     * @param era the era of the given date.
-     * @param year the year in the given date.
-     * @param month the month in the given date.
-     * Month is 0-based. e.g., 0 for January.
-     * @param day the day-in-month of the given date.
-     * @param dayOfWeek the day-of-week of the given date.
-     * @param milliseconds the millis in day in <em>standard</em> local time.
-     * @param monthLength the length of the given month in days.
-     * @param prevMonthLength length of the previous month in days.
-     * @param status     An UErrorCode to receive the status.
-     * @return the offset to add *to* GMT to get local time.
-     * @stable ICU 2.0
-     */
-    virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
-                              uint8_t dayOfWeek, int32_t milliseconds,
-                              int32_t monthLength, int32_t prevMonthLength,
-                              UErrorCode& status) const;
-
-    /**
-     * Redeclared TimeZone method.  This implementation simply calls
-     * the base class method, which otherwise would be hidden.
-     * @stable ICU 2.8
-     */
-    virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
-                           int32_t& dstOffset, UErrorCode& ec) 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*/;
-
-    /**
-     * 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 2.0
-     */
-    virtual int32_t getRawOffset(void) 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 2.0
-     */
-    virtual void setRawOffset(int32_t offsetMillis);
-
-    /**
-     * Sets the amount of time in ms that the clock is advanced during DST.
-     * @param millisSavedDuringDST the number of milliseconds the time is
-     * advanced with respect to standard time when the daylight savings rules
-     * are in effect. A positive number, typically one hour (3600000).
-     * @param status  An UErrorCode to receive the status.
-     * @stable ICU 2.0
-     */
-    void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
-
-    /**
-     * Returns the amount of time in ms that the clock is advanced during DST.
-     * @return the number of milliseconds the time is
-     * advanced with respect to standard time when the daylight savings rules
-     * are in effect. A positive number, typically one hour (3600000).
-     * @stable ICU 2.0
-     */
-    virtual int32_t getDSTSavings(void) const;
-
-    /**
-     * Queries if this TimeZone uses Daylight Savings Time.
-     *
-     * @return   True if this TimeZone uses Daylight Savings Time; false otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool useDaylightTime(void) const;
-
-    /**
-     * Returns true if the given date is within the period when daylight savings time
-     * is in effect; false otherwise.  If the TimeZone doesn't observe daylight savings
-     * time, this functions always returns false.
-     * 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 date to test.
-     * @param status  An UErrorCode to receive the status.
-     * @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;
-
-    /**
-     * Return true if this zone has the same rules and offset as another zone.
-     * @param other the TimeZone object to be compared with
-     * @return true if the given zone has the same rules and offset as this one
-     * @stable ICU 2.0
-     */
-    UBool hasSameRules(const TimeZone& other) const;
-
-    /**
-     * Clones TimeZone objects polymorphically. Clients are responsible for deleting
-     * the TimeZone object cloned.
-     *
-     * @return   A new copy of this TimeZone object.
-     * @stable ICU 2.0
-     */
-    virtual TimeZone* clone(void) 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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
-        const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
-
-
-public:
-
-    /**
-     * Override TimeZone 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;
-
-    /**
-     * 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);
-
-private:
-    /**
-     * Constants specifying values of startMode and endMode.
-     */
-    enum EMode
-    {
-        DOM_MODE = 1,
-        DOW_IN_MONTH_MODE,
-        DOW_GE_DOM_MODE,
-        DOW_LE_DOM_MODE
-    };
-
-    SimpleTimeZone(); // default constructor not implemented
-
-    /**
-     * Internal construction method.
-     * @param rawOffsetGMT    The new SimpleTimeZone's raw GMT offset
-     * @param startMonth      the month DST starts
-     * @param startDay        the day DST starts
-     * @param startDayOfWeek  the DOW DST starts
-     * @param startTime       the time DST starts
-     * @param startTimeMode   Whether the start time is local wall time, local
-     *                        standard time, or UTC time. Default is local wall time.
-     * @param endMonth        the month DST ends
-     * @param endDay          the day DST ends
-     * @param endDayOfWeek    the DOW DST ends
-     * @param endTime         the time DST ends
-     * @param endTimeMode     Whether the end time is local wall time, local
-     *                        standard time, or UTC time. Default is local wall time.
-     * @param savingsDST      The number of milliseconds added to standard time
-     *                        to get DST time. Default is one hour.
-     * @param status          An UErrorCode to receive the status.
-     */
-    void construct(int32_t rawOffsetGMT,
-                   int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
-                   int32_t startTime, TimeMode startTimeMode,
-                   int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
-                   int32_t endTime, TimeMode endTimeMode,
-                   int32_t dstSavings, UErrorCode& status);
-
-    /**
-     * Compare a given date in the year to a rule. Return 1, 0, or -1, depending
-     * on whether the date is after, equal to, or before the rule date. The
-     * millis are compared directly against the ruleMillis, so any
-     * standard-daylight adjustments must be handled by the caller.
-     *
-     * @return  1 if the date is after the rule date, -1 if the date is before
-     *          the rule date, or 0 if the date is equal to the rule date.
-     */
-    static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
-                                 int8_t dayOfMonth,
-                                 int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
-                                 EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
-                                 int8_t ruleDay, int32_t ruleMillis);
-
-    /**
-     * Given a set of encoded rules in startDay and startDayOfMonth, decode
-     * them and set the startMode appropriately.  Do the same for endDay and
-     * endDayOfMonth.
-     * <P>
-     * Upon entry, the day of week variables may be zero or
-     * negative, in order to indicate special modes.  The day of month
-     * variables may also be negative.
-     * <P>
-     * Upon exit, the mode variables will be
-     * set, and the day of week and day of month variables will be positive.
-     * <P>
-     * This method also recognizes a startDay or endDay of zero as indicating
-     * no DST.
-     */
-    void decodeRules(UErrorCode& status);
-    void decodeStartRule(UErrorCode& status);
-    void decodeEndRule(UErrorCode& status);
-
-    int8_t startMonth, startDay, startDayOfWeek;   // the month, day, DOW, and time DST starts
-    int32_t startTime;
-    TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
-    int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
-    int32_t endTime;
-    int32_t startYear;  // the year these DST rules took effect
-    int32_t rawOffset;  // the TimeZone's raw GMT offset
-    UBool useDaylight; // flag indicating whether this TimeZone uses DST
-    static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
-    EMode startMode, endMode;   // flags indicating what kind of rules the DST rules are
-
-    /**
-     * A positive value indicating the amount of time saved during DST in ms.
-     * Typically one hour; sometimes 30 minutes.
-     */
-    int32_t dstSavings;
-
-    /* Private for BasicTimeZone implementation */
-    void initTransitionRules(UErrorCode& status);
-    void clearTransitionRules(void);
-    void deleteTransitionRules(void);
-    UBool   transitionRulesInitialized;
-    InitialTimeZoneRule*    initialRule;
-    TimeZoneTransition*     firstTransition;
-    AnnualTimeZoneRule*     stdRule;
-    AnnualTimeZoneRule*     dstRule;
-};
-
-inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
-                                         int32_t dayOfWeek,
-                                         int32_t time, UErrorCode& status) {
-    setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
-}
-
-inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
-                                         int32_t time,
-                                         UErrorCode& status) {
-    setStartRule(month, dayOfMonth, time, WALL_TIME, status);
-}
-
-inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
-                                         int32_t dayOfWeek,
-                                         int32_t time, UBool after, UErrorCode& status) {
-    setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
-}
-
-inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
-                                       int32_t dayOfWeek,
-                                       int32_t time, UErrorCode& status) {
-    setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
-}
-
-inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
-                                       int32_t time, UErrorCode& status) {
-    setEndRule(month, dayOfMonth, time, WALL_TIME, status);
-}
-
-inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
-                                       int32_t time, UBool after, UErrorCode& status) {
-    setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
-}
-
-inline void
-SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
-                          int32_t& dstOffsetRef, UErrorCode& ec) const {
-    TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _SIMPLETZ
diff --git a/source/i18n/unicode/smpdtfmt.h b/source/i18n/unicode/smpdtfmt.h
deleted file mode 100644
index 14c91d4..0000000
--- a/source/i18n/unicode/smpdtfmt.h
+++ /dev/null
@@ -1,1207 +0,0 @@
-/*
-* Copyright (C) 1997-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*
-* File SMPDTFMT.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   02/19/97    aliu        Converted from java.
-*   07/09/97    helena      Make ParsePosition into a class.
-*   07/21/98    stephen     Added GMT_PLUS, GMT_MINUS
-*                            Changed setTwoDigitStartDate to set2DigitYearStart
-*                            Changed getTwoDigitStartDate to get2DigitYearStart
-*                            Removed subParseLong
-*                            Removed getZoneIndex (added in DateFormatSymbols)
-*   06/14/99    stephen     Removed fgTimeZoneDataSuffix
-*   10/14/99    aliu        Updated class doc to describe 2-digit year parsing
-*                           {j28 4182066}.
-*******************************************************************************
-*/
-
-#ifndef SMPDTFMT_H
-#define SMPDTFMT_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Format and parse dates in a language-independent manner.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/datefmt.h"
-
-U_NAMESPACE_BEGIN
-
-class DateFormatSymbols;
-class DateFormat;
-class MessageFormat;
-class FieldPositionHandler;
-
-/**
- *
- * SimpleDateFormat is a concrete class for formatting and parsing dates in a
- * language-independent manner. It allows for formatting (millis -> text),
- * parsing (text -> millis), and normalization. Formats/Parses a date or time,
- * which is the standard milliseconds since 24:00 GMT, Jan 1, 1970.
- * <P>
- * Clients are encouraged to create a date-time formatter using DateFormat::getInstance(),
- * getDateInstance(), getDateInstance(), or getDateTimeInstance() rather than
- * explicitly constructing an instance of SimpleDateFormat.  This way, the client
- * is guaranteed to get an appropriate formatting pattern for whatever locale the
- * program is running in.  However, if the client needs something more unusual than
- * the default patterns in the locales, he can construct a SimpleDateFormat directly
- * and give it an appropriate pattern (or use one of the factory methods on DateFormat
- * and modify the pattern after the fact with toPattern() and applyPattern().
- * <P>
- * Date/Time format syntax:
- * <P>
- * The date/time format is specified by means of a string time pattern. In this
- * pattern, all ASCII letters are reserved as pattern letters, which are defined
- * as the following:
- * <pre>
- * \code
- * Symbol   Meaning                 Presentation        Example
- * ------   -------                 ------------        -------
- * G        era designator          (Text)              AD
- * y        year                    (Number)            1996
- * Y        year (week of year)     (Number)            1997
- * u        extended year           (Number)            4601
- * Q        Quarter                 (Text & Number)     Q2 & 02
- * M        month in year           (Text & Number)     July & 07
- * d        day in month            (Number)            10
- * h        hour in am/pm (1~12)    (Number)            12
- * H        hour in day (0~23)      (Number)            0
- * m        minute in hour          (Number)            30
- * s        second in minute        (Number)            55
- * S        fractional second       (Number)            978
- * E        day of week             (Text)              Tuesday
- * e        day of week (local 1~7) (Text & Number)     Tues & 2
- * D        day in year             (Number)            189
- * F        day of week in month    (Number)            2 (2nd Wed in July)
- * w        week in year            (Number)            27
- * W        week in month           (Number)            2
- * a        am/pm marker            (Text)              PM
- * k        hour in day (1~24)      (Number)            24
- * K        hour in am/pm (0~11)    (Number)            0
- * z        time zone               (Time)              Pacific Standard Time
- * Z        time zone (RFC 822)     (Number)            -0800
- * v        time zone (generic)     (Text)              Pacific Time
- * V        time zone (abreviation) (Text)              PT
- * VVVV     time zone (location)    (Text)              United States (Los Angeles)
- * g        Julian day              (Number)            2451334
- * A        milliseconds in day     (Number)            69540000
- * q        stand alone quarter     (Text & Number)     Q2 & 02
- * L        stand alone month       (Text & Number)     July & 07
- * c        stand alone day of week (Text & Number)     Tuesday & 2
- * '        escape for text         (Delimiter)         'Date='
- * ''       single quote            (Literal)           'o''clock'
- * \endcode
- * </pre>
- * The count of pattern letters determine the format.
- * <P>
- * (Text): 4 or more, use full form, &lt;4, use short or abbreviated form if it
- * exists. (e.g., "EEEE" produces "Monday", "EEE" produces "Mon")
- * <P>
- * (Number): the minimum number of digits. Shorter numbers are zero-padded to
- * this amount (e.g. if "m" produces "6", "mm" produces "06"). Year is handled
- * specially; that is, if the count of 'y' is 2, the Year will be truncated to 2 digits.
- * (e.g., if "yyyy" produces "1997", "yy" produces "97".)
- * Unlike other fields, fractional seconds are padded on the right with zero.
- * <P>
- * (Text & Number): 3 or over, use text, otherwise use number.  (e.g., "M" produces "1",
- * "MM" produces "01", "MMM" produces "Jan", and "MMMM" produces "January".)
- * <P>
- * Any characters in the pattern that are not in the ranges of ['a'..'z'] and
- * ['A'..'Z'] will be treated as quoted text. For instance, characters
- * like ':', '.', ' ', '#' and '@' will appear in the resulting time text
- * even they are not embraced within single quotes.
- * <P>
- * A pattern containing any invalid pattern letter will result in a failing
- * UErrorCode result during formatting or parsing.
- * <P>
- * Examples using the US locale:
- * <pre>
- * \code
- *    Format Pattern                         Result
- *    --------------                         -------
- *    "yyyy.MM.dd G 'at' HH:mm:ss vvvv" ->>  1996.07.10 AD at 15:08:56 Pacific Time
- *    "EEE, MMM d, ''yy"                ->>  Wed, July 10, '96
- *    "h:mm a"                          ->>  12:08 PM
- *    "hh 'o''clock' a, zzzz"           ->>  12 o'clock PM, Pacific Daylight Time
- *    "K:mm a, vvv"                     ->>  0:00 PM, PT
- *    "yyyyy.MMMMM.dd GGG hh:mm aaa"    ->>  1996.July.10 AD 12:08 PM
- * \endcode
- * </pre>
- * Code Sample:
- * <pre>
- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST");
- *     pdt->setStartRule( Calendar::APRIL, 1, Calendar::SUNDAY, 2*60*60*1000);
- *     pdt->setEndRule( Calendar::OCTOBER, -1, Calendar::SUNDAY, 2*60*60*1000);
- *
- *     // Format the current time.
- *     SimpleDateFormat* formatter
- *         = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz", success );
- *     GregorianCalendar cal(success);
- *     UDate currentTime_1 = cal.getTime(success);
- *     FieldPosition fp(0);
- *     UnicodeString dateString;
- *     formatter->format( currentTime_1, dateString, fp );
- *     cout << "result: " << dateString << endl;
- *
- *     // Parse the previous string back into a Date.
- *     ParsePosition pp(0);
- *     UDate currentTime_2 = formatter->parse(dateString, pp );
- * \endcode
- * </pre>
- * In the above example, the time value "currentTime_2" obtained from parsing
- * will be equal to currentTime_1. However, they may not be equal if the am/pm
- * marker 'a' is left out from the format pattern while the "hour in am/pm"
- * pattern symbol is used. This information loss can happen when formatting the
- * time in PM.
- *
- * <p>
- * When parsing a date string using the abbreviated year pattern ("y" or "yy"),
- * SimpleDateFormat must interpret the abbreviated year
- * relative to some century.  It does this by adjusting dates to be
- * within 80 years before and 20 years after the time the SimpleDateFormat
- * instance is created. For example, using a pattern of "MM/dd/yy" and a
- * SimpleDateFormat instance created on Jan 1, 1997,  the string
- * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64"
- * would be interpreted as May 4, 1964.
- * During parsing, only strings consisting of exactly two digits, as defined by
- * <code>Unicode::isDigit()</code>, will be parsed into the default century.
- * Any other numeric string, such as a one digit string, a three or more digit
- * string, or a two digit string that isn't all digits (for example, "-1"), is
- * interpreted literally.  So "01/02/3" or "01/02/003" are parsed, using the
- * same pattern, as Jan 2, 3 AD.  Likewise, "01/02/-3" is parsed as Jan 2, 4 BC.
- *
- * <p>
- * If the year pattern has more than two 'y' characters, the year is
- * interpreted literally, regardless of the number of digits.  So using the
- * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
- *
- * <p>
- * When numeric fields abut one another directly, with no intervening delimiter
- * characters, they constitute a run of abutting numeric fields.  Such runs are
- * parsed specially.  For example, the format "HHmmss" parses the input text
- * "123456" to 12:34:56, parses the input text "12345" to 1:23:45, and fails to
- * parse "1234".  In other words, the leftmost field of the run is flexible,
- * while the others keep a fixed width.  If the parse fails anywhere in the run,
- * then the leftmost field is shortened by one character, and the entire run is
- * parsed again. This is repeated until either the parse succeeds or the
- * leftmost field is one character in length.  If the parse still fails at that
- * point, the parse of the run fails.
- *
- * <P>
- * For time zones that have no names, SimpleDateFormat uses strings GMT+hours:minutes or
- * GMT-hours:minutes.
- * <P>
- * The calendar defines what is the first day of the week, the first week of the
- * year, whether hours are zero based or not (0 vs 12 or 24), and the timezone.
- * There is one common number format to handle all the numbers; the digit count
- * is handled programmatically according to the pattern.
- *
- * <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 SimpleDateFormat: public DateFormat {
-public:
-    /**
-     * Construct a SimpleDateFormat using the default pattern for the default
-     * locale.
-     * <P>
-     * [Note:] Not all locales support SimpleDateFormat; for full generality,
-     * use the factory methods in the DateFormat class.
-     * @param status    Output param set to success/failure code.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat(UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat using the given pattern and the default locale.
-     * The locale is used to obtain the symbols used in formatting (e.g., the
-     * names of the months), but not to provide the pattern.
-     * <P>
-     * [Note:] Not all locales support SimpleDateFormat; for full generality,
-     * use the factory methods in the DateFormat class.
-     * @param pattern    the pattern for the format.
-     * @param status     Output param set to success/failure code.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat(const UnicodeString& pattern,
-                     UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat using the given pattern, numbering system override, and the default locale.
-     * The locale is used to obtain the symbols used in formatting (e.g., the
-     * names of the months), but not to provide the pattern.
-     * <P>
-     * A numbering system override is a string containing either the name of a known numbering system,
-     * or a set of field and numbering system pairs that specify which fields are to be formattied with
-     * the alternate numbering system.  For example, to specify that all numeric fields in the specified
-     * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override
-     * as "thai".  To specify that just the year portion of the date be formatted using Hebrew numbering,
-     * use the override string "y=hebrew".  Numbering system overrides can be combined using a semi-colon
-     * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc.
-     *
-     * <P>
-     * [Note:] Not all locales support SimpleDateFormat; for full generality,
-     * use the factory methods in the DateFormat class.
-     * @param pattern    the pattern for the format.
-     * @param override   the override string.
-     * @param status     Output param set to success/failure code.
-     * @stable ICU 4.2
-     */
-    SimpleDateFormat(const UnicodeString& pattern,
-                     const UnicodeString& override,
-                     UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat using the given pattern and locale.
-     * The locale is used to obtain the symbols used in formatting (e.g., the
-     * names of the months), but not to provide the pattern.
-     * <P>
-     * [Note:] Not all locales support SimpleDateFormat; for full generality,
-     * use the factory methods in the DateFormat class.
-     * @param pattern    the pattern for the format.
-     * @param locale     the given locale.
-     * @param status     Output param set to success/failure code.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat(const UnicodeString& pattern,
-                     const Locale& locale,
-                     UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat using the given pattern, numbering system override, and locale.
-     * The locale is used to obtain the symbols used in formatting (e.g., the
-     * names of the months), but not to provide the pattern.
-     * <P>
-     * A numbering system override is a string containing either the name of a known numbering system,
-     * or a set of field and numbering system pairs that specify which fields are to be formattied with
-     * the alternate numbering system.  For example, to specify that all numeric fields in the specified
-     * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override
-     * as "thai".  To specify that just the year portion of the date be formatted using Hebrew numbering,
-     * use the override string "y=hebrew".  Numbering system overrides can be combined using a semi-colon
-     * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc.
-     * <P>
-     * [Note:] Not all locales support SimpleDateFormat; for full generality,
-     * use the factory methods in the DateFormat class.
-     * @param pattern    the pattern for the format.
-     * @param override   the numbering system override.
-     * @param locale     the given locale.
-     * @param status     Output param set to success/failure code.
-     * @stable ICU 4.2
-     */
-    SimpleDateFormat(const UnicodeString& pattern,
-                     const UnicodeString& override,
-                     const Locale& locale,
-                     UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat using the given pattern and locale-specific
-     * symbol data.  The formatter takes ownership of the DateFormatSymbols object;
-     * the caller is no longer responsible for deleting it.
-     * @param pattern           the given pattern for the format.
-     * @param formatDataToAdopt the symbols to be adopted.
-     * @param status            Output param set to success/faulure code.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat(const UnicodeString& pattern,
-                     DateFormatSymbols* formatDataToAdopt,
-                     UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat using the given pattern and locale-specific
-     * symbol data.  The DateFormatSymbols object is NOT adopted; the caller
-     * remains responsible for deleting it.
-     * @param pattern           the given pattern for the format.
-     * @param formatData        the formatting symbols to be use.
-     * @param status            Output param set to success/faulure code.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat(const UnicodeString& pattern,
-                     const DateFormatSymbols& formatData,
-                     UErrorCode& status);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat(const SimpleDateFormat&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 2.0
-     */
-    SimpleDateFormat& operator=(const SimpleDateFormat&);
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~SimpleDateFormat();
-
-    /**
-     * Clone this Format object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @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;
-
-
-    using DateFormat::format;
-
-    /**
-     * Format a date or time, which is the standard millis since 24:00 GMT, Jan
-     * 1, 1970. Overrides DateFormat pure virtual method.
-     * <P>
-     * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
-     * 1996.07.10 AD at 15:08:56 PDT
-     *
-     * @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 pos       The formatting position. On input: an alignment field,
-     *                  if desired. On output: the offsets of the alignment field.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.1
-     */
-    virtual UnicodeString& format(  Calendar& cal,
-                                    UnicodeString& appendTo,
-                                    FieldPosition& pos) const;
-
-    /**
-     * Format a date or time, which is the standard millis since 24:00 GMT, Jan
-     * 1, 1970. Overrides DateFormat pure virtual method.
-     * <P>
-     * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
-     * 1996.07.10 AD at 15:08:56 PDT
-     *
-     * @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 posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.  Field values
-     *                  are defined in UDateFormatField.
-     * @param status    Input/output param set to success/failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& format(  Calendar& cal,
-                                    UnicodeString& appendTo,
-                                    FieldPositionIterator* posIter,
-                                    UErrorCode& status) const;
-
-    /**
-     * Format a date or time, which is the standard millis since 24:00 GMT, Jan
-     * 1, 1970. Overrides DateFormat pure virtual method.
-     * <P>
-     * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
-     * 1996.07.10 AD at 15:08:56 PDT
-     *
-     * @param obj       A Formattable containing the date-time value to be formatted
-     *                  into a date-time string.  If the type of the Formattable
-     *                  is a numeric type, it is treated as if it were an
-     *                  instance of Date.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param pos       The formatting position. On input: an alignment field,
-     *                  if desired. On output: the offsets of the alignment field.
-     * @param status    Input/output param set to success/failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& format(  const Formattable& obj,
-                                    UnicodeString& appendTo,
-                                    FieldPosition& pos,
-                                    UErrorCode& status) const;
-
-    /**
-     * Format a date or time, which is the standard millis since 24:00 GMT, Jan
-     * 1, 1970. Overrides DateFormat pure virtual method.
-     * <P>
-     * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
-     * 1996.07.10 AD at 15:08:56 PDT
-     *
-     * @param obj       A Formattable containing the date-time value to be formatted
-     *                  into a date-time string.  If the type of the Formattable
-     *                  is a numeric type, it is treated as if it were an
-     *                  instance of Date.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param posIter   On return, can be used to iterate over positions
-     *                  of fields generated by this format call.  Field values
-     *                  are defined in UDateFormatField.
-     * @param status    Input/output param set to success/failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    virtual UnicodeString& format(  const Formattable& obj,
-                                    UnicodeString& appendTo,
-                                    FieldPositionIterator* posIter,
-                                    UErrorCode& status) const;
-
-    /**
-     * Redeclared DateFormat method.
-     * @param date          the Date value to be formatted.
-     * @param appendTo      Output parameter to receive result.
-     *                      Result is appended to existing contents.
-     * @param fieldPosition The formatting position. On input: an alignment field,
-     *                      if desired. On output: the offsets of the alignment field.
-     * @return              Reference to 'appendTo' parameter.
-     * @stable ICU 2.1
-     */
-    UnicodeString& format(UDate date,
-                          UnicodeString& appendTo,
-                          FieldPosition& fieldPosition) const;
-
-    /**
-     * Redeclared DateFormat method.
-     * @param date          the Date value to be formatted.
-     * @param appendTo      Output parameter to receive result.
-     *                      Result is appended to existing contents.
-     * @param posIter       On return, can be used to iterate over positions
-     *                      of fields generated by this format call.  Field values
-     *                      are defined in UDateFormatField.
-     * @param status        Input/output param set to success/failure code.
-     * @return              Reference to 'appendTo' parameter.
-     * @stable ICU 4.4
-     */
-    UnicodeString& format(UDate date,
-                          UnicodeString& appendTo,
-                          FieldPositionIterator* posIter,
-                          UErrorCode& status) const;
-
-    /**
-     * Redeclared DateFormat method.
-     * @param obj       Object to be formatted.
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param status    Input/output success/failure code.
-     * @return          Reference to 'appendTo' parameter.
-     * @stable ICU 2.0
-     */
-    UnicodeString& format(const Formattable& obj,
-                          UnicodeString& appendTo,
-                          UErrorCode& status) const;
-
-    /**
-     * Redeclared DateFormat method.
-     * @param date      Date 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(UDate date, UnicodeString& appendTo) 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).
-     *
-     * @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;
-
-    /**
-     * Parse a date/time string starting 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 date/time string. For example, a time text "07/10/96 4:5 PM, PDT"
-     * will be parsed into a UDate that is equivalent to Date(837039928046).
-     * Parsing begins at the beginning of the string and proceeds as far as
-     * possible.  Assuming no parse errors were encountered, this function
-     * doesn't return any information about how much of the string was consumed
-     * by the parsing.  If you need that information, use the version of
-     * parse() that takes a ParsePosition.
-     *
-     * @param text  The date/time string to be parsed
-     * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
-     *              an error value if there was a parse error.
-     * @return      A valid UDate if the input could be parsed.
-     * @stable ICU 2.0
-     */
-    virtual UDate parse( const UnicodeString& text,
-                        UErrorCode& status) const;
-
-    /**
-     * Set the start UDate used to interpret two-digit year strings.
-     * When dates are parsed having 2-digit year strings, they are placed within
-     * a assumed range of 100 years starting on the two digit start date.  For
-     * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or
-     * some other year.  SimpleDateFormat chooses a year so that the resultant
-     * date is on or after the two digit start date and within 100 years of the
-     * two digit start date.
-     * <P>
-     * By default, the two digit start date is set to 80 years before the current
-     * time at which a SimpleDateFormat object is created.
-     * @param d      start UDate used to interpret two-digit year strings.
-     * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
-     *               an error value if there was a parse error.
-     * @stable ICU 2.0
-     */
-    virtual void set2DigitYearStart(UDate d, UErrorCode& status);
-
-    /**
-     * Get the start UDate used to interpret two-digit year strings.
-     * When dates are parsed having 2-digit year strings, they are placed within
-     * a assumed range of 100 years starting on the two digit start date.  For
-     * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or
-     * some other year.  SimpleDateFormat chooses a year so that the resultant
-     * date is on or after the two digit start date and within 100 years of the
-     * two digit start date.
-     * <P>
-     * By default, the two digit start date is set to 80 years before the current
-     * time at which a SimpleDateFormat object is created.
-     * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
-     *               an error value if there was a parse error.
-     * @stable ICU 2.0
-     */
-    UDate get2DigitYearStart(UErrorCode& status) const;
-
-    /**
-     * Return a pattern string describing this date format.
-     * @param result Output param to receive the pattern.
-     * @return       A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& toPattern(UnicodeString& result) const;
-
-    /**
-     * Return a localized pattern string describing this date format.
-     * In most cases, this will return the same thing as toPattern(),
-     * but a locale can specify characters to use in pattern descriptions
-     * in place of the ones described in this class's class documentation.
-     * (Presumably, letters that would be more mnemonic in that locale's
-     * language.)  This function would produce a pattern using those
-     * letters.
-     *
-     * @param result    Receives the localized pattern.
-     * @param status    Output param set to success/failure code on
-     *                  exit. If the pattern is invalid, this will be
-     *                  set to a failure result.
-     * @return          A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
-                                              UErrorCode& status) const;
-
-    /**
-     * Apply the given unlocalized pattern string to this date format.
-     * (i.e., after this call, this formatter will format dates according to
-     * the new pattern)
-     *
-     * @param pattern   The pattern to be applied.
-     * @stable ICU 2.0
-     */
-    virtual void applyPattern(const UnicodeString& pattern);
-
-    /**
-     * Apply the given localized pattern string to this date format.
-     * (see toLocalizedPattern() for more information on localized patterns.)
-     *
-     * @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);
-
-    /**
-     * Gets the date/time formatting symbols (this is an object carrying
-     * the various strings and other symbols used in formatting: e.g., month
-     * names and abbreviations, time zone names, AM/PM strings, etc.)
-     * @return a copy of the date-time formatting data associated
-     * with this date-time formatter.
-     * @stable ICU 2.0
-     */
-    virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
-
-    /**
-     * Set the date/time formatting symbols.  The caller no longer owns the
-     * DateFormatSymbols object and should not delete it after making this call.
-     * @param newFormatSymbols the given date-time formatting symbols to copy.
-     * @stable ICU 2.0
-     */
-    virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
-
-    /**
-     * Set the date/time formatting data.
-     * @param newFormatSymbols the given date-time formatting symbols to copy.
-     * @stable ICU 2.0
-     */
-    virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
-
-    /**
-     * 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 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;
-
-    /**
-     * 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);
-
-    /**
-     * This is for ICU internal use only. Please do not use.
-     * Check whether the 'field' is smaller than all the fields covered in
-     * pattern, return TRUE if it is. The sequence of calendar field,
-     * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,...
-     * @param field    the calendar field need to check against
-     * @return         TRUE if the 'field' is smaller than all the fields
-     *                 covered in pattern. FALSE otherwise.
-     * @internal ICU 4.0
-     */
-    UBool isFieldUnitIgnored(UCalendarDateFields field) const;
-
-
-    /**
-     * This is for ICU internal use only. Please do not use.
-     * Check whether the 'field' is smaller than all the fields covered in
-     * pattern, return TRUE if it is. The sequence of calendar field,
-     * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,...
-     * @param pattern  the pattern to check against
-     * @param field    the calendar field need to check against
-     * @return         TRUE if the 'field' is smaller than all the fields
-     *                 covered in pattern. FALSE otherwise.
-     * @internal ICU 4.0
-     */
-    static UBool isFieldUnitIgnored(const UnicodeString& pattern,
-                                    UCalendarDateFields field);
-
-
-
-    /**
-     * This is for ICU internal use only. Please do not use.
-     * Get the locale of this simple date formatter.
-     * It is used in DateIntervalFormat.
-     *
-     * @return   locale in this simple date formatter
-     * @internal ICU 4.0
-     */
-    const Locale& getSmpFmtLocale(void) const;
-
-
-private:
-    friend class DateFormat;
-
-    void initializeDefaultCentury(void);
-
-    SimpleDateFormat(); // default constructor not implemented
-
-    /**
-     * Used by the DateFormat factory methods to construct a SimpleDateFormat.
-     * @param timeStyle the time style.
-     * @param dateStyle the date style.
-     * @param locale    the given locale.
-     * @param status    Output param set to success/failure code on
-     *                  exit.
-     */
-    SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
-
-    /**
-     * Construct a SimpleDateFormat for the given locale.  If no resource data
-     * is available, create an object of last resort, using hard-coded strings.
-     * This is an internal method, called by DateFormat.  It should never fail.
-     * @param locale    the given locale.
-     * @param status    Output param set to success/failure code on
-     *                  exit.
-     */
-    SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
-
-    /**
-     * Hook called by format(... FieldPosition& ...) and format(...FieldPositionIterator&...)
-     */
-    UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler,
-           UErrorCode& status) const;
-
-    /**
-     * Called by format() to format a single field.
-     *
-     * @param appendTo  Output parameter to receive result.
-     *                  Result is appended to existing contents.
-     * @param ch        The format character we encountered in the pattern.
-     * @param count     Number of characters in the current pattern symbol (e.g.,
-     *                  "yyyy" in the pattern would result in a call to this function
-     *                  with ch equal to 'y' and count equal to 4)
-     * @param handler   Records information about field positions.
-     * @param status    Receives a status code, which will be U_ZERO_ERROR if the operation
-     *                  succeeds.
-     */
-    void subFormat(UnicodeString &appendTo,
-                   UChar ch,
-                   int32_t count,
-                   FieldPositionHandler& handler,
-                   Calendar& cal,
-                   UErrorCode& status) const; // in case of illegal argument
-
-    /**
-     * Used by subFormat() to format a numeric value.
-     * Appends to toAppendTo a string representation of "value"
-     * having a number of digits between "minDigits" and
-     * "maxDigits".  Uses the DateFormat's NumberFormat.
-     *
-     * @param appendTo  Output parameter to receive result.
-     *                  Formatted number is appended to existing contents.
-     * @param value     Value to format.
-     * @param minDigits Minimum number of digits the result should have
-     * @param maxDigits Maximum number of digits the result should have
-     */
-    void zeroPaddingNumber(NumberFormat *currentNumberFormat,
-                           UnicodeString &appendTo,
-                           int32_t value,
-                           int32_t minDigits,
-                           int32_t maxDigits) const;
-
-    /**
-     * Return true if the given format character, occuring count
-     * times, represents a numeric field.
-     */
-    static UBool isNumeric(UChar formatChar, int32_t count);
-
-    /**
-     * initializes fCalendar from parameters.  Returns fCalendar as a convenience.
-     * @param adoptZone  Zone to be adopted, or NULL for TimeZone::createDefault().
-     * @param locale Locale of the calendar
-     * @param status Error code
-     * @return the newly constructed fCalendar
-     */
-    Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
-
-    /**
-     * initializes fSymbols from parameters.
-     * @param locale Locale of the symbols
-     * @param calendar Alias to Calendar that will be used.
-     * @param status Error code
-     */
-    void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
-
-    /**
-     * Called by several of the constructors to load pattern data and formatting symbols
-     * out of a resource bundle and initialize the locale based on it.
-     * @param timeStyle     The time style, as passed to DateFormat::createDateInstance().
-     * @param dateStyle     The date style, as passed to DateFormat::createTimeInstance().
-     * @param locale        The locale to load the patterns from.
-     * @param status        Filled in with an error code if loading the data from the
-     *                      resources fails.
-     */
-    void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
-
-    /**
-     * Called by construct() and the various constructors to set up the SimpleDateFormat's
-     * Calendar and NumberFormat objects.
-     * @param locale    The locale for which we want a Calendar and a NumberFormat.
-     * @param statuc    Filled in with an error code if creating either subobject fails.
-     */
-    void initialize(const Locale& locale, UErrorCode& status);
-
-    /**
-     * Private code-size reduction function used by subParse.
-     * @param text the time text being parsed.
-     * @param start where to start parsing.
-     * @param field the date field being parsed.
-     * @param stringArray the string array to parsed.
-     * @param stringArrayCount the size of the array.
-     * @param cal a Calendar set to the date and time to be formatted
-     *            into a date/time string.
-     * @return the new start position if matching succeeded; a negative number
-     * indicating matching failure, otherwise.
-     */
-    int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
-                        const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
-
-    /**
-     * Private code-size reduction function used by subParse.
-     * @param text the time text being parsed.
-     * @param start where to start parsing.
-     * @param field the date field being parsed.
-     * @param stringArray the string array to parsed.
-     * @param stringArrayCount the size of the array.
-     * @param cal a Calendar set to the date and time to be formatted
-     *            into a date/time string.
-     * @return the new start position if matching succeeded; a negative number
-     * indicating matching failure, otherwise.
-     */
-    int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
-                               const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
-
-    /**
-     * Private member function that converts the parsed date strings into
-     * timeFields. Returns -start (for ParsePosition) if failed.
-     * @param text the time text to be parsed.
-     * @param start where to start parsing.
-     * @param ch the pattern character for the date field text to be parsed.
-     * @param count the count of a pattern character.
-     * @param obeyCount if true then the count is strictly obeyed.
-     * @param ambiguousYear If true then the two-digit year == the default start year.
-     * @param saveHebrewMonth Used to hang onto month until year is known.
-     * @param cal a Calendar set to the date and time to be formatted
-     *            into a date/time string.
-     * @return the new start position if matching succeeded; a negative number
-     * indicating matching failure, otherwise.
-     */
-    int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
-                     UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
-                     int32_t patLoc) const;
-
-    void parseInt(const UnicodeString& text,
-                  Formattable& number,
-                  ParsePosition& pos,
-                  UBool allowNegative,
-                  NumberFormat *fmt) const;
-
-    void parseInt(const UnicodeString& text,
-                  Formattable& number,
-                  int32_t maxDigits,
-                  ParsePosition& pos,
-                  UBool allowNegative,
-                  NumberFormat *fmt) const;
-
-    int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
-                           int32_t patLoc, UBool isNegative) const;
-
-    /**
-     * Translate a pattern, mapping each character in the from string to the
-     * corresponding character in the to string. Return an error if the original
-     * pattern contains an unmapped character, or if a quote is unmatched.
-     * Quoted (single quotes only) material is not translated.
-     * @param originalPattern   the original pattern.
-     * @param translatedPattern Output param to receive the translited pattern.
-     * @param from              the characters to be translited from.
-     * @param to                the characters to be translited to.
-     * @param status            Receives a status code, which will be U_ZERO_ERROR
-     *                          if the operation succeeds.
-     */
-    static void translatePattern(const UnicodeString& originalPattern,
-                                UnicodeString& translatedPattern,
-                                const UnicodeString& from,
-                                const UnicodeString& to,
-                                UErrorCode& status);
-
-    /**
-     * Sets the starting date of the 100-year window that dates with 2-digit years
-     * are considered to fall within.
-     * @param startDate the start date
-     * @param status    Receives a status code, which will be U_ZERO_ERROR
-     *                  if the operation succeeds.
-     */
-    void         parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
-
-    /**
-     * Return the length matched by the given affix, or -1 if none.
-     * Runs of white space in the affix, match runs of white space in
-     * the input.
-     * @param affix pattern string, taken as a literal
-     * @param input input text
-     * @param pos offset into input at which to begin matching
-     * @return length of input that matches, or -1 if match failure
-     */
-    int32_t compareSimpleAffix(const UnicodeString& affix,
-                   const UnicodeString& input,
-                   int32_t pos) const;
-
-    /**
-     * Skip over a run of zero or more isRuleWhiteSpace() characters at
-     * pos in text.
-     */
-    int32_t skipRuleWhiteSpace(const UnicodeString& text, int32_t pos) const;
-
-    /**
-     * Skip over a run of zero or more isUWhiteSpace() characters at pos
-     * in text.
-     */
-    int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
-
-    /**
-     * Private methods for formatting/parsing GMT string
-     */
-    void appendGMT(NumberFormat *currentNumberFormat,UnicodeString &appendTo, Calendar& cal, UErrorCode& status) const;
-    void formatGMTDefault(NumberFormat *currentNumberFormat,UnicodeString &appendTo, int32_t offset) const;
-    int32_t parseGMT(const UnicodeString &text, ParsePosition &pos) const;
-    int32_t parseGMTDefault(const UnicodeString &text, ParsePosition &pos) const;
-    UBool isDefaultGMTFormat() const;
-
-    void formatRFC822TZ(UnicodeString &appendTo, int32_t offset) const;
-
-    /**
-     * Initialize MessageFormat instances used for GMT formatting/parsing
-     */
-    void initGMTFormatters(UErrorCode &status);
-
-    /**
-     * Initialize NumberFormat instances used for numbering system overrides.
-     */
-    void initNumberFormatters(const Locale &locale,UErrorCode &status);
-
-    /**
-     * Get the numbering system to be used for a particular field.
-     */
-     NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
-
-    /**
-     * Parse the given override string and set up structures for number formats
-     */
-    void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
-
-    /**
-     * Used to map pattern characters to Calendar field identifiers.
-     */
-    static const UCalendarDateFields fgPatternIndexToCalendarField[];
-
-    /**
-     * Map index into pattern character string to DateFormat field number
-     */
-    static const UDateFormatField fgPatternIndexToDateFormatField[];
-
-    /**
-     * Used to map Calendar field to field level.
-     * The larger the level, the smaller the field unit.
-     * For example, UCAL_ERA level is 0, UCAL_YEAR level is 10,
-     * UCAL_MONTH level is 20.
-     */
-    static const int32_t fgCalendarFieldToLevel[];
-    static const int32_t fgPatternCharToLevel[];
-
-    /**
-     * The formatting pattern for this formatter.
-     */
-    UnicodeString       fPattern;
-
-    /**
-     * The numbering system override for dates.
-     */
-    UnicodeString       fDateOverride;
-
-    /**
-     * The numbering system override for times.
-     */
-    UnicodeString       fTimeOverride;
-
-
-    /**
-     * The original locale used (for reloading symbols)
-     */
-    Locale              fLocale;
-
-    /**
-     * A pointer to an object containing the strings to use in formatting (e.g.,
-     * month and day names, AM and PM strings, time zone names, etc.)
-     */
-    DateFormatSymbols*  fSymbols;   // Owned
-
-    /**
-     * If dates have ambiguous years, we map them into the century starting
-     * at defaultCenturyStart, which may be any date.  If defaultCenturyStart is
-     * set to SYSTEM_DEFAULT_CENTURY, which it is by default, then the system
-     * values are used.  The instance values defaultCenturyStart and
-     * defaultCenturyStartYear are only used if explicitly set by the user
-     * through the API method parseAmbiguousDatesAsAfter().
-     */
-    UDate                fDefaultCenturyStart;
-
-    /**
-     * See documentation for defaultCenturyStart.
-     */
-    /*transient*/ int32_t   fDefaultCenturyStartYear;
-
-    enum ParsedTZType {
-        TZTYPE_UNK,
-        TZTYPE_STD,
-        TZTYPE_DST
-    };
-
-    ParsedTZType tztype; // here to avoid api change
-
-    typedef struct NSOverride {
-        NumberFormat *nf;
-        int32_t hash;
-        NSOverride *next;
-    } NSOverride;
-
-    /*
-     * MessageFormat instances used for localized GMT format
-     */
-    enum {
-        kGMTNegativeHMS = 0,
-        kGMTNegativeHM,
-        kGMTPositiveHMS,
-        kGMTPositiveHM,
-
-        kNumGMTFormatters
-    };
-    enum {
-        kGMTNegativeHMSMinLenIdx = 0,
-        kGMTPositiveHMSMinLenIdx,
-
-        kNumGMTFormatMinLengths
-    };
-
-    MessageFormat   **fGMTFormatters;
-    // If a GMT hour format has a second field, we need to make sure
-    // the length of input localized GMT string must match the expected
-    // length.  Otherwise, sub DateForamt handling offset format may
-    // unexpectedly success parsing input GMT string without second field.
-    // See #6880 about this issue.
-    // TODO: SimpleDateFormat should provide an option to invalidate
-    //
-    int32_t         fGMTFormatHmsMinLen[kNumGMTFormatMinLengths];
-
-    NumberFormat    **fNumberFormatters;
-
-    NSOverride      *fOverrideList;
-
-    UBool fHaveDefaultCentury;
-};
-
-inline UDate
-SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const
-{
-    return fDefaultCenturyStart;
-}
-
-inline UnicodeString&
-SimpleDateFormat::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 DateFormat::format(obj, appendTo, status);
-}
-
-inline UnicodeString&
-SimpleDateFormat::format(const Formattable& obj,
-                         UnicodeString& appendTo,
-                         FieldPosition& pos,
-                         UErrorCode& status) const
-{
-    // Don't use Format:: - use immediate base class only,
-    // in case immediate base modifies behavior later.
-    return DateFormat::format(obj, appendTo, pos, status);
-}
-
-inline UnicodeString&
-SimpleDateFormat::format(const Formattable& obj,
-                         UnicodeString& appendTo,
-                         FieldPositionIterator* posIter,
-                         UErrorCode& status) const
-{
-    // Don't use Format:: - use immediate base class only,
-    // in case immediate base modifies behavior later.
-    return DateFormat::format(obj, appendTo, posIter, status);
-}
-
-inline UnicodeString&
-SimpleDateFormat::format(UDate date,
-                         UnicodeString& appendTo,
-                         FieldPosition& fieldPosition) const {
-    // Don't use Format:: - use immediate base class only,
-    // in case immediate base modifies behavior later.
-    return DateFormat::format(date, appendTo, fieldPosition);
-}
-
-inline UnicodeString&
-SimpleDateFormat::format(UDate date,
-                         UnicodeString& appendTo,
-                         FieldPositionIterator* posIter,
-                         UErrorCode& status) const {
-    // Don't use Format:: - use immediate base class only,
-    // in case immediate base modifies behavior later.
-    return DateFormat::format(date, appendTo, posIter, status);
-}
-
-inline UnicodeString&
-SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
-    return DateFormat::format(date, appendTo);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // _SMPDTFMT
-//eof
diff --git a/source/i18n/unicode/sortkey.h b/source/i18n/unicode/sortkey.h
deleted file mode 100644
index ef202dd..0000000
--- a/source/i18n/unicode/sortkey.h
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- *****************************************************************************
- * Copyright (C) 1996-2006, International Business Machines Corporation and others.
- * All Rights Reserved.
- *****************************************************************************
- *
- * File sortkey.h
- *
- * Created by: Helena Shih
- *
- * Modification History:
- *
- *  Date         Name          Description
- *
- *  6/20/97     helena      Java class name change.
- *  8/18/97     helena      Added internal API documentation.
- *  6/26/98     erm         Changed to use byte arrays and memcmp.
- *****************************************************************************
- */
-
-#ifndef SORTKEY_H
-#define SORTKEY_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Keys for comparing strings multiple times. 
- */
- 
-#if !UCONFIG_NO_COLLATION
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/coll.h"
-
-U_NAMESPACE_BEGIN
-
-/* forward declaration */
-class RuleBasedCollator;
-
-/**
- *
- * Collation keys are generated by the Collator class.  Use the CollationKey objects
- * instead of Collator to compare strings multiple times.  A CollationKey
- * preprocesses the comparison information from the Collator object to
- * make the comparison faster.  If you are not going to comparing strings
- * multiple times, then using the Collator object is generally faster,
- * since it only processes as much of the string as needed to make a
- * comparison.
- * <p> For example (with strength == tertiary)
- * <p>When comparing "Abernathy" to "Baggins-Smythworthy", Collator
- * only needs to process a couple of characters, while a comparison
- * with CollationKeys will process all of the characters.  On the other hand,
- * if you are doing a sort of a number of fields, it is much faster to use
- * CollationKeys, since you will be comparing strings multiple times.
- * <p>Typical use of CollationKeys are in databases, where you store a CollationKey
- * in a hidden field, and use it for sorting or indexing.
- *
- * <p>Example of use:
- * <pre>
- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     Collator* myCollator = Collator::createInstance(success);
- *     CollationKey* keys = new CollationKey [3];
- *     myCollator->getCollationKey("Tom", keys[0], success );
- *     myCollator->getCollationKey("Dick", keys[1], success );
- *     myCollator->getCollationKey("Harry", keys[2], success );
- *
- *     // Inside body of sort routine, compare keys this way:
- *     CollationKey tmp;
- *     if(keys[0].compareTo( keys[1] ) > 0 ) {
- *         tmp = keys[0]; keys[0] = keys[1]; keys[1] = tmp;
- *     }
- *     //...
- * \endcode
- * </pre>
- * <p>Because Collator::compare()'s algorithm is complex, it is faster to sort
- * long lists of words by retrieving collation keys with Collator::getCollationKey().
- * You can then cache the collation keys and compare them using CollationKey::compareTo().
- * <p>
- * <strong>Note:</strong> <code>Collator</code>s with different Locale,
- * CollationStrength and DecompositionMode settings will return different
- * CollationKeys 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 different CollationKeys
- * for same strings.
- * <p>
-
- * @see          Collator
- * @see          RuleBasedCollator
- * @version      1.3 12/18/96
- * @author       Helena Shih
- * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
- */
-class U_I18N_API CollationKey : public UObject {
-public:
-    /**
-    * This creates an empty collation key based on the null string.  An empty
-    * collation key contains no sorting information.  When comparing two empty
-    * collation keys, the result is Collator::EQUAL.  Comparing empty collation key
-    * with non-empty collation key is always Collator::LESS.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    CollationKey();
-
-
-    /**
-    * Creates a collation key based on the collation key values.
-    * @param values the collation key values
-    * @param count number of collation key values, including trailing nulls.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    CollationKey(const  uint8_t*    values,
-                int32_t     count);
-
-    /**
-    * Copy constructor.
-    * @param other    the object to be copied.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    CollationKey(const CollationKey& other);
-
-    /**
-    * Sort key destructor.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    virtual ~CollationKey();
-
-    /**
-    * Assignment operator
-    * @param other    the object to be copied.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    const   CollationKey&   operator=(const CollationKey& other);
-
-    /**
-    * Compare if two collation keys are the same.
-    * @param source the collation key to compare to.
-    * @return Returns true if two collation keys are equal, false otherwise.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    UBool                   operator==(const CollationKey& source) const;
-
-    /**
-    * Compare if two collation keys are not the same.
-    * @param source the collation key to compare to.
-    * @return Returns TRUE if two collation keys are different, FALSE otherwise.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    UBool                   operator!=(const CollationKey& source) const;
-
-
-    /**
-    * Test to see if the key is in an invalid state. The key will be in an
-    * invalid state if it couldn't allocate memory for some operation.
-    * @return Returns TRUE if the key is in an invalid, FALSE otherwise.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    UBool                   isBogus(void) const;
-
-    /**
-    * Returns a pointer to the collation key values. The storage is owned
-    * by the collation key and the pointer will become invalid if the key
-    * is deleted.
-    * @param count the output parameter of number of collation key values,
-    * including any trailing nulls.
-    * @return a pointer to the collation key values.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    const    uint8_t*       getByteArray(int32_t& count) const;
-
-#ifdef U_USE_COLLATION_KEY_DEPRECATES
-    /**
-    * Extracts the collation key values into a new array. The caller owns
-    * this storage and should free it.
-    * @param count the output parameter of number of collation key values,
-    * including any trailing nulls.
-    * @obsolete ICU 2.6. Use getByteArray instead since this API will be removed in that release.
-    */
-    uint8_t*                toByteArray(int32_t& count) const;
-#endif
-
-    /**
-    * Convenience method which does a string(bit-wise) comparison of the
-    * two collation keys.
-    * @param target target collation key to be compared with
-    * @return Returns Collator::LESS if sourceKey &lt; targetKey,
-    * Collator::GREATER if sourceKey > targetKey and Collator::EQUAL
-    * otherwise.
-    * @deprecated ICU 2.6 use the overload with error code
-    */
-    Collator::EComparisonResult compareTo(const CollationKey& target) const;
-
-    /**
-    * Convenience method which does a string(bit-wise) comparison of the
-    * two collation keys.
-    * @param target target collation key to be compared with
-    * @param status error code
-    * @return Returns UCOL_LESS if sourceKey &lt; targetKey,
-    * UCOL_GREATER if sourceKey > targetKey and UCOL_EQUAL
-    * otherwise.
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    UCollationResult compareTo(const CollationKey& target, UErrorCode &status) const;
-
-    /**
-    * Creates an integer that is unique to the collation key.  NOTE: this
-    * is not the same as String.hashCode.
-    * <p>Example of use:
-    * <pre>
-    * .    UErrorCode status = U_ZERO_ERROR;
-    * .    Collator *myCollation = Collator::createInstance(Locale::US, status);
-    * .    if (U_FAILURE(status)) return;
-    * .    CollationKey key1, key2;
-    * .    UErrorCode status1 = U_ZERO_ERROR, status2 = U_ZERO_ERROR;
-    * .    myCollation->getCollationKey("abc", key1, status1);
-    * .    if (U_FAILURE(status1)) { delete myCollation; return; }
-    * .    myCollation->getCollationKey("ABC", key2, status2);
-    * .    if (U_FAILURE(status2)) { delete myCollation; return; }
-    * .    // key1.hashCode() != key2.hashCode()
-    * </pre>
-    * @return the hash value based on the string's collation order.
-    * @see UnicodeString#hashCode
-    * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-    */
-    int32_t                 hashCode(void) const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-private:
-    /**
-    * Returns an array of the collation key values as 16-bit integers.
-    * The caller owns the storage and must delete it.
-    * @param values Output param of the collation key values.
-    * @param count output parameter of the number of collation key values
-    * @return a pointer to an array of 16-bit collation key values.
-    */
-    void adopt(uint8_t *values, int32_t count);
-
-    /*
-    * Creates a collation key with a string.
-    */
-
-    /**
-    * If this CollationKey has capacity less than newSize,
-    * its internal capacity will be increased to newSize.
-    * @param newSize minimum size this CollationKey has to have
-    * @return this CollationKey
-    */
-    CollationKey&           ensureCapacity(int32_t newSize);
-    /**
-    * Set the CollationKey to a "bogus" or invalid state
-    * @return this CollationKey
-    */
-    CollationKey&           setToBogus(void);
-    /**
-    * Resets this CollationKey to an empty state
-    * @return this CollationKey
-    */
-    CollationKey&           reset(void);
-    
-    /**
-    * Allow private access to RuleBasedCollator
-    */
-    friend  class           RuleBasedCollator;
-    /**
-    * Bogus status
-    */
-    UBool                   fBogus;
-    /**
-    * Size of fBytes used to store the sortkey. i.e. up till the 
-    * null-termination.
-    */
-    int32_t                 fCount;
-    /**
-    * Full size of the fBytes
-    */
-    int32_t                 fCapacity;
-    /**
-    * Unique hash value of this CollationKey
-    */
-    int32_t                 fHashCode;
-    /**
-    * Array to store the sortkey
-    */
-    uint8_t*                fBytes;
-
-};
-
-inline UBool
-CollationKey::operator!=(const CollationKey& other) const
-{
-    return !(*this == other);
-}
-
-inline UBool
-CollationKey::isBogus() const
-{
-    return fBogus;
-}
-
-inline const uint8_t*
-CollationKey::getByteArray(int32_t &count) const
-{
-    count = fCount;
-    return fBytes;
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
diff --git a/source/i18n/unicode/stsearch.h b/source/i18n/unicode/stsearch.h
deleted file mode 100644
index 8499752..0000000
--- a/source/i18n/unicode/stsearch.h
+++ /dev/null
@@ -1,518 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2001-2008 IBM and others. All rights reserved.
-**********************************************************************
-*   Date        Name        Description
-*  03/22/2000   helena      Creation.
-**********************************************************************
-*/
-
-#ifndef STSEARCH_H
-#define STSEARCH_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Service for searching text based on RuleBasedCollator.
- */
- 
-#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/tblcoll.h"
-#include "unicode/coleitr.h"
-#include "unicode/search.h"
-
-U_NAMESPACE_BEGIN
-
-/** 
- *
- * <tt>StringSearch</tt> is a <tt>SearchIterator</tt> that provides
- * language-sensitive text searching based on the comparison rules defined
- * in a {@link RuleBasedCollator} object.
- * StringSearch ensures that language eccentricity can be 
- * handled, e.g. for the German collator, characters &szlig; and SS will be matched 
- * if case is chosen to be ignored.
- * See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
- * "ICU Collation Design Document"</a> for more information.
- * <p> 
- * The algorithm implemented is a modified form of the Boyer Moore's search.
- * For more information  see 
- * <a href="http://icu-project.org/docs/papers/efficient_text_searching_in_java.html">
- * "Efficient Text Searching in Java"</a>, published in <i>Java Report</i> 
- * in February, 1999, for further information on the algorithm.
- * <p>
- * There are 2 match options for selection:<br>
- * Let S' be the sub-string of a text string S between the offsets start and 
- * end <start, end>.
- * <br>
- * A pattern string P matches a text string S at the offsets <start, end> 
- * if
- * <pre> 
- * option 1. Some canonical equivalent of P matches some canonical equivalent 
- *           of S'
- * option 2. P matches S' and if P starts or ends with a combining mark, 
- *           there exists no non-ignorable combining mark before or after S? 
- *           in S respectively. 
- * </pre>
- * Option 2. will be the default.
- * <p>
- * This search has APIs similar to that of other text iteration mechanisms 
- * such as the break iterators in <tt>BreakIterator</tt>. Using these 
- * APIs, it is easy to scan through text looking for all occurances of 
- * a given pattern. This search iterator allows changing of direction by 
- * calling a <tt>reset</tt> followed by a <tt>next</tt> or <tt>previous</tt>. 
- * Though a direction change can occur without calling <tt>reset</tt> first,  
- * this operation comes with some speed penalty.
- * Match results in the forward direction will match the result matches in 
- * the backwards direction in the reverse order
- * <p>
- * <tt>SearchIterator</tt> provides APIs to specify the starting position 
- * within the text string to be searched, e.g. <tt>setOffset</tt>,
- * <tt>preceding</tt> and <tt>following</tt>. Since the 
- * starting position will be set as it is specified, please take note that 
- * there are some danger points which the search may render incorrect 
- * results:
- * <ul>
- * <li> The midst of a substring that requires normalization.
- * <li> If the following match is to be found, the position should not be the
- *      second character which requires to be swapped with the preceding 
- *      character. Vice versa, if the preceding match is to be found, 
- *      position to search from should not be the first character which 
- *      requires to be swapped with the next character. E.g certain Thai and
- *      Lao characters require swapping.
- * <li> If a following pattern match is to be found, any position within a 
- *      contracting sequence except the first will fail. Vice versa if a 
- *      preceding pattern match is to be found, a invalid starting point 
- *      would be any character within a contracting sequence except the last.
- * </ul>
- * <p>
- * A breakiterator can be used if only matches at logical breaks are desired.
- * Using a breakiterator will only give you results that exactly matches the
- * boundaries given by the breakiterator. For instance the pattern "e" will
- * not be found in the string "\u00e9" if a character break iterator is used.
- * <p>
- * Options are provided to handle overlapping matches. 
- * E.g. In English, overlapping matches produces the result 0 and 2 
- * for the pattern "abab" in the text "ababab", where else mutually 
- * exclusive matches only produce the result of 0.
- * <p>
- * Though collator attributes will be taken into consideration while 
- * performing matches, there are no APIs here for setting and getting the 
- * attributes. These attributes can be set by getting the collator
- * from <tt>getCollator</tt> and using the APIs in <tt>coll.h</tt>.
- * Lastly to update StringSearch to the new collator attributes, 
- * reset() has to be called.
- * <p> 
- * Restriction: <br>
- * Currently there are no composite characters that consists of a
- * character with combining class > 0 before a character with combining 
- * class == 0. However, if such a character exists in the future,  
- * StringSearch does not guarantee the results for option 1.
- * <p>
- * Consult the <tt>SearchIterator</tt> documentation for information on
- * and examples of how to use instances of this class to implement text
- * searching.
- * <pre><code>
- * UnicodeString target("The quick brown fox jumps over the lazy dog.");
- * UnicodeString pattern("fox");
- *
- * UErrorCode      error = U_ZERO_ERROR;
- * StringSearch iter(pattern, target, Locale::getUS(), NULL, status);
- * for (int pos = iter.first(error);
- *      pos != USEARCH_DONE; 
- *      pos = iter.next(error))
- * {
- *     printf("Found match at %d pos, length is %d\n", pos, 
- *                                             iter.getMatchLength());
- * }
- * </code></pre>
- * <p>
- * Note, StringSearch is not to be subclassed.
- * </p>
- * @see SearchIterator
- * @see RuleBasedCollator
- * @since ICU 2.0
- */
-
-class U_I18N_API StringSearch : public SearchIterator
-{
-public:
-
-    // public constructors and destructors --------------------------------
-
-    /**
-     * Creating a <tt>StringSearch</tt> instance using the argument locale 
-     * language rule set. A collator will be created in the process, which 
-     * will be owned by this instance and will be deleted during 
-     * destruction
-     * @param pattern The text for which this object will search.
-     * @param text    The text in which to search for the pattern.
-     * @param locale  A locale which defines the language-sensitive 
-     *                comparison rules used to determine whether text in the 
-     *                pattern and target matches. 
-     * @param breakiter A <tt>BreakIterator</tt> object used to constrain 
-     *                the matches that are found. Matches whose start and end 
-     *                indices in the target text are not boundaries as 
-     *                determined by the <tt>BreakIterator</tt> are 
-     *                ignored. If this behavior is not desired, 
-     *                <tt>NULL</tt> can be passed in instead.
-     * @param status  for errors if any. If pattern or text is NULL, or if
-     *               either the length of pattern or text is 0 then an 
-     *               U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    StringSearch(const UnicodeString &pattern, const UnicodeString &text,
-                 const Locale        &locale,       
-                       BreakIterator *breakiter,
-                       UErrorCode    &status);
-
-    /**
-     * Creating a <tt>StringSearch</tt> instance using the argument collator 
-     * language rule set. Note, user retains the ownership of this collator, 
-     * it does not get destroyed during this instance's destruction.
-     * @param pattern The text for which this object will search.
-     * @param text    The text in which to search for the pattern.
-     * @param coll    A <tt>RuleBasedCollator</tt> object which defines 
-     *                the language-sensitive comparison rules used to 
-     *                determine whether text in the pattern and target 
-     *                matches. User is responsible for the clearing of this
-     *                object.
-     * @param breakiter A <tt>BreakIterator</tt> object used to constrain 
-     *                the matches that are found. Matches whose start and end 
-     *                indices in the target text are not boundaries as 
-     *                determined by the <tt>BreakIterator</tt> are 
-     *                ignored. If this behavior is not desired, 
-     *                <tt>NULL</tt> can be passed in instead.
-     * @param status for errors if any. If either the length of pattern or 
-     *               text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    StringSearch(const UnicodeString     &pattern, 
-                 const UnicodeString     &text,
-                       RuleBasedCollator *coll,       
-                       BreakIterator     *breakiter,
-                       UErrorCode        &status);
-
-    /**
-     * Creating a <tt>StringSearch</tt> instance using the argument locale 
-     * language rule set. A collator will be created in the process, which 
-     * will be owned by this instance and will be deleted during 
-     * destruction
-     * <p>
-     * Note: No parsing of the text within the <tt>CharacterIterator</tt> 
-     * will be done during searching for this version. The block of text 
-     * in <tt>CharacterIterator</tt> will be used as it is.
-     * @param pattern The text for which this object will search.
-     * @param text    The text iterator in which to search for the pattern.
-     * @param locale  A locale which defines the language-sensitive 
-     *                comparison rules used to determine whether text in the 
-     *                pattern and target matches. User is responsible for 
-     *                the clearing of this object.
-     * @param breakiter A <tt>BreakIterator</tt> object used to constrain 
-     *                the matches that are found. Matches whose start and end 
-     *                indices in the target text are not boundaries as 
-     *                determined by the <tt>BreakIterator</tt> are 
-     *                ignored. If this behavior is not desired, 
-     *                <tt>NULL</tt> can be passed in instead.
-     * @param status for errors if any. If either the length of pattern or 
-     *               text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    StringSearch(const UnicodeString &pattern, CharacterIterator &text,
-                 const Locale        &locale, 
-                       BreakIterator *breakiter,
-                       UErrorCode    &status);
-
-    /**
-     * Creating a <tt>StringSearch</tt> instance using the argument collator 
-     * language rule set. Note, user retains the ownership of this collator, 
-     * it does not get destroyed during this instance's destruction.
-     * <p>
-     * Note: No parsing of the text within the <tt>CharacterIterator</tt> 
-     * will be done during searching for this version. The block of text 
-     * in <tt>CharacterIterator</tt> will be used as it is.
-     * @param pattern The text for which this object will search.
-     * @param text    The text in which to search for the pattern.
-     * @param coll    A <tt>RuleBasedCollator</tt> object which defines 
-     *                the language-sensitive comparison rules used to 
-     *                determine whether text in the pattern and target 
-     *                matches. User is responsible for the clearing of this
-     *                object.
-     * @param breakiter A <tt>BreakIterator</tt> object used to constrain 
-     *                the matches that are found. Matches whose start and end 
-     *                indices in the target text are not boundaries as 
-     *                determined by the <tt>BreakIterator</tt> are 
-     *                ignored. If this behavior is not desired, 
-     *                <tt>NULL</tt> can be passed in instead.
-     * @param status for errors if any. If either the length of pattern or 
-     *               text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    StringSearch(const UnicodeString     &pattern, CharacterIterator &text,
-                       RuleBasedCollator *coll, 
-                       BreakIterator     *breakiter,
-                       UErrorCode        &status);
-
-    /**
-     * Copy constructor that creates a StringSearch instance with the same 
-     * behavior, and iterating over the same text.
-     * @param that StringSearch instance to be copied.
-     * @stable ICU 2.0
-     */
-    StringSearch(const StringSearch &that);
-
-    /**
-    * Destructor. Cleans up the search iterator data struct.
-    * If a collator is created in the constructor, it will be destroyed here.
-    * @stable ICU 2.0
-    */
-    virtual ~StringSearch(void);
-
-    /**
-     * Clone this object.
-     * Clones can be used concurrently in multiple threads.
-     * If an error occurs, then NULL is returned.
-     * The caller must delete the clone.
-     *
-     * @return a clone of this object
-     *
-     * @see getDynamicClassID
-     * @stable ICU 2.8
-     */
-    StringSearch *clone() const;
-
-    // operator overloading ---------------------------------------------
-
-    /**
-     * Assignment operator. Sets this iterator to have the same behavior,
-     * and iterate over the same text, as the one passed in.
-     * @param that instance to be copied.
-     * @stable ICU 2.0
-     */
-    StringSearch & operator=(const StringSearch &that);
-
-    /**
-     * Equality operator. 
-     * @param that instance to be compared.
-     * @return TRUE if both instances have the same attributes, 
-     *         breakiterators, collators and iterate over the same text 
-     *         while looking for the same pattern.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const SearchIterator &that) const;
-
-    // public get and set methods ----------------------------------------
-
-    /**
-     * Sets the index to point to the given position, and clears any state 
-     * that's affected.
-     * <p>
-     * This method takes the argument index and sets the position in the text 
-     * string accordingly without checking if the index is pointing to a 
-     * valid starting point to begin searching. 
-     * @param position within the text to be set. If position is less
-     *          than or greater than the text range for searching, 
-     *          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-     * @param status for errors if it occurs
-     * @stable ICU 2.0
-     */
-    virtual void setOffset(int32_t position, UErrorCode &status);
-
-    /**
-     * Return the current index in the text being searched.
-     * If the iteration has gone past the end of the text
-     * (or past the beginning for a backwards search), USEARCH_DONE
-     * is returned.
-     * @return current index in the text being searched.
-     * @stable ICU 2.0
-     */
-    virtual int32_t getOffset(void) const;
-
-    /**
-     * Set the target text to be searched.
-     * Text iteration will hence begin at the start of the text string. 
-     * This method is 
-     * useful if you want to re-use an iterator to search for the same 
-     * pattern within a different body of text.
-     * @param text text string to be searched
-     * @param status for errors if any. If the text length is 0 then an 
-     *        U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    virtual void setText(const UnicodeString &text, UErrorCode &status);
-    
-    /**
-     * Set the target text to be searched.
-     * Text iteration will hence begin at the start of the text string. 
-     * This method is 
-     * useful if you want to re-use an iterator to search for the same 
-     * pattern within a different body of text.
-     * Note: No parsing of the text within the <tt>CharacterIterator</tt> 
-     * will be done during searching for this version. The block of text 
-     * in <tt>CharacterIterator</tt> will be used as it is.
-     * @param text text string to be searched
-     * @param status for errors if any. If the text length is 0 then an 
-     *        U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    virtual void setText(CharacterIterator &text, UErrorCode &status);
-
-    /**
-     * Gets the collator used for the language rules.
-     * <p>
-     * Caller may modify but <b>must not</b> delete the <tt>RuleBasedCollator</tt>!
-     * Modifications to this collator will affect the original collator passed in to 
-     * the <tt>StringSearch></tt> constructor or to setCollator, if any.
-     * @return collator used for string search
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator * getCollator() const;
-    
-    /**
-     * Sets the collator used for the language rules. User retains the 
-     * ownership of this collator, thus the responsibility of deletion lies 
-     * with the user. This method causes internal data such as Boyer-Moore 
-     * shift tables to be recalculated, but the iterator's position is 
-     * unchanged.
-     * @param coll    collator 
-     * @param status  for errors if any
-     * @stable ICU 2.0
-     */
-    void setCollator(RuleBasedCollator *coll, UErrorCode &status);
-    
-    /**
-     * Sets the pattern used for matching.
-     * Internal data like the Boyer Moore table will be recalculated, but 
-     * the iterator's position is unchanged.
-     * @param pattern search pattern to be found
-     * @param status for errors if any. If the pattern length is 0 then an 
-     *               U_ILLEGAL_ARGUMENT_ERROR is returned.
-     * @stable ICU 2.0
-     */
-    void setPattern(const UnicodeString &pattern, UErrorCode &status);
-    
-    /**
-     * Gets the search pattern.
-     * @return pattern used for matching
-     * @stable ICU 2.0
-     */
-    const UnicodeString & getPattern() const;
-
-    // public methods ----------------------------------------------------
-
-    /** 
-     * Reset the iteration.
-     * Search will begin at the start of the text string if a forward 
-     * iteration is initiated before a backwards iteration. Otherwise if 
-     * a backwards iteration is initiated before a forwards iteration, the 
-     * search will begin at the end of the text string.
-     * @stable ICU 2.0
-     */
-    virtual void reset();
-
-    /**
-     * Returns a copy of StringSearch with the same behavior, and 
-     * iterating over the same text, as this one. Note that all data will be
-     * replicated, except for the user-specified collator and the
-     * breakiterator.
-     * @return cloned object
-     * @stable ICU 2.0
-     */
-    virtual SearchIterator * safeClone(void) const;
-    
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.2
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-protected:
-
-    // protected method -------------------------------------------------
-
-    /**
-     * Search forward for matching text, starting at a given location.
-     * Clients should not call this method directly; instead they should 
-     * call {@link SearchIterator#next }.
-     * <p>
-     * If a match is found, this method returns the index at which the match
-     * starts and calls {@link SearchIterator#setMatchLength } with the number 
-     * of characters in the target text that make up the match. If no match 
-     * is found, the method returns <tt>USEARCH_DONE</tt>.
-     * <p>
-     * The <tt>StringSearch</tt> is adjusted so that its current index 
-     * (as returned by {@link #getOffset }) is the match position if one was 
-     * found.
-     * If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-     * the <tt>StringSearch</tt> will be adjusted to the index USEARCH_DONE.
-     * @param position The index in the target text at which the search 
-     *                 starts
-     * @param status for errors if any occurs
-     * @return The index at which the matched text in the target starts, or 
-     *         USEARCH_DONE if no match was found.
-     * @stable ICU 2.0
-     */
-    virtual int32_t handleNext(int32_t position, UErrorCode &status);
-
-    /**
-     * Search backward for matching text, starting at a given location.
-     * Clients should not call this method directly; instead they should call
-     * <tt>SearchIterator.previous()</tt>, which this method overrides.
-     * <p>
-     * If a match is found, this method returns the index at which the match
-     * starts and calls {@link SearchIterator#setMatchLength } with the number 
-     * of characters in the target text that make up the match. If no match 
-     * is found, the method returns <tt>USEARCH_DONE</tt>.
-     * <p>
-     * The <tt>StringSearch</tt> is adjusted so that its current index 
-     * (as returned by {@link #getOffset }) is the match position if one was 
-     * found.
-     * If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-     * the <tt>StringSearch</tt> will be adjusted to the index USEARCH_DONE.
-     * @param position The index in the target text at which the search 
-     *                 starts.
-     * @param status for errors if any occurs
-     * @return The index at which the matched text in the target starts, or 
-     *         USEARCH_DONE if no match was found.
-     * @stable ICU 2.0
-     */
-    virtual int32_t handlePrev(int32_t position, UErrorCode &status);
-    
-private :
-    StringSearch(); // default constructor not implemented
-
-    // private data members ----------------------------------------------
-
-    /**
-    * RuleBasedCollator, contains exactly the same UCollator * in m_strsrch_
-    * @stable ICU 2.0
-    */
-    RuleBasedCollator  m_collator_;
-    /**
-    * Pattern text
-    * @stable ICU 2.0
-    */
-    UnicodeString      m_pattern_;
-    /**
-    * String search struct data
-    * @stable ICU 2.0
-    */
-    UStringSearch     *m_strsrch_;
-
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
-
diff --git a/source/i18n/unicode/tblcoll.h b/source/i18n/unicode/tblcoll.h
deleted file mode 100644
index 8e22251..0000000
--- a/source/i18n/unicode/tblcoll.h
+++ /dev/null
@@ -1,966 +0,0 @@
-/*
-******************************************************************************
-* Copyright (C) 1996-2010, International Business Machines Corporation and
-* others. All Rights Reserved.
-******************************************************************************
-*/
-
-/**
- * \file 
- * \brief C++ API: RuleBasedCollator class provides the simple implementation of Collator.
- */
-
-/**
-* File tblcoll.h
-*
-* Created by: Helena Shih
-*
-* Modification History:
-*
-*  Date        Name        Description
-*  2/5/97      aliu        Added streamIn and streamOut methods.  Added
-*                          constructor which reads RuleBasedCollator object from
-*                          a binary file.  Added writeToFile method which streams
-*                          RuleBasedCollator out to a binary file.  The streamIn
-*                          and streamOut methods use istream and ostream objects
-*                          in binary mode.
-*  2/12/97     aliu        Modified to use TableCollationData sub-object to
-*                          hold invariant data.
-*  2/13/97     aliu        Moved several methods into this class from Collation.
-*                          Added a private RuleBasedCollator(Locale&) constructor,
-*                          to be used by Collator::createDefault().  General
-*                          clean up.
-*  2/20/97     helena      Added clone, operator==, operator!=, operator=, and copy
-*                          constructor and getDynamicClassID.
-*  3/5/97      aliu        Modified constructFromFile() to add parameter
-*                          specifying whether or not binary loading is to be
-*                          attempted.  This is required for dynamic rule loading.
-* 05/07/97     helena      Added memory allocation error detection.
-*  6/17/97     helena      Added IDENTICAL strength for compare, changed getRules to
-*                          use MergeCollation::getPattern.
-*  6/20/97     helena      Java class name change.
-*  8/18/97     helena      Added internal API documentation.
-* 09/03/97     helena      Added createCollationKeyValues().
-* 02/10/98     damiba      Added compare with "length" parameter
-* 08/05/98     erm         Synched with 1.2 version of RuleBasedCollator.java
-* 04/23/99     stephen     Removed EDecompositionMode, merged with
-*                          Normalizer::EMode
-* 06/14/99     stephen     Removed kResourceBundleSuffix
-* 11/02/99     helena      Collator performance enhancements.  Eliminates the
-*                          UnicodeString construction and special case for NO_OP.
-* 11/23/99     srl         More performance enhancements. Updates to NormalizerIterator
-*                          internal state management.
-* 12/15/99     aliu        Update to support Thai collation.  Move NormalizerIterator
-*                          to implementation file.
-* 01/29/01     synwee      Modified into a C++ wrapper which calls C API
-*                          (ucol.h)
-*/
-
-#ifndef TBLCOLL_H
-#define TBLCOLL_H
-
-#include "unicode/utypes.h"
-
- 
-#if !UCONFIG_NO_COLLATION
-
-#include "unicode/coll.h"
-#include "unicode/ucol.h"
-#include "unicode/sortkey.h"
-#include "unicode/normlzr.h"
-
-U_NAMESPACE_BEGIN
-
-/**
-* @stable ICU 2.0
-*/
-class StringSearch;
-/**
-* @stable ICU 2.0
-*/
-class CollationElementIterator;
-
-/**
- * The RuleBasedCollator class provides the simple implementation of
- * Collator, using data-driven tables. The user can create a customized
- * table-based collation.
- * <P>
- * <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>
- * RuleBasedCollator is a thin C++ wrapper over the C implementation.
- * <p>
- * For more information about the collation service see 
- * <a href="http://icu-project.org/userguide/Collate_Intro.html">the users guide</a>.
- * <p>
- * Collation service provides correct sorting orders for most locales supported in ICU. 
- * If specific data for a locale is not available, the orders eventually falls back
- * to the <a href="http://www.unicode.org/unicode/reports/tr10/">UCA sort order</a>. 
- * <p>
- * Sort ordering may be customized by providing your own set of rules. For more on
- * this subject see the <a href="http://icu-project.org/userguide/Collate_Customization.html">
- * Collation customization</a> section of the users guide.
- * <p>
- * Note, RuleBasedCollator is not to be subclassed.
- * @see        Collator
- * @version    2.0 11/15/2001
- */
-class U_I18N_API RuleBasedCollator : public Collator
-{
-public:
-
-  // constructor -------------------------------------------------------------
-
-    /**
-     * RuleBasedCollator constructor. This takes the table rules and builds a
-     * collation table out of them. Please see RuleBasedCollator class
-     * description for more details on the collation rule syntax.
-     * @param rules the collation rules to build the collation table from.
-     * @param status reporting a success or an error.
-     * @see Locale
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator(const UnicodeString& rules, UErrorCode& status);
-
-    /**
-     * RuleBasedCollator constructor. This takes the table rules and builds a
-     * collation table out of them. Please see RuleBasedCollator class
-     * description for more details on the collation rule syntax.
-     * @param rules the collation rules to build the collation table from.
-     * @param collationStrength default strength for comparison
-     * @param status reporting a success or an error.
-     * @see Locale
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator(const UnicodeString& rules,
-                       ECollationStrength collationStrength,
-                       UErrorCode& status);
-
-    /**
-     * RuleBasedCollator constructor. This takes the table rules and builds a
-     * collation table out of them. Please see RuleBasedCollator class
-     * description for more details on the collation rule syntax.
-     * @param rules the collation rules to build the collation table from.
-     * @param decompositionMode the normalisation mode
-     * @param status reporting a success or an error.
-     * @see Locale
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator(const UnicodeString& rules,
-                    UColAttributeValue decompositionMode,
-                    UErrorCode& status);
-
-    /**
-     * RuleBasedCollator constructor. This takes the table rules and builds a
-     * collation table out of them. Please see RuleBasedCollator class
-     * description for more details on the collation rule syntax.
-     * @param rules the collation rules to build the collation table from.
-     * @param collationStrength default strength for comparison
-     * @param decompositionMode the normalisation mode
-     * @param status reporting a success or an error.
-     * @see Locale
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator(const UnicodeString& rules,
-                    ECollationStrength collationStrength,
-                    UColAttributeValue decompositionMode,
-                    UErrorCode& status);
-
-    /**
-     * Copy constructor.
-     * @param other the RuleBasedCollator object to be copied
-     * @see Locale
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator(const RuleBasedCollator& other);
-
-
-    /** Opens a collator from a collator binary image created using
-    *  cloneBinary. Binary image used in instantiation of the 
-    *  collator remains owned by the user and should stay around for 
-    *  the lifetime of the collator. The API also takes a base collator
-    *  which usualy should be UCA.
-    *  @param bin binary image owned by the user and required through the
-    *             lifetime of the collator
-    *  @param length size of the image. If negative, the API will try to
-    *                figure out the length of the image
-    *  @param base fallback collator, usually UCA. Base is required to be
-    *              present through the lifetime of the collator. Currently 
-    *              it cannot be NULL.
-    *  @param status for catching errors
-    *  @return newly created collator
-    *  @see cloneBinary
-    *  @stable ICU 3.4
-    */
-    RuleBasedCollator(const uint8_t *bin, int32_t length, 
-                    const RuleBasedCollator *base, 
-                    UErrorCode &status);
-    // destructor --------------------------------------------------------------
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~RuleBasedCollator();
-
-    // public methods ----------------------------------------------------------
-
-    /**
-     * Assignment operator.
-     * @param other other RuleBasedCollator object to compare with.
-     * @stable ICU 2.0
-     */
-    RuleBasedCollator& operator=(const RuleBasedCollator& other);
-
-    /**
-     * Returns true if argument is the same as this object.
-     * @param other Collator object to be compared.
-     * @return true if arguments is the same as this object.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const Collator& other) const;
-
-    /**
-     * Returns true if argument is not the same as this object.
-     * @param other Collator object to be compared
-     * @return returns true if argument is not the same as this object.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator!=(const Collator& other) const;
-
-    /**
-     * Makes a deep copy of the object.
-     * The caller owns the returned object.
-     * @return the cloned object.
-     * @stable ICU 2.0
-     */
-    virtual Collator* clone(void) const;
-
-    /**
-     * Creates a collation element iterator for the source string. The caller of
-     * this method is responsible for the memory management of the return
-     * pointer.
-     * @param source the string over which the CollationElementIterator will
-     *        iterate.
-     * @return the collation element iterator of the source string using this as
-     *         the based Collator.
-     * @stable ICU 2.2
-     */
-    virtual CollationElementIterator* createCollationElementIterator(
-                                           const UnicodeString& source) const;
-
-    /**
-     * Creates a collation element iterator for the source. The caller of this
-     * method is responsible for the memory management of the returned pointer.
-     * @param source the CharacterIterator which produces the characters over
-     *        which the CollationElementItgerator will iterate.
-     * @return the collation element iterator of the source using this as the
-     *         based Collator.
-     * @stable ICU 2.2
-     */
-    virtual CollationElementIterator* createCollationElementIterator(
-                                         const CharacterIterator& source) const;
-
-    /**
-     * Compares a range of character data stored in two different strings based
-     * on the collation rules. Returns information about whether a string is
-     * less than, greater than or equal to another string in a language.
-     * This can be overriden in a subclass.
-     * @param source the source string.
-     * @param target the target string to be compared with the source string.
-     * @return the comparison result. GREATER if the source string is greater
-     *         than the target string, LESS if the source is less than the
-     *         target. Otherwise, returns EQUAL.
-     * @deprecated ICU 2.6 Use 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;
-
-    /**
-     * Compares a range of character data stored in two different strings based
-     * on the collation rules up to the specified length. Returns information
-     * about whether a string is less than, greater than or equal to another
-     * string in a language. This can be overriden in a subclass.
-     * @param source the source string.
-     * @param target the target string to be compared with the source string.
-     * @param length compares up to the specified length
-     * @return the comparison result. GREATER if the source string is greater
-     *         than the target string, LESS if the source is less than the
-     *         target. Otherwise, returns EQUAL.
-     * @deprecated ICU 2.6 Use 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;
-
-    /**
-     * 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.
-     * <p>Example of use:
-     * <pre>
-     * .       UChar ABC[] = {0x41, 0x42, 0x43, 0};  // = "ABC"
-     * .       UChar abc[] = {0x61, 0x62, 0x63, 0};  // = "abc"
-     * .       UErrorCode status = U_ZERO_ERROR;
-     * .       Collator *myCollation =
-     * .                         Collator::createInstance(Locale::US, status);
-     * .       if (U_FAILURE(status)) return;
-     * .       myCollation->setStrength(Collator::PRIMARY);
-     * .       // result would be Collator::EQUAL ("abc" == "ABC")
-     * .       // (no primary difference between "abc" and "ABC")
-     * .       Collator::EComparisonResult result =
-     * .                             myCollation->compare(abc, 3, ABC, 3);
-     * .       myCollation->setStrength(Collator::TERTIARY);
-     * .       // result would be Collator::LESS ("abc" &lt;&lt;&lt; "ABC")
-     * .       // (with tertiary difference between "abc" and "ABC")
-     * .       result =  myCollation->compare(abc, 3, ABC, 3);
-     * </pre>
-     * @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 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;
-
-    /**
-     * Compares two strings using the Collator.
-     * Returns whether the first one compares less than/equal to/greater than
-     * the second one.
-     * This version takes UCharIterator input.
-     * @param sIter the first ("source") string iterator
-     * @param tIter the second ("target") string iterator
-     * @param status ICU status
-     * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER
-     * @stable ICU 4.2
-     */
-    virtual UCollationResult compare(UCharIterator &sIter,
-                                     UCharIterator &tIter,
-                                     UErrorCode &status) const;
-
-    /**
-    * Transforms a specified region of the string into a series of characters
-    * that can be compared with CollationKey.compare. Use a CollationKey when
-    * you need to do repeated comparisions on the same string. For a single
-    * comparison the compare method will be faster.
-    * @param source the source string.
-    * @param key the transformed key of the source string.
-    * @param status the error code status.
-    * @return the transformed key.
-    * @see CollationKey
-    * @deprecated ICU 2.8 Use getSortKey(...) instead
-    */
-    virtual CollationKey& getCollationKey(const UnicodeString& source,
-                                          CollationKey& key,
-                                          UErrorCode& status) const;
-
-    /**
-    * Transforms a specified region of the string into a series of characters
-    * that can be compared with CollationKey.compare. Use a CollationKey when
-    * you need to do repeated comparisions on the same string. For a single
-    * comparison the compare method will be faster.
-    * @param source the source string.
-    * @param sourceLength the length of the source string.
-    * @param key the transformed key of the source string.
-    * @param status the error code status.
-    * @return the transformed key.
-    * @see CollationKey
-    * @deprecated ICU 2.8 Use getSortKey(...) instead
-    */
-    virtual CollationKey& getCollationKey(const UChar *source,
-                                          int32_t sourceLength,
-                                          CollationKey& key,
-                                          UErrorCode& status) const;
-
-    /**
-     * Generates the hash code for the rule-based collation object.
-     * @return the hash code.
-     * @stable ICU 2.0
-     */
-    virtual int32_t hashCode(void) const;
-
-    /**
-    * 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 likely to change in ICU 3.0, based on feedback
-    */
-    virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
-
-    /**
-     * Gets the table-based rules for the collation object.
-     * @return returns the collation rules that the table collation object was
-     *         created from.
-     * @stable ICU 2.0
-     */
-    const UnicodeString& getRules(void) const;
-
-    /**
-     * 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;
-
-    /**
-     * Return the maximum length of any expansion sequences that end with the
-     * specified comparison order.
-     * @param order a collation order returned by previous or next.
-     * @return maximum size of the expansion sequences ending with the collation
-     *         element or 1 if collation element does not occur at the end of
-     *         any expansion sequence
-     * @see CollationElementIterator#getMaxExpansion
-     * @stable ICU 2.0
-     */
-    int32_t getMaxExpansion(int32_t order) const;
-
-    /**
-     * 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:
-     * <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 the binary format of the class's rules. The format is that of
-     * .col files.
-     * @param length Returns the length of the data, in bytes
-     * @param status the error code status.
-     * @return memory, owned by the caller, of size 'length' bytes.
-     * @stable ICU 2.2
-     */
-    uint8_t *cloneRuleData(int32_t &length, UErrorCode &status);
-
-
-    /** Creates a binary image of a collator. This binary image can be stored and 
-    *  later used to instantiate a collator using ucol_openBinary.
-    *  This API supports preflighting.
-    *  @param buffer a fill-in buffer to receive the binary image
-    *  @param capacity capacity of the destination buffer
-    *  @param status for catching errors
-    *  @return size of the image
-    *  @see ucol_openBinary
-    *  @stable ICU 3.4
-    */
-    int32_t cloneBinary(uint8_t *buffer, int32_t capacity, UErrorCode &status);
-
-    /**
-     * Returns current rules. Delta defines whether full rules are returned or
-     * just the tailoring.
-     * @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES.
-     * @param buffer UnicodeString to store the result rules
-     * @stable ICU 2.2
-     */
-    void getRules(UColRuleOption delta, UnicodeString &buffer);
-
-    /**
-     * 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);
-
-    /**
-     * 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);
-
-    /**
-     * 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);
-
-    /**
-     * 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);
-
-    /**
-     * 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);
-
-    /**
-     * 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;
-
-    /**
-     * 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);
-
-    /**
-     * Get the sort key as an array of bytes from an UnicodeString.
-     * @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.0
-     */
-    virtual int32_t getSortKey(const UnicodeString& source, uint8_t *result,
-                               int32_t resultLength) const;
-
-    /**
-     * Get the sort key as an array of bytes from an UChar buffer.
-     * @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;
-
-    /**
-    * 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 RuleBasedCollator#setStrength
-    * @deprecated ICU 2.6 Use getAttribute(UCOL_STRENGTH...) instead
-    */
-    virtual ECollationStrength getStrength(void) const;
-
-    /**
-    * Sets the minimum strength to be used in comparison or transformation.
-    * @see RuleBasedCollator#getStrength
-    * @param newStrength the new comparison level.
-    * @deprecated ICU 2.6 Use setAttribute(UCOL_STRENGTH...) instead
-    */
-    virtual void setStrength(ECollationStrength newStrength);
-
-    /**
-     * Get the current reordering of scripts (if one has been set).
-     * @param dest The array to fill with the script ordering.
-     * @param destCapacity The length of dest. 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 (pre-flighting).
-     * @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 array of the script ordering.
-     * @see ucol_getReorderCodes
-     * @internal 
-     */
-    virtual int32_t getReorderCodes(int32_t* dest,
-                                    int32_t destCapacity,
-                                    UErrorCode& status) const;
-
-    /**
-     * Set the ordering of scripts for this collator.
-     * @param reorderCodes An array of script codes in the new order.
-     * @param reorderCodesLength The length of reorderCodes.
-     * @see ucol_setReorderCodes
-     * @internal 
-     */
-    virtual void setReorderCodes(const int32_t* reorderCodes,
-                                 int32_t reorderCodesLength,
-                                 UErrorCode& status);
-
-
-private:
-
-    // private static constants -----------------------------------------------
-
-    enum {
-        /* need look up in .commit() */
-        CHARINDEX = 0x70000000,
-        /* Expand index follows */
-        EXPANDCHARINDEX = 0x7E000000,
-        /* contract indexes follows */
-        CONTRACTCHARINDEX = 0x7F000000,
-        /* unmapped character values */
-        UNMAPPED = 0xFFFFFFFF,
-        /* primary strength increment */
-        PRIMARYORDERINCREMENT = 0x00010000,
-        /* secondary strength increment */
-        SECONDARYORDERINCREMENT = 0x00000100,
-        /* tertiary strength increment */
-        TERTIARYORDERINCREMENT = 0x00000001,
-        /* mask off anything but primary order */
-        PRIMARYORDERMASK = 0xffff0000,
-        /* mask off anything but secondary order */
-        SECONDARYORDERMASK = 0x0000ff00,
-        /* mask off anything but tertiary order */
-        TERTIARYORDERMASK = 0x000000ff,
-        /* mask off ignorable char order */
-        IGNORABLEMASK = 0x0000ffff,
-        /* use only the primary difference */
-        PRIMARYDIFFERENCEONLY = 0xffff0000,
-        /* use only the primary and secondary difference */
-        SECONDARYDIFFERENCEONLY = 0xffffff00,
-        /* primary order shift */
-        PRIMARYORDERSHIFT = 16,
-        /* secondary order shift */
-        SECONDARYORDERSHIFT = 8,
-        /* starting value for collation elements */
-        COLELEMENTSTART = 0x02020202,
-        /* testing mask for primary low element */
-        PRIMARYLOWZEROMASK = 0x00FF0000,
-        /* reseting value for secondaries and tertiaries */
-        RESETSECONDARYTERTIARY = 0x00000202,
-        /* reseting value for tertiaries */
-        RESETTERTIARY = 0x00000002,
-
-        PRIMIGNORABLE = 0x0202
-    };
-
-    // private data members ---------------------------------------------------
-
-    UBool dataIsOwned;
-
-    UBool isWriteThroughAlias;
-
-    /**
-    * c struct for collation. All initialisation for it has to be done through
-    * setUCollator().
-    */
-    UCollator *ucollator;
-
-    /**
-    * Rule UnicodeString
-    */
-    UnicodeString urulestring;
-
-    // friend classes --------------------------------------------------------
-
-    /**
-    * Used to iterate over collation elements in a character source.
-    */
-    friend class CollationElementIterator;
-
-    /**
-    * Collator ONLY needs access to RuleBasedCollator(const Locale&,
-    *                                                       UErrorCode&)
-    */
-    friend class Collator;
-
-    /**
-    * Searching over collation elements in a character source
-    */
-    friend class StringSearch;
-
-    // private constructors --------------------------------------------------
-
-    /**
-     * Default constructor
-     */
-    RuleBasedCollator();
-
-    /**
-     * RuleBasedCollator constructor. This constructor takes a locale. The
-     * only caller of this class should be Collator::createInstance(). If
-     * createInstance() happens to know that the requested locale's collation is
-     * implemented as a RuleBasedCollator, it can then call this constructor.
-     * OTHERWISE IT SHOULDN'T, since this constructor ALWAYS RETURNS A VALID
-     * COLLATION TABLE. It does this by falling back to defaults.
-     * @param desiredLocale locale used
-     * @param status error code status
-     */
-    RuleBasedCollator(const Locale& desiredLocale, UErrorCode& status);
-
-    /**
-     * common constructor implementation
-     *
-     * @param rules the collation rules to build the collation table from.
-     * @param collationStrength default strength for comparison
-     * @param decompositionMode the normalisation mode
-     * @param status reporting a success or an error.
-     */
-    void
-    construct(const UnicodeString& rules,
-              UColAttributeValue collationStrength,
-              UColAttributeValue decompositionMode,
-              UErrorCode& status);
-
-    // private methods -------------------------------------------------------
-
-    /**
-    * Creates the c struct for ucollator
-    * @param locale desired locale
-    * @param status error status
-    */
-    void setUCollator(const Locale& locale, UErrorCode& status);
-
-    /**
-    * Creates the c struct for ucollator
-    * @param locale desired locale name
-    * @param status error status
-    */
-    void setUCollator(const char* locale, UErrorCode& status);
-
-    /**
-    * Creates the c struct for ucollator. This used internally by StringSearch.
-    * Hence the responsibility of cleaning up the ucollator is not done by
-    * this RuleBasedCollator. The isDataOwned flag is set to FALSE.
-    * @param collator new ucollator data
-    * @param rules corresponding collation rules
-    */
-    void setUCollator(UCollator *collator);
-
-public:
-    /**
-    * Get UCollator data struct. Used only by StringSearch & intltest.
-    * @return UCollator data struct
-    * @internal
-    */
-    const UCollator * getUCollator();
-
-protected:
-   /**
-    * Used internally by registraton to define the requested and valid locales.
-    * @param requestedLocale the requsted locale
-    * @param validLocale the valid locale
-    * @param actualLocale the actual locale
-    * @internal
-    */
-    virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
-
-private:
-
-    // if not owned and not a write through alias, copy the ucollator
-    void checkOwned(void);
-
-    // utility to init rule string used by checkOwned and construct
-    void setRuleStringFromCollator();
-
-    /**
-    * Converts C's UCollationResult to EComparisonResult
-    * @param result member of the enum UComparisonResult
-    * @return EComparisonResult equivalent of UCollationResult
-    * @deprecated ICU 2.6. We will not need it.
-    */
-    Collator::EComparisonResult getEComparisonResult(
-                                            const UCollationResult &result) const;
-
-    /**
-    * Converts C's UCollationStrength to ECollationStrength
-    * @param strength member of the enum UCollationStrength
-    * @return ECollationStrength equivalent of UCollationStrength
-    */
-    Collator::ECollationStrength getECollationStrength(
-                                        const UCollationStrength &strength) const;
-
-    /**
-    * Converts C++'s ECollationStrength to UCollationStrength
-    * @param strength member of the enum ECollationStrength
-    * @return UCollationStrength equivalent of ECollationStrength
-    */
-    UCollationStrength getUCollationStrength(
-      const Collator::ECollationStrength &strength) const;
-};
-
-// inline method implementation ---------------------------------------------
-
-inline void RuleBasedCollator::setUCollator(const Locale &locale,
-                                               UErrorCode &status)
-{
-    setUCollator(locale.getName(), status);
-}
-
-
-inline void RuleBasedCollator::setUCollator(UCollator     *collator)
-{
-
-    if (ucollator && dataIsOwned) {
-        ucol_close(ucollator);
-    }
-    ucollator   = collator;
-    dataIsOwned = FALSE;
-    isWriteThroughAlias = TRUE;
-    setRuleStringFromCollator();
-}
-
-inline const UCollator * RuleBasedCollator::getUCollator()
-{
-    return ucollator;
-}
-
-inline Collator::EComparisonResult RuleBasedCollator::getEComparisonResult(
-                                           const UCollationResult &result) const
-{
-    switch (result)
-    {
-    case UCOL_LESS :
-        return Collator::LESS;
-    case UCOL_EQUAL :
-        return Collator::EQUAL;
-    default :
-        return Collator::GREATER;
-    }
-}
-
-inline Collator::ECollationStrength RuleBasedCollator::getECollationStrength(
-                                       const UCollationStrength &strength) const
-{
-    switch (strength)
-    {
-    case UCOL_PRIMARY :
-        return Collator::PRIMARY;
-    case UCOL_SECONDARY :
-        return Collator::SECONDARY;
-    case UCOL_TERTIARY :
-        return Collator::TERTIARY;
-    case UCOL_QUATERNARY :
-        return Collator::QUATERNARY;
-    default :
-        return Collator::IDENTICAL;
-    }
-}
-
-inline UCollationStrength RuleBasedCollator::getUCollationStrength(
-                             const Collator::ECollationStrength &strength) const
-{
-    switch (strength)
-    {
-    case Collator::PRIMARY :
-        return UCOL_PRIMARY;
-    case Collator::SECONDARY :
-        return UCOL_SECONDARY;
-    case Collator::TERTIARY :
-        return UCOL_TERTIARY;
-    case Collator::QUATERNARY :
-        return UCOL_QUATERNARY;
-    default :
-        return UCOL_IDENTICAL;
-    }
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
diff --git a/source/i18n/unicode/timezone.h b/source/i18n/unicode/timezone.h
deleted file mode 100644
index a06d33d..0000000
--- a/source/i18n/unicode/timezone.h
+++ /dev/null
@@ -1,777 +0,0 @@
-/*************************************************************************
-* Copyright (c) 1997-2010, International Business Machines Corporation
-* and others. All Rights Reserved.
-**************************************************************************
-*
-* File TIMEZONE.H
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   04/21/97    aliu        Overhauled header.
-*   07/09/97    helena      Changed createInstance to createDefault.
-*   08/06/97    aliu        Removed dependency on internal header for Hashtable.
-*   08/10/98    stephen        Changed getDisplayName() API conventions to match
-*   08/19/98    stephen        Changed createTimeZone() to never return 0
-*   09/02/98    stephen        Sync to JDK 1.2 8/31
-*                            - Added getOffset(... monthlen ...)
-*                            - Added hasSameRules()
-*   09/15/98    stephen        Added getStaticClassID
-*   12/03/99    aliu        Moved data out of static table into icudata.dll.
-*                           Hashtable replaced by new static data structures.
-*   12/14/99    aliu        Made GMT public.
-*   08/15/01    grhoten     Made GMT private and added the getGMT() function
-**************************************************************************
-*/
-
-#ifndef TIMEZONE_H
-#define TIMEZONE_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: TimeZone object
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/ures.h"
-
-U_NAMESPACE_BEGIN
-
-class StringEnumeration;
-
-/**
- *
- * <code>TimeZone</code> represents a time zone offset, and also figures out daylight
- * savings.
- *
- * <p>
- * Typically, you get a <code>TimeZone</code> using <code>createDefault</code>
- * which creates a <code>TimeZone</code> based on the time zone where the program
- * is running. For example, for a program running in Japan, <code>createDefault</code>
- * creates a <code>TimeZone</code> object based on Japanese Standard Time.
- *
- * <p>
- * You can also get a <code>TimeZone</code> using <code>createTimeZone</code> along
- * with a time zone ID. For instance, the time zone ID for the US Pacific
- * Time zone is "America/Los_Angeles". So, you can get a Pacific Time <code>TimeZone</code> object
- * with:
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * TimeZone *tz = TimeZone::createTimeZone("America/Los_Angeles");
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- * You can use <code>getAvailableIDs</code> method to iterate through
- * all the supported time zone IDs. You can then choose a
- * supported ID to get a <code>TimeZone</code>.
- * If the time zone you want is not represented by one of the
- * supported IDs, then you can create a custom time zone ID with
- * the following syntax:
- *
- * \htmlonly<blockquote>\endhtmlonly
- * <pre>
- * GMT[+|-]hh[[:]mm]
- * </pre>
- * \htmlonly</blockquote>\endhtmlonly
- *
- * For example, you might specify GMT+14:00 as a custom
- * time zone ID.  The <code>TimeZone</code> that is returned
- * when you specify a custom time zone ID does not include
- * daylight savings time.
- *
- * TimeZone is an abstract class representing a time zone.  A TimeZone is needed for
- * Calendar to produce local time for a particular time zone.  A TimeZone comprises
- * three basic pieces of information:
- * <ul>
- *    <li>A time zone offset; that, is the number of milliseconds to add or subtract
- *      from a time expressed in terms of GMT to convert it to the same time in that
- *      time zone (without taking daylight savings time into account).</li>
- *    <li>Logic necessary to take daylight savings time into account if daylight savings
- *      time is observed in that time zone (e.g., the days and hours on which daylight
- *      savings time begins and ends).</li>
- *    <li>An ID.  This is a text string that uniquely identifies the time zone.</li>
- * </ul>
- *
- * (Only the ID is actually implemented in TimeZone; subclasses of TimeZone may handle
- * daylight savings time and GMT offset in different ways.  Currently we only have one
- * TimeZone subclass: SimpleTimeZone.)
- * <P>
- * The TimeZone class contains a static list containing a TimeZone object for every
- * combination of GMT offset and daylight-savings time rules currently in use in the
- * world, each with a unique ID.  Each ID consists of a region (usually a continent or
- * ocean) and a city in that region, separated by a slash, (for example, US Pacific
- * Time is "America/Los_Angeles.")  Because older versions of this class used
- * three- or four-letter abbreviations instead, there is also a table that maps the older
- * abbreviations to the newer ones (for example, "PST" maps to "America/Los_Angeles").
- * Anywhere the API requires an ID, you can use either form.
- * <P>
- * To create a new TimeZone, you call the factory function TimeZone::createTimeZone()
- * and pass it a time zone ID.  You can use the createEnumeration() function to
- * obtain a list of all the time zone IDs recognized by createTimeZone().
- * <P>
- * You can also use TimeZone::createDefault() to create a TimeZone.  This function uses
- * platform-specific APIs to produce a TimeZone for the time zone corresponding to
- * the client's computer's physical location.  For example, if you're in Japan (assuming
- * your machine is set up correctly), TimeZone::createDefault() will return a TimeZone
- * for Japanese Standard Time ("Asia/Tokyo").
- */
-class U_I18N_API TimeZone : public UObject {
-public:
-    /**
-     * @stable ICU 2.0
-     */
-    virtual ~TimeZone();
-
-    /**
-     * The GMT time zone has a raw offset of zero and does not use daylight
-     * savings time. This is a commonly used time zone.
-     * @return the GMT time zone.
-     * @stable ICU 2.0
-     */
-    static const TimeZone* U_EXPORT2 getGMT(void);
-
-    /**
-     * Creates a <code>TimeZone</code> for the given ID.
-     * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
-     * or a custom ID such as "GMT-8:00".
-     * @return the specified <code>TimeZone</code>, or the GMT zone if the given ID
-     * cannot be understood.  Return result guaranteed to be non-null.  If you
-     * require that the specific zone asked for be returned, check the ID of the
-     * return result.
-     * @stable ICU 2.0
-     */
-    static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
-
-    /**
-     * Returns an enumeration over all recognized time zone IDs. (i.e.,
-     * all strings that createTimeZone() accepts)
-     *
-     * @return an enumeration object, owned by the caller.
-     * @stable ICU 2.4
-     */
-    static StringEnumeration* U_EXPORT2 createEnumeration();
-
-    /**
-     * Returns an enumeration over time zone IDs with a given raw
-     * offset from GMT.  There may be several times zones with the
-     * same GMT offset that differ in the way they handle daylight
-     * savings time.  For example, the state of Arizona doesn't
-     * observe daylight savings time.  If you ask for the time zone
-     * IDs corresponding to GMT-7:00, you'll get back an enumeration
-     * over two time zone IDs: "America/Denver," which corresponds to
-     * Mountain Standard Time in the winter and Mountain Daylight Time
-     * in the summer, and "America/Phoenix", which corresponds to
-     * Mountain Standard Time year-round, even in the summer.
-     *
-     * @param rawOffset an offset from GMT in milliseconds, ignoring
-     * the effect of daylight savings time, if any
-     * @return an enumeration object, owned by the caller
-     * @stable ICU 2.4
-     */
-    static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
-
-    /**
-     * Returns an enumeration over time zone IDs 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.
-     * @return an enumeration object, owned by the caller
-     * @stable ICU 2.4
-     */
-    static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
-
-    /**
-     * Returns the number of IDs in the equivalency group that
-     * includes the given ID.  An equivalency group contains zones
-     * that have the same GMT offset and rules.
-     *
-     * <p>The returned count includes the given ID; it is always >= 1.
-     * The given ID must be a system time zone.  If it is not, returns
-     * zero.
-     * @param id a system time zone ID
-     * @return the number of zones in the equivalency group containing
-     * 'id', or zero if 'id' is not a valid system ID
-     * @see #getEquivalentID
-     * @stable ICU 2.0
-     */
-    static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
-
-    /**
-     * Returns an ID in the equivalency group that
-     * includes the given ID.  An equivalency group contains zones
-     * that have the same GMT offset and rules.
-     *
-     * <p>The given index must be in the range 0..n-1, where n is the
-     * value returned by <code>countEquivalentIDs(id)</code>.  For
-     * some value of 'index', the returned value will be equal to the
-     * given id.  If the given id is not a valid system time zone, or
-     * if 'index' is out of range, then returns an empty string.
-     * @param id a system time zone ID
-     * @param index a value from 0 to n-1, where n is the value
-     * returned by <code>countEquivalentIDs(id)</code>
-     * @return the ID of the index-th zone in the equivalency group
-     * containing 'id', or an empty string if 'id' is not a valid
-     * system ID or 'index' is out of range
-     * @see #countEquivalentIDs
-     * @stable ICU 2.0
-     */
-    static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
-                                               int32_t index);
-
-    /**
-     * Creates a new copy of the default TimeZone for this host. Unless the default time
-     * zone has already been set using adoptDefault() or setDefault(), the default is
-     * determined by querying the system using methods in TPlatformUtilities. If the
-     * system routines fail, or if they specify a TimeZone or TimeZone offset which is not
-     * recognized, the TimeZone indicated by the ID kLastResortID is instantiated
-     * and made the default.
-     *
-     * @return   A default TimeZone. Clients are responsible for deleting the time zone
-     *           object returned.
-     * @stable ICU 2.0
-     */
-    static TimeZone* U_EXPORT2 createDefault(void);
-
-    /**
-     * Sets the default time zone (i.e., what's returned by createDefault()) to be the
-     * specified time zone.  If NULL is specified for the time zone, the default time
-     * zone is set to the default host time zone.  This call adopts the TimeZone object
-     * passed in; the clent is no longer responsible for deleting it.
-     *
-     * @param zone  A pointer to the new TimeZone object to use as the default.
-     * @stable ICU 2.0
-     */
-    static void U_EXPORT2 adoptDefault(TimeZone* zone);
-
-    /**
-     * Same as adoptDefault(), except that the TimeZone object passed in is NOT adopted;
-     * the caller remains responsible for deleting it.
-     *
-     * @param zone  The given timezone.
-     * @system
-     */
-    static void U_EXPORT2 setDefault(const TimeZone& zone);
-
-    /**
-     * Returns the timezone data version currently used by ICU.
-     * @param status Output param to filled in with a success or an error.
-     * @return the version string, such as "2007f"
-     * @stable ICU 3.8
-     */
-    static const char* U_EXPORT2 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 time zone ID to be canonicalized.
-     * @param canonicalID   Receives the canonical system time zone ID
-     *                      or the custom time zone ID in normalized format.
-     * @param status        Recevies the status.  When the given time zone ID
-     *                      is neither a known system time zone ID nor a
-     *                      valid custom time zone ID, U_ILLEGAL_ARGUMENT_ERROR
-     *                      is set.
-     * @return A reference to the result.
-     * @stable ICU 4.0
-     */
-    static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
-        UnicodeString& canonicalID, UErrorCode& status);
-
-    /**
-     * Returns the canonical system time zone ID or the normalized
-     * custom time zone ID for the given time zone ID.
-     * @param id            The input time zone ID to be canonicalized.
-     * @param canonicalID   Receives the canonical system time zone ID
-     *                      or the custom time zone ID in normalized format.
-     * @param isSystemID    Receives if the given ID is a known system
-     *                      time zone ID.
-     * @param status        Recevies the status.  When the given time zone ID
-     *                      is neither a known system time zone ID nor a
-     *                      valid custom time zone ID, U_ILLEGAL_ARGUMENT_ERROR
-     *                      is set.
-     * @return A reference to the result.
-     * @stable ICU 4.0
-     */
-    static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
-        UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status);
-
-    /**
-     * Returns true if the two TimeZones are equal.  (The TimeZone version only compares
-     * IDs, but subclasses are expected to also compare the fields they add.)
-     *
-     * @param that  The TimeZone object to be compared with.
-     * @return      True if the given TimeZone is equal to this TimeZone; false
-     *              otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool operator==(const TimeZone& that) const;
-
-    /**
-     * Returns true if the two TimeZones are NOT equal; that is, if operator==() returns
-     * false.
-     *
-     * @param that  The TimeZone object to be compared with.
-     * @return      True if the given TimeZone is not equal to this TimeZone; false
-     *              otherwise.
-     * @stable ICU 2.0
-     */
-    UBool operator!=(const TimeZone& that) const {return !operator==(that);}
-
-    /**
-     * 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 2.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 = 0;
-
-    /**
-     * 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 era of the given date.
-     * @param year the year in the given date.
-     * @param month the month in the given date.
-     * Month is 0-based. e.g., 0 for January.
-     * @param day the day-in-month of the given date.
-     * @param dayOfWeek the day-of-week of the given date.
-     * @param milliseconds the millis in day in <em>standard</em> local 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 to add *to* GMT to get local time.
-     * @stable ICU 2.0
-     */
-    virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
-                           uint8_t dayOfWeek, int32_t milliseconds,
-                           int32_t monthLength, UErrorCode& status) const = 0;
-
-    /**
-     * 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 2.8
-     */
-    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 2.0
-     */
-    virtual void setRawOffset(int32_t offsetMillis) = 0;
-
-    /**
-     * 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 2.0
-     */
-    virtual int32_t getRawOffset(void) const = 0;
-
-    /**
-     * Fills in "ID" with the TimeZone's ID.
-     *
-     * @param ID  Receives this TimeZone's ID.
-     * @return    A reference to 'ID'
-     * @stable ICU 2.0
-     */
-    UnicodeString& getID(UnicodeString& ID) const;
-
-    /**
-     * Sets the TimeZone's ID to the specified value.  This doesn't affect any other
-     * fields (for example, if you say<
-     * blockquote><pre>
-     * .     TimeZone* foo = TimeZone::createTimeZone("America/New_York");
-     * .     foo.setID("America/Los_Angeles");
-     * </pre>\htmlonly</blockquote>\endhtmlonly
-     * the time zone's GMT offset and daylight-savings rules don't change to those for
-     * Los Angeles.  They're still those for New York.  Only the ID has changed.)
-     *
-     * @param ID  The new time zone ID.
-     * @stable ICU 2.0
-     */
-    void setID(const UnicodeString& ID);
-
-    /**
-     * Enum for use with getDisplayName
-     * @stable ICU 2.4
-     */
-    enum EDisplayType {
-        /**
-         * Selector for short display name
-         * @stable ICU 2.4
-         */
-        SHORT = 1,
-        /**
-         * Selector for long display name
-         * @stable ICU 2.4
-         */
-        LONG,
-        /**
-         * Selector for short generic display name
-         * @stable ICU 4.4
-         */
-        SHORT_GENERIC,
-        /**
-         * Selector for long generic display name
-         * @stable ICU 4.4
-         */
-        LONG_GENERIC,
-        /**
-         * Selector for short display name derived
-         * from time zone offset
-         * @stable ICU 4.4
-         */
-        SHORT_GMT,
-        /**
-         * Selector for long display name derived
-         * from time zone offset
-         * @stable ICU 4.4
-         */
-        LONG_GMT,
-        /**
-         * Selector for short display name derived
-         * from the time zone's fallback name
-         * @stable ICU 4.4
-         */
-        SHORT_COMMONLY_USED,
-        /**
-         * Selector for long display name derived
-         * from the time zone's fallback name
-         * @stable ICU 4.4
-         */
-        GENERIC_LOCATION
-    };
-
-    /**
-     * Returns a name of this time zone suitable for presentation to the user
-     * in the default locale.
-     * This method returns the long name, not including daylight savings.
-     * If the display name is not available for the locale,
-     * then this method returns a string in the format
-     * <code>GMT[+-]hh:mm</code>.
-     * @param result the human-readable name of this time zone in the default locale.
-     * @return       A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    UnicodeString& getDisplayName(UnicodeString& result) const;
-
-    /**
-     * Returns a name of this time zone suitable for presentation to the user
-     * in the specified locale.
-     * This method returns the long name, not including daylight savings.
-     * If the display name is not available for the locale,
-     * then this method returns a string in the format
-     * <code>GMT[+-]hh:mm</code>.
-     * @param locale the locale in which to supply the display name.
-     * @param result the human-readable name of this time zone in the given locale
-     *               or in the default locale if the given locale is not recognized.
-     * @return       A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
-
-    /**
-     * Returns a name of this time zone suitable for presentation to the user
-     * in the default locale.
-     * If the display name is not available for the locale,
-     * then this method returns a string in the format
-     * <code>GMT[+-]hh:mm</code>.
-     * @param daylight if true, return the daylight savings name.
-     * @param style
-     * @param result the human-readable name of this time zone in the default locale.
-     * @return       A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    UnicodeString& getDisplayName(UBool daylight, EDisplayType style, UnicodeString& result) const;
-
-    /**
-     * Returns a name of this time zone suitable for presentation to the user
-     * in the specified locale.
-     * If the display name is not available for the locale,
-     * then this method returns a string in the format
-     * <code>GMT[+-]hh:mm</code>.
-     * @param daylight if true, return the daylight savings name.
-     * @param style
-     * @param locale the locale in which to supply the display name.
-     * @param result the human-readable name of this time zone in the given locale
-     *               or in the default locale if the given locale is not recognized.
-     * @return       A refence to 'result'.
-     * @stable ICU 2.0
-     */
-    UnicodeString& getDisplayName(UBool daylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
-    
-    /**
-     * Queries if this time zone uses daylight savings time.
-     * @return true if this time zone uses daylight savings time,
-     * false, otherwise.
-     * @stable ICU 2.0
-     */
-    virtual UBool useDaylightTime(void) const = 0;
-
-    /**
-     * 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 = 0;
-
-    /**
-     * 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 2.0
-     */
-    virtual UBool hasSameRules(const TimeZone& other) const;
-
-    /**
-     * Clones TimeZone objects polymorphically. Clients are responsible for deleting
-     * the TimeZone object cloned.
-     *
-     * @return   A new copy of this TimeZone object.
-     * @stable ICU 2.0
-     */
-    virtual TimeZone* clone(void) const = 0;
-
-    /**
-     * Return the class ID for this class.  This is useful only for
-     * comparing to a return value from getDynamicClassID().
-     * @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. 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.
-     * <P>
-     * Concrete subclasses of TimeZone must use the UOBJECT_DEFINE_RTTI_IMPLEMENTATION
-     *  macro from uobject.h in their implementation to provide correct RTTI information.
-     * @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;
-    
-    /**
-     * Returns the amount of time to be added to local standard time
-     * to get local wall clock time.
-     * <p>
-     * The default implementation always returns 3600000 milliseconds
-     * (i.e., one hour) if this time zone observes Daylight Saving
-     * Time. Otherwise, 0 (zero) is returned.
-     * <p>
-     * If an underlying TimeZone implementation subclass supports
-     * historical Daylight Saving Time changes, this method returns
-     * the known latest daylight saving value.
-     *
-     * @return the amount of saving time in milliseconds
-     * @stable ICU 3.6
-     */
-    virtual int32_t getDSTSavings() const;
-
-protected:
-
-    /**
-     * Default constructor.  ID is initialized to the empty string.
-     * @stable ICU 2.0
-     */
-    TimeZone();
-
-    /**
-     * Construct a TimeZone with a given ID.
-     * @param id a system time zone ID
-     * @stable ICU 2.0
-     */
-    TimeZone(const UnicodeString &id);
-
-    /**
-     * Copy constructor.
-     * @param source the object to be copied.
-     * @stable ICU 2.0
-     */
-    TimeZone(const TimeZone& source);
-
-    /**
-     * Default assignment operator.
-     * @param right the object to be copied.
-     * @stable ICU 2.0
-     */
-    TimeZone& operator=(const TimeZone& right);
-
-    /**
-     * Utility function. For internally loading rule data.
-     * @param top Top resource bundle for tz data
-     * @param ruleid ID of rule to load
-     * @param oldbundle Old bundle to reuse or NULL
-     * @param status Status parameter
-     * @return either a new bundle or *oldbundle
-     * @internal
-     */
-    static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
-
-private:
-    friend class ZoneMeta;
-
-
-    static TimeZone*        createCustomTimeZone(const UnicodeString&); // Creates a time zone based on the string.
-
-    /**
-     * Resolve a link in Olson tzdata.  When the given id is known and it's not a link,
-     * the id itself is returned.  When the given id is known and it is a link, then
-     * dereferenced zone id is returned.  When the given id is unknown, then it returns
-     * NULL.
-     * @param id zone id string
-     * @return the dereferenced zone or NULL
-     */
-    static const UChar* dereferOlsonLink(const UnicodeString& id);
-
-    /**
-     * Returns the region code associated with the given zone.
-     * @param id zone id string
-     * @return the region associated with the given zone
-     */
-    static const UChar* getRegion(const UnicodeString& id);
-
-    /**
-     * Parses the given custom time zone identifier
-     * @param id id A string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or
-     * GMT[+-]hh.
-     * @param sign Receves parsed sign, 1 for positive, -1 for negative.
-     * @param hour Receives parsed hour field
-     * @param minute Receives parsed minute field
-     * @param second Receives parsed second field
-     * @return Returns TRUE when the given custom id is valid.
-     */
-    static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
-        int32_t& min, int32_t& sec);
-
-    /**
-     * Parse a custom time zone identifier and return the normalized
-     * custom time zone identifier for the given custom id string.
-     * @param id a string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or
-     * GMT[+-]hh.
-     * @param normalized Receives the normalized custom ID
-     * @param status Receives the status.  When the input ID string is invalid,
-     * U_ILLEGAL_ARGUMENT_ERROR is set.
-     * @return The normalized custom id string.
-    */
-    static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized,
-        UErrorCode& status);
-
-    /**
-     * Returns the normalized custome time zone ID for the given offset fields.
-     * @param hour offset hours
-     * @param min offset minutes
-     * @param sec offset seconds
-     * @param netative sign of the offset, TRUE for negative offset.
-     * @param id Receves the format result (normalized custom ID)
-     * @return The reference to id
-     */
-    static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
-        UBool negative, UnicodeString& id);
-
-    /**
-     * Responsible for setting up DEFAULT_ZONE.  Uses routines in TPlatformUtilities
-     * (i.e., platform-specific calls) to get the current system time zone.  Failing
-     * that, uses the platform-specific default time zone.  Failing that, uses GMT.
-     */
-    static void             initDefault(void);
-
-    // See source file for documentation
-    /**
-     * Lookup the given name in our system zone table.  If found,
-     * instantiate a new zone of that name and return it.  If not
-     * found, return 0.
-     * @param name tthe given name of a system time zone.
-     * @return the TimeZone indicated by the 'name'.
-     */
-    static TimeZone*        createSystemTimeZone(const UnicodeString& name);
-
-    UnicodeString           fID;    // this time zone's ID
-
-};
-
-
-// -------------------------------------
-
-inline UnicodeString&
-TimeZone::getID(UnicodeString& ID) const
-{
-    ID = fID;
-    return ID;
-}
-
-// -------------------------------------
-
-inline void
-TimeZone::setID(const UnicodeString& ID)
-{
-    fID = ID;
-}
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif //_TIMEZONE
-//eof
diff --git a/source/i18n/unicode/tmunit.h b/source/i18n/unicode/tmunit.h
deleted file mode 100644
index 6eda105..0000000
--- a/source/i18n/unicode/tmunit.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 2009-2010, Google, International Business Machines Corporation and *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-#ifndef __TMUNIT_H__
-#define __TMUNIT_H__
-
-
-/**
- * \file
- * \brief C++ API: time unit object
- */
-
-
-#include "unicode/measunit.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-U_NAMESPACE_BEGIN
-
-/**
- * Measurement unit for time units.
- * @see TimeUnitAmount
- * @see TimeUnit
- * @stable ICU 4.2
- */
-class U_I18N_API TimeUnit: public MeasureUnit {
-public:
-    /**
-     * Constants for all the time units we supported.
-     * @stable ICU 4.2
-     */
-    enum UTimeUnitFields {
-        UTIMEUNIT_YEAR,
-        UTIMEUNIT_MONTH,
-        UTIMEUNIT_DAY,
-        UTIMEUNIT_WEEK,
-        UTIMEUNIT_HOUR,
-        UTIMEUNIT_MINUTE,
-        UTIMEUNIT_SECOND,
-        UTIMEUNIT_FIELD_COUNT
-    };
-
-    /**
-     * Create Instance.
-     * @param timeUnitField  time unit field based on which the instance 
-     *                       is created.
-     * @param status         input-output error code. 
-     *                       If the timeUnitField is invalid,
-     *                       then this will be set to U_ILLEGAL_ARGUMENT_ERROR.
-     * @return               a TimeUnit instance
-     * @stable ICU 4.2 
-     */
-    static TimeUnit* U_EXPORT2 createInstance(UTimeUnitFields timeUnitField,
-                                              UErrorCode& status);
-
-
-    /**
-     * Override clone.
-     * @stable ICU 4.2 
-     */
-    virtual UObject* clone() const;
-
-    /**
-     * Copy operator.
-     * @stable ICU 4.2 
-     */
-    TimeUnit(const TimeUnit& other);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 4.2 
-     */
-    TimeUnit& operator=(const TimeUnit& other);
-
-    /**
-     * Equality operator. 
-     * @return true if 2 objects are the same.
-     * @stable ICU 4.2 
-     */
-    virtual UBool operator==(const UObject& other) const;
-
-    /**
-     * Non-Equality operator. 
-     * @return true if 2 objects are not the same.
-     * @stable ICU 4.2 
-     */
-    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 4.2 
-     */
-    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 4.2 
-     */
-    static UClassID U_EXPORT2 getStaticClassID();
-
-
-    /**
-     * Get time unit field.
-     * @return time unit field.
-     * @stable ICU 4.2 
-     */
-    UTimeUnitFields getTimeUnitField() const;
-
-    /**
-     * Destructor.
-     * @stable ICU 4.2 
-     */
-    virtual ~TimeUnit();
-
-private:
-    UTimeUnitFields fTimeUnitField;
-
-    /**
-     * Constructor
-     * @internal ICU 4.2 
-     */
-    TimeUnit(UTimeUnitFields timeUnitField);
-
-};
-
-
-inline UBool 
-TimeUnit::operator!=(const UObject& other) const {
-    return !operator==(other);
-}
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // __TMUNIT_H__
-//eof
-//
diff --git a/source/i18n/unicode/tmutamt.h b/source/i18n/unicode/tmutamt.h
deleted file mode 100644
index bd2b8a4..0000000
--- a/source/i18n/unicode/tmutamt.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 2009-2010, Google, International Business Machines Corporation and *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */ 
-
-#ifndef __TMUTAMT_H__
-#define __TMUTAMT_H__
-
-
-/**
- * \file
- * \brief C++ API: time unit amount object.
- */
-
-#include "unicode/measure.h"
-#include "unicode/tmunit.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-U_NAMESPACE_BEGIN
-
-
-/**
- * Express a duration as a time unit and number. Patterned after Currency.
- * @see TimeUnitAmount
- * @see TimeUnitFormat
- * @stable ICU 4.2
- */
-class U_I18N_API TimeUnitAmount: public Measure {
-public:
-    /**
-     * Construct TimeUnitAmount object with the given number and the
-     * given time unit. 
-     * @param number        a numeric object; number.isNumeric() must be TRUE
-     * @param timeUnitField the time unit field of a time unit
-     * @param status        the input-output error code. 
-     *                      If the number is not numeric or the timeUnitField
-     *                      is not valid,
-     *                      then this will be set to a failing value:
-     *                      U_ILLEGAL_ARGUMENT_ERROR.
-     * @stable ICU 4.2
-     */
-    TimeUnitAmount(const Formattable& number, 
-                   TimeUnit::UTimeUnitFields timeUnitField,
-                   UErrorCode& status);
-
-    /**
-     * Construct TimeUnitAmount object with the given numeric amount and the
-     * given time unit. 
-     * @param amount        a numeric amount.
-     * @param timeUnitField the time unit field on which a time unit amount
-     *                      object will be created.
-     * @param status        the input-output error code. 
-     *                      If the timeUnitField is not valid,
-     *                      then this will be set to a failing value:
-     *                      U_ILLEGAL_ARGUMENT_ERROR.
-     * @stable ICU 4.2
-     */
-    TimeUnitAmount(double amount, TimeUnit::UTimeUnitFields timeUnitField,
-                   UErrorCode& status);
-
-
-    /**
-     * Copy constructor 
-     * @stable ICU 4.2
-     */
-    TimeUnitAmount(const TimeUnitAmount& other);
-
-
-    /**
-     * Assignment operator
-     * @stable ICU 4.2
-     */
-    TimeUnitAmount& operator=(const TimeUnitAmount& other);
-
-
-    /**
-     * Clone. 
-     * @return a polymorphic clone of this object. The result will have the same               class as returned by getDynamicClassID().
-     * @stable ICU 4.2
-     */
-    virtual UObject* clone() const;
-
-    
-    /**
-     * Destructor
-     * @stable ICU 4.2
-     */
-    virtual ~TimeUnitAmount();
-
-    
-    /** 
-     * Equality operator.  
-     * @param other  the object to compare to.
-     * @return       true if this object is equal to the given object.
-     * @stable ICU 4.2
-     */
-    virtual UBool operator==(const UObject& other) const;
-
-
-    /** 
-     * Not-equality operator.  
-     * @param other  the object to compare to.
-     * @return       true if this object is not equal to the given object.
-     * @stable ICU 4.2
-     */
-    UBool operator!=(const UObject& other) const;
-
-
-    /**
-     * 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.2
-     */
-    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.2
-     */
-    virtual UClassID getDynamicClassID(void) const;
-
-
-    /**
-     * Get the time unit.
-     * @return time unit object.
-     * @stable ICU 4.2
-     */
-    const TimeUnit& getTimeUnit() const;
-
-    /**
-     * Get the time unit field value.
-     * @return time unit field value.
-     * @stable ICU 4.2
-     */
-    TimeUnit::UTimeUnitFields getTimeUnitField() const;
-};
-
-
-
-inline UBool 
-TimeUnitAmount::operator!=(const UObject& other) const {
-    return !operator==(other);
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // __TMUTAMT_H__
-//eof
-//
diff --git a/source/i18n/unicode/tmutfmt.h b/source/i18n/unicode/tmutfmt.h
deleted file mode 100644
index 540be3f..0000000
--- a/source/i18n/unicode/tmutfmt.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 2010, Google, International Business Machines Corporation and *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-#ifndef __TMUTFMT_H__
-#define __TMUTFMT_H__
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: Format and parse duration in single time unit
- */
-
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/unistr.h"
-#include "unicode/tmunit.h"
-#include "unicode/tmutamt.h"
-#include "unicode/measfmt.h"
-#include "unicode/numfmt.h"
-#include "unicode/plurrule.h"
-
-/**
- * @internal ICU 4.2
- */
-
-union UHashTok;
-
-U_NAMESPACE_BEGIN
-
-class Hashtable;
-
-
-/**
- * Format or parse a TimeUnitAmount, using plural rules for the units where available.
- *
- * <P>
- * Code Sample:
- * <pre>
- *   // create time unit amount instance - a combination of Number and time unit
- *   UErrorCode status = U_ZERO_ERROR;
- *   TimeUnitAmount* source = new TimeUnitAmount(2, TimeUnit::UTIMEUNIT_YEAR, status);
- *   // create time unit format instance
- *   TimeUnitFormat* format = new TimeUnitFormat(Locale("en"), status);
- *   // format a time unit amount
- *   UnicodeString formatted;
- *   Formattable formattable;
- *   if (U_SUCCESS(status)) {
- *       formattable.adoptObject(source);
- *       formatted = ((Format*)format)->format(formattable, formatted, status);
- *       Formattable result;
- *       ((Format*)format)->parseObject(formatted, result, status);
- *       if (U_SUCCESS(status)) {
- *           assert (result == formattable);
- *       }
- *   }
- * </pre>
- *
- * <P>
- * @see TimeUnitAmount
- * @see TimeUnitFormat
- * @draft ICU 4.2
- */
-class U_I18N_API TimeUnitFormat: public MeasureFormat {
-public:
-
-    /**
-     * Constants for various styles.
-     * There are 2 styles: full name and abbreviated name.
-     * For example, for English, the full name for hour duration is "3 hours",
-     * and the abbreviated name is "3 hrs".
-     * @draft ICU 4.2
-     */
-    enum EStyle {
-        kFull = 0,
-        kAbbreviate = 1,
-        kTotal = kAbbreviate + 1
-    };
-
-    /**
-     * Create TimeUnitFormat with default locale, and full name style.
-     * Use setLocale and/or setFormat to modify.
-     * @stable ICU 4.2
-     */
-    TimeUnitFormat(UErrorCode& status);
-
-    /**
-     * Create TimeUnitFormat given locale, and full name style.
-     * @stable ICU 4.2
-     */
-    TimeUnitFormat(const Locale& locale, UErrorCode& status);
-
-    /**
-     * Create TimeUnitFormat given locale and style.
-     * @draft ICU 4.2
-     */
-    TimeUnitFormat(const Locale& locale, EStyle style, UErrorCode& status);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 4.2
-     */
-    TimeUnitFormat(const TimeUnitFormat&);
-
-    /**
-     * deconstructor
-     * @stable ICU 4.2
-     */
-    virtual ~TimeUnitFormat();
-
-    /**
-     * Clone this Format object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @stable ICU 4.2
-     */
-    virtual Format* clone(void) const;
-
-    /**
-     * Assignment operator
-     * @stable ICU 4.2
-     */
-    TimeUnitFormat& operator=(const TimeUnitFormat& other);
-
-
-    /**
-     * 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 4.2
-     */
-    virtual UBool operator==(const Format& other) const;
-
-    /**
-     * Return true if the given Format objects are not 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 not semantically equal.
-     * @stable ICU 4.2
-     */
-    UBool operator!=(const Format& other) const;
-
-    /**
-     * Set the locale used for formatting or parsing.
-     * @param locale  the locale to be set
-     * @param status  output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    void setLocale(const Locale& locale, UErrorCode& status);
-
-
-    /**
-     * Set the number format used for formatting or parsing.
-     * @param format  the number formatter to be set
-     * @param status  output param set to success/failure code on exit
-     * @stable ICU 4.2
-     */
-    void setNumberFormat(const NumberFormat& format, UErrorCode& status);
-
-
-    using MeasureFormat::format;
-
-    /**
-     * Format a TimeUnitAmount.
-     * If the formattable object is not a time unit amount object,
-     * or the number in time unit amount is not a double type or long type
-     * numeric, it returns a failing status: U_ILLEGAL_ARGUMENT_ERROR.
-     * @see Format#format(const Formattable&, UnicodeString&, FieldPosition&,  UErrorCode&) const
-     * @stable ICU 4.2
-     */
-    virtual UnicodeString& format(const Formattable& obj,
-                                  UnicodeString& toAppendTo,
-                                  FieldPosition& pos,
-                                  UErrorCode& status) const;
-
-    /**
-     * Parse a TimeUnitAmount.
-     * @see Format#parseObject(const UnicodeString&, Formattable&, ParsePosition&) const;
-     * @stable ICU 4.2
-     */
-    virtual void parseObject(const UnicodeString& source,
-                             Formattable& result,
-                             ParsePosition& pos) const;
-
-    /**
-     * 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.2
-     */
-    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.2
-     */
-    virtual UClassID getDynamicClassID(void) const;
-
-private:
-    NumberFormat* fNumberFormat;
-    Locale        fLocale;
-    Hashtable*    fTimeUnitToCountToPatterns[TimeUnit::UTIMEUNIT_FIELD_COUNT];
-    PluralRules*  fPluralRules;
-    EStyle           fStyle;
-
-    void create(const Locale& locale, EStyle style, UErrorCode& status);
-
-    // it might actually be simpler to make them Decimal Formats later.
-    // initialize all private data members
-    void setup(UErrorCode& status);
-
-    // initialize data member without fill in data for fTimeUnitToCountToPattern
-    void initDataMembers(UErrorCode& status);
-
-    // initialize fTimeUnitToCountToPatterns from current locale's resource.
-    void readFromCurrentLocale(EStyle style, const char* key, UErrorCode& status);
-
-    // check completeness of fTimeUnitToCountToPatterns against all time units,
-    // and all plural rules, fill in fallback as necessary.
-    void checkConsistency(EStyle style, const char* key, UErrorCode& status);
-
-    // fill in fTimeUnitToCountToPatterns from locale fall-back chain
-    void searchInLocaleChain(EStyle style, const char* key, const char* localeName,
-                             TimeUnit::UTimeUnitFields field, const char*,
-                             const char*, Hashtable*, UErrorCode&);
-
-    // initialize hash table
-    Hashtable* initHash(UErrorCode& status);
-
-    // delete hash table
-    void deleteHash(Hashtable* htable);
-
-    // copy hash table
-    void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
-    // get time unit name, such as "year", from time unit field enum, such as
-    // UTIMEUNIT_YEAR.
-    static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status);
-};
-
-
-
-inline UBool
-TimeUnitFormat::operator!=(const Format& other) const  {
-    return !operator==(other);
-}
-
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // __TMUTFMT_H__
-//eof
diff --git a/source/i18n/unicode/translit.h b/source/i18n/unicode/translit.h
deleted file mode 100644
index b77eef5..0000000
--- a/source/i18n/unicode/translit.h
+++ /dev/null
@@ -1,1320 +0,0 @@
-/*
-**********************************************************************
-* Copyright (C) 1999-2008, International Business Machines
-* Corporation and others. All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   11/17/99    aliu        Creation.
-**********************************************************************
-*/
-#ifndef TRANSLIT_H
-#define TRANSLIT_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: Tranforms text from one format to another.
- */
- 
-#if !UCONFIG_NO_TRANSLITERATION
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/parseerr.h"
-#include "unicode/utrans.h" // UTransPosition, UTransDirection
-#include "unicode/strenum.h"
-
-U_NAMESPACE_BEGIN
-
-class UnicodeFilter;
-class UnicodeSet;
-class CompoundTransliterator;
-class TransliteratorParser;
-class NormalizationTransliterator;
-class TransliteratorIDParser;
-
-/**
- *
- * <code>Transliterator</code> is an abstract class that
- * transliterates text from one format to another.  The most common
- * kind of transliterator is a script, or alphabet, transliterator.
- * For example, a Russian to Latin transliterator changes Russian text
- * written in Cyrillic characters to phonetically equivalent Latin
- * characters.  It does not <em>translate</em> Russian to English!
- * Transliteration, unlike translation, operates on characters, without
- * reference to the meanings of words and sentences.
- *
- * <p>Although script conversion is its most common use, a
- * transliterator can actually perform a more general class of tasks.
- * In fact, <code>Transliterator</code> defines a very general API
- * which specifies only that a segment of the input text is replaced
- * by new text.  The particulars of this conversion are determined
- * entirely by subclasses of <code>Transliterator</code>.
- *
- * <p><b>Transliterators are stateless</b>
- *
- * <p><code>Transliterator</code> objects are <em>stateless</em>; they
- * retain no information between calls to
- * <code>transliterate()</code>.  (However, this does <em>not</em>
- * mean that threads may share transliterators without synchronizing
- * them.  Transliterators are not immutable, so they must be
- * synchronized when shared between threads.)  This might seem to
- * limit the complexity of the transliteration operation.  In
- * practice, subclasses perform complex transliterations by delaying
- * the replacement of text until it is known that no other
- * replacements are possible.  In other words, although the
- * <code>Transliterator</code> objects are stateless, the source text
- * itself embodies all the needed information, and delayed operation
- * allows arbitrary complexity.
- *
- * <p><b>Batch transliteration</b>
- *
- * <p>The simplest way to perform transliteration is all at once, on a
- * string of existing text.  This is referred to as <em>batch</em>
- * transliteration.  For example, given a string <code>input</code>
- * and a transliterator <code>t</code>, the call
- *
- * \htmlonly<blockquote>\endhtmlonly<code>String result = t.transliterate(input);
- * </code>\htmlonly</blockquote>\endhtmlonly
- *
- * will transliterate it and return the result.  Other methods allow
- * the client to specify a substring to be transliterated and to use
- * {@link Replaceable } objects instead of strings, in order to
- * preserve out-of-band information (such as text styles).
- *
- * <p><b>Keyboard transliteration</b>
- *
- * <p>Somewhat more involved is <em>keyboard</em>, or incremental
- * transliteration.  This is the transliteration of text that is
- * arriving from some source (typically the user's keyboard) one
- * character at a time, or in some other piecemeal fashion.
- *
- * <p>In keyboard transliteration, a <code>Replaceable</code> buffer
- * stores the text.  As text is inserted, as much as possible is
- * transliterated on the fly.  This means a GUI that displays the
- * contents of the buffer may show text being modified as each new
- * character arrives.
- *
- * <p>Consider the simple <code>RuleBasedTransliterator</code>:
- *
- * \htmlonly<blockquote>\endhtmlonly<code>
- * th&gt;{theta}<br>
- * t&gt;{tau}
- * </code>\htmlonly</blockquote>\endhtmlonly
- *
- * When the user types 't', nothing will happen, since the
- * transliterator is waiting to see if the next character is 'h'.  To
- * remedy this, we introduce the notion of a cursor, marked by a '|'
- * in the output string:
- *
- * \htmlonly<blockquote>\endhtmlonly<code>
- * t&gt;|{tau}<br>
- * {tau}h&gt;{theta}
- * </code>\htmlonly</blockquote>\endhtmlonly
- *
- * Now when the user types 't', tau appears, and if the next character
- * is 'h', the tau changes to a theta.  This is accomplished by
- * maintaining a cursor position (independent of the insertion point,
- * and invisible in the GUI) across calls to
- * <code>transliterate()</code>.  Typically, the cursor will
- * be coincident with the insertion point, but in a case like the one
- * above, it will precede the insertion point.
- *
- * <p>Keyboard transliteration methods maintain a set of three indices
- * that are updated with each call to
- * <code>transliterate()</code>, including the cursor, start,
- * and limit.  Since these indices are changed by the method, they are
- * passed in an <code>int[]</code> array. The <code>START</code> index
- * marks the beginning of the substring that the transliterator will
- * look at.  It is advanced as text becomes committed (but it is not
- * the committed index; that's the <code>CURSOR</code>).  The
- * <code>CURSOR</code> index, described above, marks the point at
- * which the transliterator last stopped, either because it reached
- * the end, or because it required more characters to disambiguate
- * between possible inputs.  The <code>CURSOR</code> can also be
- * explicitly set by rules in a <code>RuleBasedTransliterator</code>.
- * Any characters before the <code>CURSOR</code> index are frozen;
- * future keyboard transliteration calls within this input sequence
- * will not change them.  New text is inserted at the
- * <code>LIMIT</code> index, which marks the end of the substring that
- * the transliterator looks at.
- *
- * <p>Because keyboard transliteration assumes that more characters
- * are to arrive, it is conservative in its operation.  It only
- * transliterates when it can do so unambiguously.  Otherwise it waits
- * for more characters to arrive.  When the client code knows that no
- * more characters are forthcoming, perhaps because the user has
- * performed some input termination operation, then it should call
- * <code>finishTransliteration()</code> to complete any
- * pending transliterations.
- *
- * <p><b>Inverses</b>
- *
- * <p>Pairs of transliterators may be inverses of one another.  For
- * example, if transliterator <b>A</b> transliterates characters by
- * incrementing their Unicode value (so "abc" -> "def"), and
- * transliterator <b>B</b> decrements character values, then <b>A</b>
- * is an inverse of <b>B</b> and vice versa.  If we compose <b>A</b>
- * with <b>B</b> in a compound transliterator, the result is the
- * indentity transliterator, that is, a transliterator that does not
- * change its input text.
- *
- * The <code>Transliterator</code> method <code>getInverse()</code>
- * returns a transliterator's inverse, if one exists, or
- * <code>null</code> otherwise.  However, the result of
- * <code>getInverse()</code> usually will <em>not</em> be a true
- * mathematical inverse.  This is because true inverse transliterators
- * are difficult to formulate.  For example, consider two
- * transliterators: <b>AB</b>, which transliterates the character 'A'
- * to 'B', and <b>BA</b>, which transliterates 'B' to 'A'.  It might
- * seem that these are exact inverses, since
- *
- * \htmlonly<blockquote>\endhtmlonly"A" x <b>AB</b> -> "B"<br>
- * "B" x <b>BA</b> -> "A"\htmlonly</blockquote>\endhtmlonly
- *
- * where 'x' represents transliteration.  However,
- *
- * \htmlonly<blockquote>\endhtmlonly"ABCD" x <b>AB</b> -> "BBCD"<br>
- * "BBCD" x <b>BA</b> -> "AACD"\htmlonly</blockquote>\endhtmlonly
- *
- * so <b>AB</b> composed with <b>BA</b> is not the
- * identity. Nonetheless, <b>BA</b> may be usefully considered to be
- * <b>AB</b>'s inverse, and it is on this basis that
- * <b>AB</b><code>.getInverse()</code> could legitimately return
- * <b>BA</b>.
- *
- * <p><b>IDs and display names</b>
- *
- * <p>A transliterator is designated by a short identifier string or
- * <em>ID</em>.  IDs follow the format <em>source-destination</em>,
- * where <em>source</em> describes the entity being replaced, and
- * <em>destination</em> describes the entity replacing
- * <em>source</em>.  The entities may be the names of scripts,
- * particular sequences of characters, or whatever else it is that the
- * transliterator converts to or from.  For example, a transliterator
- * from Russian to Latin might be named "Russian-Latin".  A
- * transliterator from keyboard escape sequences to Latin-1 characters
- * might be named "KeyboardEscape-Latin1".  By convention, system
- * entity names are in English, with the initial letters of words
- * capitalized; user entity names may follow any format so long as
- * they do not contain dashes.
- *
- * <p>In addition to programmatic IDs, transliterator objects have
- * display names for presentation in user interfaces, returned by
- * {@link #getDisplayName }.
- *
- * <p><b>Factory methods and registration</b>
- *
- * <p>In general, client code should use the factory method
- * {@link #createInstance } to obtain an instance of a
- * transliterator given its ID.  Valid IDs may be enumerated using
- * <code>getAvailableIDs()</code>.  Since transliterators are mutable,
- * multiple calls to {@link #createInstance } with the same ID will
- * return distinct objects.
- *
- * <p>In addition to the system transliterators registered at startup,
- * user transliterators may be registered by calling
- * <code>registerInstance()</code> at run time.  A registered instance
- * acts a template; future calls to {@link #createInstance } with the ID
- * of the registered object return clones of that object.  Thus any
- * object passed to <tt>registerInstance()</tt> must implement
- * <tt>clone()</tt> propertly.  To register a transliterator subclass
- * without instantiating it (until it is needed), users may call
- * {@link #registerFactory }.  In this case, the objects are
- * instantiated by invoking the zero-argument public constructor of
- * the class.
- *
- * <p><b>Subclassing</b>
- *
- * Subclasses must implement the abstract method
- * <code>handleTransliterate()</code>.  <p>Subclasses should override
- * the <code>transliterate()</code> method taking a
- * <code>Replaceable</code> and the <code>transliterate()</code>
- * method taking a <code>String</code> and <code>StringBuffer</code>
- * if the performance of these methods can be improved over the
- * performance obtained by the default implementations in this class.
- *
- * @author Alan Liu
- * @stable ICU 2.0
- */
-class U_I18N_API Transliterator : public UObject {
-
-private:
-
-    /**
-     * Programmatic name, e.g., "Latin-Arabic".
-     */
-    UnicodeString ID;
-
-    /**
-     * This transliterator's filter.  Any character for which
-     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
-     * altered by this transliterator.  If <tt>filter</tt> is
-     * <tt>null</tt> then no filtering is applied.
-     */
-    UnicodeFilter* filter;
-
-    int32_t maximumContextLength;
-
- public:
-
-    /**
-     * A context integer or pointer for a factory function, passed by
-     * value.
-     * @stable ICU 2.4
-     */
-    union Token {
-        /**
-         * This token, interpreted as a 32-bit integer.
-         * @stable ICU 2.4
-         */
-        int32_t integer;
-        /**
-         * This token, interpreted as a native pointer.
-         * @stable ICU 2.4
-         */
-        void*   pointer;
-    };
-
-    /**
-     * Return a token containing an integer.
-     * @return a token containing an integer.
-     * @internal
-     */
-    inline static Token integerToken(int32_t);
-
-    /**
-     * Return a token containing a pointer.
-     * @return a token containing a pointer.
-     * @internal
-     */
-    inline static Token pointerToken(void*);
-
-    /**
-     * A function that creates and returns a Transliterator.  When
-     * invoked, it will be passed the ID string that is being
-     * instantiated, together with the context pointer that was passed
-     * in when the factory function was first registered.  Many
-     * factory functions will ignore both parameters, however,
-     * functions that are registered to more than one ID may use the
-     * ID or the context parameter to parameterize the transliterator
-     * they create.
-     * @param ID      the string identifier for this transliterator
-     * @param context a context pointer that will be stored and
-     *                later passed to the factory function when an ID matching
-     *                the registration ID is being instantiated with this factory.
-     * @stable ICU 2.4
-     */
-    typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
-
-protected:
-
-    /**
-     * Default constructor.
-     * @param ID the string identifier for this transliterator
-     * @param adoptedFilter the filter.  Any character for which
-     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
-     * altered by this transliterator.  If <tt>filter</tt> is
-     * <tt>null</tt> then no filtering is applied.
-     * @stable ICU 2.4
-     */
-    Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
-
-    /**
-     * Copy constructor.
-     * @stable ICU 2.4
-     */
-    Transliterator(const Transliterator&);
-
-    /**
-     * Assignment operator.
-     * @stable ICU 2.4
-     */
-    Transliterator& operator=(const Transliterator&);
-
-    /**
-     * Create a transliterator from a basic ID.  This is an ID
-     * containing only the forward direction source, target, and
-     * variant.
-     * @param id a basic ID of the form S-T or S-T/V.
-     * @param canon canonical ID to assign to the object, or
-     * NULL to leave the ID unchanged
-     * @return a newly created Transliterator or null if the ID is
-     * invalid.
-     * @stable ICU 2.4
-     */
-    static Transliterator* createBasicInstance(const UnicodeString& id,
-                                               const UnicodeString* canon);
-
-    friend class TransliteratorParser; // for parseID()
-    friend class TransliteratorIDParser; // for createBasicInstance()
-    friend class TransliteratorAlias; // for setID()
-
-public:
-
-    /**
-     * Destructor.
-     * @stable ICU 2.0
-     */
-    virtual ~Transliterator();
-
-    /**
-     * Implements Cloneable.
-     * All subclasses are encouraged to implement this method if it is
-     * possible and reasonable to do so.  Subclasses that are to be
-     * registered with the system using <tt>registerInstance()</tt>
-     * are required to implement this method.  If a subclass does not
-     * implement clone() properly and is registered with the system
-     * using registerInstance(), then the default clone() implementation
-     * will return null, and calls to createInstance() will fail.
-     *
-     * @return a copy of the object.
-     * @see #registerInstance
-     * @stable ICU 2.0
-     */
-    virtual Transliterator* clone() const;
-
-    /**
-     * Transliterates a segment of a string, with optional filtering.
-     *
-     * @param text the string to be transliterated
-     * @param start the beginning index, inclusive; <code>0 <= start
-     * <= limit</code>.
-     * @param limit the ending index, exclusive; <code>start <= limit
-     * <= text.length()</code>.
-     * @return The new limit index.  The text previously occupying <code>[start,
-     * limit)</code> has been transliterated, possibly to a string of a different
-     * length, at <code>[start, </code><em>new-limit</em><code>)</code>, where
-     * <em>new-limit</em> is the return value. If the input offsets are out of bounds,
-     * the returned value is -1 and the input string remains unchanged.
-     * @stable ICU 2.0
-     */
-    virtual int32_t transliterate(Replaceable& text,
-                                  int32_t start, int32_t limit) const;
-
-    /**
-     * Transliterates an entire string in place. Convenience method.
-     * @param text the string to be transliterated
-     * @stable ICU 2.0
-     */
-    virtual void transliterate(Replaceable& text) const;
-
-    /**
-     * Transliterates the portion of the text buffer that can be
-     * transliterated unambiguosly after new text has been inserted,
-     * typically as a result of a keyboard event.  The new text in
-     * <code>insertion</code> will be inserted into <code>text</code>
-     * at <code>index.limit</code>, advancing
-     * <code>index.limit</code> by <code>insertion.length()</code>.
-     * Then the transliterator will try to transliterate characters of
-     * <code>text</code> between <code>index.cursor</code> and
-     * <code>index.limit</code>.  Characters before
-     * <code>index.cursor</code> will not be changed.
-     *
-     * <p>Upon return, values in <code>index</code> will be updated.
-     * <code>index.start</code> will be advanced to the first
-     * character that future calls to this method will read.
-     * <code>index.cursor</code> and <code>index.limit</code> will
-     * be adjusted to delimit the range of text that future calls to
-     * this method may change.
-     *
-     * <p>Typical usage of this method begins with an initial call
-     * with <code>index.start</code> and <code>index.limit</code>
-     * set to indicate the portion of <code>text</code> to be
-     * transliterated, and <code>index.cursor == index.start</code>.
-     * Thereafter, <code>index</code> can be used without
-     * modification in future calls, provided that all changes to
-     * <code>text</code> are made via this method.
-     *
-     * <p>This method assumes that future calls may be made that will
-     * insert new text into the buffer.  As a result, it only performs
-     * unambiguous transliterations.  After the last call to this
-     * method, there may be untransliterated text that is waiting for
-     * more input to resolve an ambiguity.  In order to perform these
-     * pending transliterations, clients should call {@link
-     * #finishTransliteration } after the last call to this
-     * method has been made.
-     *
-     * @param text the buffer holding transliterated and untransliterated text
-     * @param index an array of three integers.
-     *
-     * <ul><li><code>index.start</code>: the beginning index,
-     * inclusive; <code>0 <= index.start <= index.limit</code>.
-     *
-     * <li><code>index.limit</code>: the ending index, exclusive;
-     * <code>index.start <= index.limit <= text.length()</code>.
-     * <code>insertion</code> is inserted at
-     * <code>index.limit</code>.
-     *
-     * <li><code>index.cursor</code>: the next character to be
-     * considered for transliteration; <code>index.start <=
-     * index.cursor <= index.limit</code>.  Characters before
-     * <code>index.cursor</code> will not be changed by future calls
-     * to this method.</ul>
-     *
-     * @param insertion text to be inserted and possibly
-     * transliterated into the translation buffer at
-     * <code>index.limit</code>.  If <code>null</code> then no text
-     * is inserted.
-     * @param status    Output param to filled in with a success or an error.
-     * @see #handleTransliterate
-     * @exception IllegalArgumentException if <code>index</code>
-     * is invalid
-     * @see UTransPosition
-     * @stable ICU 2.0
-     */
-    virtual void transliterate(Replaceable& text, UTransPosition& index,
-                               const UnicodeString& insertion,
-                               UErrorCode& status) const;
-
-    /**
-     * Transliterates the portion of the text buffer that can be
-     * transliterated unambiguosly after a new character has been
-     * inserted, typically as a result of a keyboard event.  This is a
-     * convenience method.
-     * @param text the buffer holding transliterated and
-     * untransliterated text
-     * @param index an array of three integers.
-     * @param insertion text to be inserted and possibly
-     * transliterated into the translation buffer at
-     * <code>index.limit</code>.
-     * @param status    Output param to filled in with a success or an error.
-     * @see #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const
-     * @stable ICU 2.0
-     */
-    virtual void transliterate(Replaceable& text, UTransPosition& index,
-                               UChar32 insertion,
-                               UErrorCode& status) const;
-
-    /**
-     * Transliterates the portion of the text buffer that can be
-     * transliterated unambiguosly.  This is a convenience method; see
-     * {@link
-     * #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const }
-     * for details.
-     * @param text the buffer holding transliterated and
-     * untransliterated text
-     * @param index an array of three integers.  See {@link
-     * #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const }.
-     * @param status    Output param to filled in with a success or an error.
-     * @see #transliterate(Replaceable, int[], String)
-     * @stable ICU 2.0
-     */
-    virtual void transliterate(Replaceable& text, UTransPosition& index,
-                               UErrorCode& status) const;
-
-    /**
-     * Finishes any pending transliterations that were waiting for
-     * more characters.  Clients should call this method as the last
-     * call after a sequence of one or more calls to
-     * <code>transliterate()</code>.
-     * @param text the buffer holding transliterated and
-     * untransliterated text.
-     * @param index the array of indices previously passed to {@link
-     * #transliterate }
-     * @stable ICU 2.0
-     */
-    virtual void finishTransliteration(Replaceable& text,
-                                       UTransPosition& index) const;
-
-private:
-
-    /**
-     * This internal method does incremental transliteration.  If the
-     * 'insertion' is non-null then we append it to 'text' before
-     * proceeding.  This method calls through to the pure virtual
-     * framework method handleTransliterate() to do the actual
-     * work.
-     * @param text the buffer holding transliterated and
-     * untransliterated text
-     * @param index an array of three integers.  See {@link
-     * #transliterate(Replaceable, int[], String)}.
-     * @param insertion text to be inserted and possibly
-     * transliterated into the translation buffer at
-     * <code>index.limit</code>.
-     * @param status    Output param to filled in with a success or an error.
-     */
-    void _transliterate(Replaceable& text,
-                        UTransPosition& index,
-                        const UnicodeString* insertion,
-                        UErrorCode &status) const;
-
-protected:
-
-    /**
-     * Abstract method that concrete subclasses define to implement
-     * their transliteration algorithm.  This method handles both
-     * incremental and non-incremental transliteration.  Let
-     * <code>originalStart</code> refer to the value of
-     * <code>pos.start</code> upon entry.
-     *
-     * <ul>
-     *  <li>If <code>incremental</code> is false, then this method
-     *  should transliterate all characters between
-     *  <code>pos.start</code> and <code>pos.limit</code>. Upon return
-     *  <code>pos.start</code> must == <code> pos.limit</code>.</li>
-     *
-     *  <li>If <code>incremental</code> is true, then this method
-     *  should transliterate all characters between
-     *  <code>pos.start</code> and <code>pos.limit</code> that can be
-     *  unambiguously transliterated, regardless of future insertions
-     *  of text at <code>pos.limit</code>.  Upon return,
-     *  <code>pos.start</code> should be in the range
-     *  [<code>originalStart</code>, <code>pos.limit</code>).
-     *  <code>pos.start</code> should be positioned such that
-     *  characters [<code>originalStart</code>, <code>
-     *  pos.start</code>) will not be changed in the future by this
-     *  transliterator and characters [<code>pos.start</code>,
-     *  <code>pos.limit</code>) are unchanged.</li>
-     * </ul>
-     *
-     * <p>Implementations of this method should also obey the
-     * following invariants:</p>
-     *
-     * <ul>
-     *  <li> <code>pos.limit</code> and <code>pos.contextLimit</code>
-     *  should be updated to reflect changes in length of the text
-     *  between <code>pos.start</code> and <code>pos.limit</code>. The
-     *  difference <code> pos.contextLimit - pos.limit</code> should
-     *  not change.</li>
-     *
-     *  <li><code>pos.contextStart</code> should not change.</li>
-     *
-     *  <li>Upon return, neither <code>pos.start</code> nor
-     *  <code>pos.limit</code> should be less than
-     *  <code>originalStart</code>.</li>
-     *
-     *  <li>Text before <code>originalStart</code> and text after
-     *  <code>pos.limit</code> should not change.</li>
-     *
-     *  <li>Text before <code>pos.contextStart</code> and text after
-     *  <code> pos.contextLimit</code> should be ignored.</li>
-     * </ul>
-     *
-     * <p>Subclasses may safely assume that all characters in
-     * [<code>pos.start</code>, <code>pos.limit</code>) are filtered.
-     * In other words, the filter has already been applied by the time
-     * this method is called.  See
-     * <code>filteredTransliterate()</code>.
-     *
-     * <p>This method is <b>not</b> for public consumption.  Calling
-     * this method directly will transliterate
-     * [<code>pos.start</code>, <code>pos.limit</code>) without
-     * applying the filter. End user code should call <code>
-     * transliterate()</code> instead of this method. Subclass code
-     * and wrapping transliterators should call
-     * <code>filteredTransliterate()</code> instead of this method.<p>
-     *
-     * @param text the buffer holding transliterated and
-     * untransliterated text
-     *
-     * @param pos the indices indicating the start, limit, context
-     * start, and context limit of the text.
-     *
-     * @param incremental if true, assume more text may be inserted at
-     * <code>pos.limit</code> and act accordingly.  Otherwise,
-     * transliterate all text between <code>pos.start</code> and
-     * <code>pos.limit</code> and move <code>pos.start</code> up to
-     * <code>pos.limit</code>.
-     *
-     * @see #transliterate
-     * @stable ICU 2.4
-     */
-    virtual void handleTransliterate(Replaceable& text,
-                                     UTransPosition& pos,
-                                     UBool incremental) const = 0;
-
-public:
-    /**
-     * Transliterate a substring of text, as specified by index, taking filters
-     * into account.  This method is for subclasses that need to delegate to
-     * another transliterator, such as CompoundTransliterator.
-     * @param text the text to be transliterated
-     * @param index the position indices
-     * @param incremental if TRUE, then assume more characters may be inserted
-     * at index.limit, and postpone processing to accomodate future incoming
-     * characters
-     * @stable ICU 2.4
-     */
-    virtual void filteredTransliterate(Replaceable& text,
-                                       UTransPosition& index,
-                                       UBool incremental) const;
-
-private:
-
-    /**
-     * Top-level transliteration method, handling filtering, incremental and
-     * non-incremental transliteration, and rollback.  All transliteration
-     * public API methods eventually call this method with a rollback argument
-     * of TRUE.  Other entities may call this method but rollback should be
-     * FALSE.
-     *
-     * <p>If this transliterator has a filter, break up the input text into runs
-     * of unfiltered characters.  Pass each run to
-     * <subclass>.handleTransliterate().
-     *
-     * <p>In incremental mode, if rollback is TRUE, perform a special
-     * incremental procedure in which several passes are made over the input
-     * text, adding one character at a time, and committing successful
-     * transliterations as they occur.  Unsuccessful transliterations are rolled
-     * back and retried with additional characters to give correct results.
-     *
-     * @param text the text to be transliterated
-     * @param index the position indices
-     * @param incremental if TRUE, then assume more characters may be inserted
-     * at index.limit, and postpone processing to accomodate future incoming
-     * characters
-     * @param rollback if TRUE and if incremental is TRUE, then perform special
-     * incremental processing, as described above, and undo partial
-     * transliterations where necessary.  If incremental is FALSE then this
-     * parameter is ignored.
-     */
-    virtual void filteredTransliterate(Replaceable& text,
-                                       UTransPosition& index,
-                                       UBool incremental,
-                                       UBool rollback) const;
-
-public:
-
-    /**
-     * Returns the length of the longest context required by this transliterator.
-     * This is <em>preceding</em> context.  The default implementation supplied
-     * by <code>Transliterator</code> returns zero; subclasses
-     * that use preceding context should override this method to return the
-     * correct value.  For example, if a transliterator translates "ddd" (where
-     * d is any digit) to "555" when preceded by "(ddd)", then the preceding
-     * context length is 5, the length of "(ddd)".
-     *
-     * @return The maximum number of preceding context characters this
-     * transliterator needs to examine
-     * @stable ICU 2.0
-     */
-    int32_t getMaximumContextLength(void) const;
-
-protected:
-
-    /**
-     * Method for subclasses to use to set the maximum context length.
-     * @param maxContextLength the new value to be set.
-     * @see #getMaximumContextLength
-     * @stable ICU 2.4
-     */
-    void setMaximumContextLength(int32_t maxContextLength);
-
-public:
-
-    /**
-     * Returns a programmatic identifier for this transliterator.
-     * If this identifier is passed to <code>createInstance()</code>, it
-     * will return this object, if it has been registered.
-     * @return a programmatic identifier for this transliterator.
-     * @see #registerInstance
-     * @see #registerFactory
-     * @see #getAvailableIDs
-     * @stable ICU 2.0
-     */
-    virtual const UnicodeString& getID(void) const;
-
-    /**
-     * Returns a name for this transliterator that is appropriate for
-     * display to the user in the default locale.  See {@link
-     * #getDisplayName } for details.
-     * @param ID     the string identifier for this transliterator
-     * @param result Output param to receive the display name
-     * @return       A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
-                                         UnicodeString& result);
-
-    /**
-     * Returns a name for this transliterator that is appropriate for
-     * display to the user in the given locale.  This name is taken
-     * from the locale resource data in the standard manner of the
-     * <code>java.text</code> package.
-     *
-     * <p>If no localized names exist in the system resource bundles,
-     * a name is synthesized using a localized
-     * <code>MessageFormat</code> pattern from the resource data.  The
-     * arguments to this pattern are an integer followed by one or two
-     * strings.  The integer is the number of strings, either 1 or 2.
-     * The strings are formed by splitting the ID for this
-     * transliterator at the first '-'.  If there is no '-', then the
-     * entire ID forms the only string.
-     * @param ID       the string identifier for this transliterator
-     * @param inLocale the Locale in which the display name should be
-     *                 localized.
-     * @param result   Output param to receive the display name
-     * @return         A reference to 'result'.
-     * @stable ICU 2.0
-     */
-    static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
-                                         const Locale& inLocale,
-                                         UnicodeString& result);
-
-    /**
-     * Returns the filter used by this transliterator, or <tt>NULL</tt>
-     * if this transliterator uses no filter.
-     * @return the filter used by this transliterator, or <tt>NULL</tt>
-     *         if this transliterator uses no filter.
-     * @stable ICU 2.0
-     */
-    const UnicodeFilter* getFilter(void) const;
-
-    /**
-     * Returns the filter used by this transliterator, or <tt>NULL</tt> if this
-     * transliterator uses no filter.  The caller must eventually delete the
-     * result.  After this call, this transliterator's filter is set to
-     * <tt>NULL</tt>.
-     * @return the filter used by this transliterator, or <tt>NULL</tt> if this
-     *         transliterator uses no filter.
-     * @stable ICU 2.4
-     */
-    UnicodeFilter* orphanFilter(void);
-
-    /**
-     * Changes the filter used by this transliterator.  If the filter
-     * is set to <tt>null</tt> then no filtering will occur.
-     *
-     * <p>Callers must take care if a transliterator is in use by
-     * multiple threads.  The filter should not be changed by one
-     * thread while another thread may be transliterating.
-     * @param adoptedFilter the new filter to be adopted.
-     * @stable ICU 2.0
-     */
-    void adoptFilter(UnicodeFilter* adoptedFilter);
-
-    /**
-     * Returns this transliterator's inverse.  See the class
-     * documentation for details.  This implementation simply inverts
-     * the two entities in the ID and attempts to retrieve the
-     * resulting transliterator.  That is, if <code>getID()</code>
-     * returns "A-B", then this method will return the result of
-     * <code>createInstance("B-A")</code>, or <code>null</code> if that
-     * call fails.
-     *
-     * <p>Subclasses with knowledge of their inverse may wish to
-     * override this method.
-     *
-     * @param status Output param to filled in with a success or an error.
-     * @return a transliterator that is an inverse, not necessarily
-     * exact, of this transliterator, or <code>null</code> if no such
-     * transliterator is registered.
-     * @see #registerInstance
-     * @stable ICU 2.0
-     */
-    Transliterator* createInverse(UErrorCode& status) const;
-
-    /**
-     * Returns a <code>Transliterator</code> object given its ID.
-     * The ID must be either a system transliterator ID or a ID registered
-     * using <code>registerInstance()</code>.
-     *
-     * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
-     * @param dir        either FORWARD or REVERSE.
-     * @param parseError Struct to recieve information on position
-     *                   of error if an error is encountered
-     * @param status     Output param to filled in with a success or an error.
-     * @return A <code>Transliterator</code> object with the given ID
-     * @see #registerInstance
-     * @see #getAvailableIDs
-     * @see #getID
-     * @stable ICU 2.0
-     */
-    static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
-                                          UTransDirection dir,
-                                          UParseError& parseError,
-                                          UErrorCode& status);
-
-    /**
-     * Returns a <code>Transliterator</code> object given its ID.
-     * The ID must be either a system transliterator ID or a ID registered
-     * using <code>registerInstance()</code>.
-     * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
-     * @param dir        either FORWARD or REVERSE.
-     * @param status     Output param to filled in with a success or an error.
-     * @return A <code>Transliterator</code> object with the given ID
-     * @stable ICU 2.0
-     */
-    static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
-                                          UTransDirection dir,
-                                          UErrorCode& status);
-
-    /**
-     * Returns a <code>Transliterator</code> object constructed from
-     * the given rule string.  This will be a RuleBasedTransliterator,
-     * if the rule string contains only rules, or a
-     * CompoundTransliterator, if it contains ID blocks, or a
-     * NullTransliterator, if it contains ID blocks which parse as
-     * empty for the given direction.
-     * @param ID            the id for the transliterator.
-     * @param rules         rules, separated by ';'
-     * @param dir           either FORWARD or REVERSE.
-     * @param parseError    Struct to recieve information on position
-     *                      of error if an error is encountered
-     * @param status        Output param set to success/failure code.
-     * @stable ICU 2.0
-     */
-    static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
-                                           const UnicodeString& rules,
-                                           UTransDirection dir,
-                                           UParseError& parseError,
-                                           UErrorCode& status);
-
-    /**
-     * Create a rule string that can be passed to createFromRules()
-     * to recreate this transliterator.
-     * @param result the string to receive the rules.  Previous
-     * contents will be deleted.
-     * @param escapeUnprintable if TRUE then convert unprintable
-     * character to their hex escape representations, \\uxxxx or
-     * \\Uxxxxxxxx.  Unprintable characters are those other than
-     * U+000A, U+0020..U+007E.
-     * @stable ICU 2.0
-     */
-    virtual UnicodeString& toRules(UnicodeString& result,
-                                   UBool escapeUnprintable) const;
-
-    /**
-     * Return the number of elements that make up this transliterator.
-     * For example, if the transliterator "NFD;Jamo-Latin;Latin-Greek"
-     * were created, the return value of this method would be 3.
-     *
-     * <p>If this transliterator is not composed of other
-     * transliterators, then this method returns 1.
-     * @return the number of transliterators that compose this
-     * transliterator, or 1 if this transliterator is not composed of
-     * multiple transliterators
-     * @stable ICU 3.0
-     */
-    int32_t countElements() const;
-
-    /**
-     * Return an element that makes up this transliterator.  For
-     * example, if the transliterator "NFD;Jamo-Latin;Latin-Greek"
-     * were created, the return value of this method would be one
-     * of the three transliterator objects that make up that
-     * transliterator: [NFD, Jamo-Latin, Latin-Greek].
-     *
-     * <p>If this transliterator is not composed of other
-     * transliterators, then this method will return a reference to
-     * this transliterator when given the index 0.
-     * @param index a value from 0..countElements()-1 indicating the
-     * transliterator to return
-     * @param ec input-output error code
-     * @return one of the transliterators that makes up this
-     * transliterator, if this transliterator is made up of multiple
-     * transliterators, otherwise a reference to this object if given
-     * an index of 0
-     * @stable ICU 3.0
-     */
-    const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
-
-    /**
-     * Returns the set of all characters that may be modified in the
-     * input text by this Transliterator.  This incorporates this
-     * object's current filter; if the filter is changed, the return
-     * value of this function will change.  The default implementation
-     * returns an empty set.  Some subclasses may override {@link
-     * #handleGetSourceSet } to return a more precise result.  The
-     * return result is approximate in any case and is intended for
-     * use by tests, tools, or utilities.
-     * @param result receives result set; previous contents lost
-     * @return a reference to result
-     * @see #getTargetSet
-     * @see #handleGetSourceSet
-     * @stable ICU 2.4
-     */
-    UnicodeSet& getSourceSet(UnicodeSet& result) const;
-
-    /**
-     * Framework method that returns the set of all characters that
-     * may be modified in the input text by this Transliterator,
-     * ignoring the effect of this object's filter.  The base class
-     * implementation returns the empty set.  Subclasses that wish to
-     * implement this should override this method.
-     * @return the set of characters that this transliterator may
-     * modify.  The set may be modified, so subclasses should return a
-     * newly-created object.
-     * @param result receives result set; previous contents lost
-     * @see #getSourceSet
-     * @see #getTargetSet
-     * @stable ICU 2.4
-     */
-    virtual void handleGetSourceSet(UnicodeSet& result) const;
-
-    /**
-     * Returns the set of all characters that may be generated as
-     * replacement text by this transliterator.  The default
-     * implementation returns the empty set.  Some subclasses may
-     * override this method to return a more precise result.  The
-     * return result is approximate in any case and is intended for
-     * use by tests, tools, or utilities requiring such
-     * meta-information.
-     * @param result receives result set; previous contents lost
-     * @return a reference to result
-     * @see #getTargetSet
-     * @stable ICU 2.4
-     */
-    virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
-
-public:
-
-    /**
-     * Registers a factory function that creates transliterators of
-     * a given ID.
-     * @param id the ID being registered
-     * @param factory a function pointer that will be copied and
-     * called later when the given ID is passed to createInstance()
-     * @param context a context pointer that will be stored and
-     * later passed to the factory function when an ID matching
-     * the registration ID is being instantiated with this factory.
-     * @stable ICU 2.0
-     */
-    static void U_EXPORT2 registerFactory(const UnicodeString& id,
-                                Factory factory,
-                                Token context);
-
-    /**
-     * Registers an instance <tt>obj</tt> of a subclass of
-     * <code>Transliterator</code> with the system.  When
-     * <tt>createInstance()</tt> is called with an ID string that is
-     * equal to <tt>obj->getID()</tt>, then <tt>obj->clone()</tt> is
-     * returned.
-     *
-     * After this call the Transliterator class owns the adoptedObj
-     * and will delete it.
-     *
-     * @param adoptedObj an instance of subclass of
-     * <code>Transliterator</code> that defines <tt>clone()</tt>
-     * @see #createInstance
-     * @see #registerFactory
-     * @see #unregister
-     * @stable ICU 2.0
-     */
-    static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
-
-    /**
-     * Registers an ID string as an alias of another ID string.
-     * That is, after calling this function, <tt>createInstance(aliasID)</tt>
-     * will return the same thing as <tt>createInstance(realID)</tt>.
-     * This is generally used to create shorter, more mnemonic aliases
-     * for long compound IDs.
-     *
-     * @param aliasID The new ID being registered.
-     * @param realID The ID that the new ID is to be an alias for.
-     * This can be a compound ID and can include filters and should
-     * refer to transliterators that have already been registered with
-     * the framework, although this isn't checked.
-     * @stable ICU 3.6
-     */
-     static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
-                                         const UnicodeString& realID);
-
-protected:
-
-    /**
-     * @internal
-     * @param id the ID being registered
-     * @param factory a function pointer that will be copied and
-     * called later when the given ID is passed to createInstance()
-     * @param context a context pointer that will be stored and
-     * later passed to the factory function when an ID matching
-     * the registration ID is being instantiated with this factory.
-     */
-    static void _registerFactory(const UnicodeString& id,
-                                 Factory factory,
-                                 Token context);
-
-    /**
-     * @internal
-     */
-    static void _registerInstance(Transliterator* adoptedObj);
-
-    /**
-     * @internal
-     */
-    static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
-
-    /**
-     * Register two targets as being inverses of one another.  For
-     * example, calling registerSpecialInverse("NFC", "NFD", true) causes
-     * Transliterator to form the following inverse relationships:
-     *
-     * <pre>NFC => NFD
-     * Any-NFC => Any-NFD
-     * NFD => NFC
-     * Any-NFD => Any-NFC</pre>
-     *
-     * (Without the special inverse registration, the inverse of NFC
-     * would be NFC-Any.)  Note that NFD is shorthand for Any-NFD, but
-     * that the presence or absence of "Any-" is preserved.
-     *
-     * <p>The relationship is symmetrical; registering (a, b) is
-     * equivalent to registering (b, a).
-     *
-     * <p>The relevant IDs must still be registered separately as
-     * factories or classes.
-     *
-     * <p>Only the targets are specified.  Special inverses always
-     * have the form Any-Target1 <=> Any-Target2.  The target should
-     * have canonical casing (the casing desired to be produced when
-     * an inverse is formed) and should contain no whitespace or other
-     * extraneous characters.
-     *
-     * @param target the target against which to register the inverse
-     * @param inverseTarget the inverse of target, that is
-     * Any-target.getInverse() => Any-inverseTarget
-     * @param bidirectional if true, register the reverse relation
-     * as well, that is, Any-inverseTarget.getInverse() => Any-target
-     * @internal
-     */
-    static void _registerSpecialInverse(const UnicodeString& target,
-                                        const UnicodeString& inverseTarget,
-                                        UBool bidirectional);
-
-public:
-
-    /**
-     * Unregisters a transliterator or class.  This may be either
-     * a system transliterator or a user transliterator or class.
-     * Any attempt to construct an unregistered transliterator based
-     * on its ID will fail.
-     *
-     * @param ID the ID of the transliterator or class
-     * @return the <code>Object</code> that was registered with
-     * <code>ID</code>, or <code>null</code> if none was
-     * @see #registerInstance
-     * @see #registerFactory
-     * @stable ICU 2.0
-     */
-    static void U_EXPORT2 unregister(const UnicodeString& ID);
-
-public:
-
-    /**
-     * Return a StringEnumeration over the IDs available at the time of the
-     * call, including user-registered IDs.
-     * @param ec input-output error code
-     * @return a newly-created StringEnumeration over the transliterators
-     * available at the time of the call. The caller should delete this object
-     * when done using it.
-     * @stable ICU 3.0
-     */
-    static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
-
-    /**
-     * Return the number of registered source specifiers.
-     * @return the number of registered source specifiers.
-     * @stable ICU 2.0
-     */
-    static int32_t U_EXPORT2 countAvailableSources(void);
-
-    /**
-     * Return a registered source specifier.
-     * @param index which specifier to return, from 0 to n-1, where
-     * n = countAvailableSources()
-     * @param result fill-in paramter to receive the source specifier.
-     * If index is out of range, result will be empty.
-     * @return reference to result
-     * @stable ICU 2.0
-     */
-    static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
-                                             UnicodeString& result);
-
-    /**
-     * Return the number of registered target specifiers for a given
-     * source specifier.
-     * @param source the given source specifier.
-     * @return the number of registered target specifiers for a given
-     *         source specifier.
-     * @stable ICU 2.0
-     */
-    static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
-
-    /**
-     * Return a registered target specifier for a given source.
-     * @param index which specifier to return, from 0 to n-1, where
-     * n = countAvailableTargets(source)
-     * @param source the source specifier
-     * @param result fill-in paramter to receive the target specifier.
-     * If source is invalid or if index is out of range, result will
-     * be empty.
-     * @return reference to result
-     * @stable ICU 2.0
-     */
-    static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
-                                             const UnicodeString& source,
-                                             UnicodeString& result);
-
-    /**
-     * Return the number of registered variant specifiers for a given
-     * source-target pair.
-     * @param source    the source specifiers.
-     * @param target    the target specifiers.
-     * @stable ICU 2.0
-     */
-    static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
-                                          const UnicodeString& target);
-
-    /**
-     * Return a registered variant specifier for a given source-target
-     * pair.
-     * @param index which specifier to return, from 0 to n-1, where
-     * n = countAvailableVariants(source, target)
-     * @param source the source specifier
-     * @param target the target specifier
-     * @param result fill-in paramter to receive the variant
-     * specifier.  If source is invalid or if target is invalid or if
-     * index is out of range, result will be empty.
-     * @return reference to result
-     * @stable ICU 2.0
-     */
-    static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
-                                              const UnicodeString& source,
-                                              const UnicodeString& target,
-                                              UnicodeString& result);
-
-protected:
-
-    /**
-     * Non-mutexed internal method
-     * @internal
-     */
-    static int32_t _countAvailableSources(void);
-
-    /**
-     * Non-mutexed internal method
-     * @internal
-     */
-    static UnicodeString& _getAvailableSource(int32_t index,
-                                              UnicodeString& result);
-
-    /**
-     * Non-mutexed internal method
-     * @internal
-     */
-    static int32_t _countAvailableTargets(const UnicodeString& source);
-
-    /**
-     * Non-mutexed internal method
-     * @internal
-     */
-    static UnicodeString& _getAvailableTarget(int32_t index,
-                                              const UnicodeString& source,
-                                              UnicodeString& result);
-
-    /**
-     * Non-mutexed internal method
-     * @internal
-     */
-    static int32_t _countAvailableVariants(const UnicodeString& source,
-                                           const UnicodeString& target);
-
-    /**
-     * Non-mutexed internal method
-     * @internal
-     */
-    static UnicodeString& _getAvailableVariant(int32_t index,
-                                               const UnicodeString& source,
-                                               const UnicodeString& target,
-                                               UnicodeString& result);
-
-protected:
-
-    /**
-     * Set the ID of this transliterators.  Subclasses shouldn't do
-     * this, unless the underlying script behavior has changed.
-     * @param id the new id t to be set.
-     * @stable ICU 2.4
-     */
-    void setID(const UnicodeString& id);
-
-public:
-
-    /**
-     * Return the class ID for this class.  This is useful only for
-     * comparing to a return value from getDynamicClassID().
-     * Note that Transliterator is an abstract base class, and therefor
-     * no fully constructed object will  have a dynamic
-     * UCLassID that equals the UClassID returned from
-     * TRansliterator::getStaticClassID().
-     * @return       The class ID for class Transliterator.
-     * @stable ICU 2.0
-     */
-    static UClassID U_EXPORT2 getStaticClassID(void);
-
-    /**
-     * Returns a unique class ID <b>polymorphically</b>.  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.
-     *
-     * <p>Concrete subclasses of Transliterator must use the
-     *    UOBJECT_DEFINE_RTTI_IMPLEMENTATION macro from
-     *    uobject.h to provide the RTTI functions.
-     *
-     * @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;
-
-private:
-    static UBool initializeRegistry(UErrorCode &status);
-
-public:
-    /**
-     * Return the number of IDs currently registered with the system.
-     * To retrieve the actual IDs, call getAvailableID(i) with
-     * i from 0 to countAvailableIDs() - 1.
-     * @return the number of IDs currently registered with the system.
-     * @obsolete ICU 3.4 use getAvailableIDs() instead
-     */
-    static int32_t U_EXPORT2 countAvailableIDs(void);
-
-    /**
-     * Return the index-th available ID.  index must be between 0
-     * and countAvailableIDs() - 1, inclusive.  If index is out of
-     * range, the result of getAvailableID(0) is returned.
-     * @param index the given ID index.
-     * @return      the index-th available ID.  index must be between 0
-     *              and countAvailableIDs() - 1, inclusive.  If index is out of
-     *              range, the result of getAvailableID(0) is returned.
-     * @obsolete ICU 3.4 use getAvailableIDs() instead; this function
-     * is not thread safe, since it returns a reference to storage that
-     * may become invalid if another thread calls unregister
-     */
-    static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
-};
-
-inline int32_t Transliterator::getMaximumContextLength(void) const {
-    return maximumContextLength;
-}
-
-inline void Transliterator::setID(const UnicodeString& id) {
-    ID = id;
-    // NUL-terminate the ID string, which is a non-aliased copy.
-    ID.append((UChar)0);
-    ID.truncate(ID.length()-1);
-}
-
-inline Transliterator::Token Transliterator::integerToken(int32_t i) {
-    Token t;
-    t.integer = i;
-    return t;
-}
-
-inline Transliterator::Token Transliterator::pointerToken(void* p) {
-    Token t;
-    t.pointer = p;
-    return t;
-}
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_TRANSLITERATION */
-
-#endif
diff --git a/source/i18n/unicode/tzrule.h b/source/i18n/unicode/tzrule.h
deleted file mode 100644
index afa4014..0000000
--- a/source/i18n/unicode/tzrule.h
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2008, International Business Machines Corporation and    *
-* others. All Rights Reserved.                                                *
-*******************************************************************************
-*/
-#ifndef TZRULE_H
-#define TZRULE_H
-
-/**
- * \file 
- * \brief C++ API: Time zone rule classes
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-#include "unicode/unistr.h"
-#include "unicode/dtrule.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * <code>TimeZoneRule</code> is a class representing a rule for time zone.
- * <code>TimeZoneRule</code> has a set of time zone attributes, such as zone name,
- * raw offset (UTC offset for standard time) and daylight saving time offset.
- * 
- * @stable ICU 3.8
- */
-class U_I18N_API TimeZoneRule : public UObject {
-public:
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~TimeZoneRule();
-
-    /**
-     * Clone this TimeZoneRule object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return  A copy of the object.
-     * @stable ICU 3.8
-     */
-    virtual TimeZoneRule* clone(void) const = 0;
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator==(const TimeZoneRule& that) const;
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator!=(const TimeZoneRule& that) const;
-
-    /**
-     * Fills in "name" with the name of this time zone.
-     * @param name  Receives the name of this time zone.
-     * @return  A reference to "name"
-     * @stable ICU 3.8
-     */
-    UnicodeString& getName(UnicodeString& name) const;
-
-    /**
-     * Gets the standard time offset.
-     * @return  The standard time offset from UTC in milliseconds.
-     * @stable ICU 3.8
-     */
-    int32_t getRawOffset(void) const;
-
-    /**
-     * Gets the amount of daylight saving delta time from the standard time.
-     * @return  The amount of daylight saving offset used by this rule
-     *          in milliseconds.
-     * @stable ICU 3.8
-     */
-    int32_t getDSTSavings(void) const;
-
-    /**
-     * Returns if this rule represents the same rule and offsets as another.
-     * When two <code>TimeZoneRule</code> objects differ only its names, this method
-     * returns true.
-     * @param other The <code>TimeZoneRule</code> object to be compared with.
-     * @return  true if the other <code>TimeZoneRule</code> is the same as this one.
-     * @stable ICU 3.8
-     */
-    virtual UBool isEquivalentTo(const TimeZoneRule& other) const;
-
-    /**
-     * Gets the very first time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the very first time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
-
-    /**
-     * Gets the final time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the final time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
-
-    /**
-     * Gets the first time when this rule takes effect after the specified time.
-     * @param base              The first start time after this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The first time when this rule takes effect after
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const = 0;
-
-    /**
-     * Gets the most recent time when this rule takes effect before the specified time.
-     * @param base              The most recent time before this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The most recent time when this rule takes effect before
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const = 0;
-
-protected:
-
-    /**
-     * Constructs a <code>TimeZoneRule</code> with the name, the GMT offset of its
-     * standard time and the amount of daylight saving offset adjustment.
-     * @param name          The time zone name.
-     * @param rawOffset     The UTC offset of its standard time in milliseconds.
-     * @param dstSavings    The amount of daylight saving offset adjustment in milliseconds.
-     *                      If this ia a rule for standard time, the value of this argument is 0.
-     * @stable ICU 3.8
-     */
-    TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
-
-    /**
-     * Copy constructor.
-     * @param source    The TimeZoneRule object to be copied.
-     * @stable ICU 3.8
-     */
-    TimeZoneRule(const TimeZoneRule& source);
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    TimeZoneRule& operator=(const TimeZoneRule& right);
-
-private:
-    UnicodeString fName; // time name
-    int32_t fRawOffset;  // UTC offset of the standard time in milliseconds
-    int32_t fDSTSavings; // DST saving amount in milliseconds
-};
-
-/**
- * <code>InitialTimeZoneRule</code> represents a time zone rule
- * representing a time zone effective from the beginning and
- * has no actual start times.
- * @stable ICU 3.8
- */
-class U_I18N_API InitialTimeZoneRule : public TimeZoneRule {
-public:
-    /**
-     * Constructs an <code>InitialTimeZoneRule</code> with the name, the GMT offset of its
-     * standard time and the amount of daylight saving offset adjustment.
-     * @param name          The time zone name.
-     * @param rawOffset     The UTC offset of its standard time in milliseconds.
-     * @param dstSavings    The amount of daylight saving offset adjustment in milliseconds.
-     *                      If this ia a rule for standard time, the value of this argument is 0.
-     * @stable ICU 3.8
-     */
-    InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
-
-    /**
-     * Copy constructor.
-     * @param source    The InitialTimeZoneRule object to be copied.
-     * @stable ICU 3.8
-     */
-    InitialTimeZoneRule(const InitialTimeZoneRule& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~InitialTimeZoneRule();
-
-    /**
-     * Clone this InitialTimeZoneRule object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @stable ICU 3.8
-     */
-    virtual InitialTimeZoneRule* clone(void) const;
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    InitialTimeZoneRule& operator=(const InitialTimeZoneRule& right);
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator==(const TimeZoneRule& that) const;
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator!=(const TimeZoneRule& that) const;
-
-    /**
-     * Gets the time when this rule takes effect in the given year.
-     * @param year              The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the start time in the year.
-     * @return  true if this rule takes effect in the year and the result is set to
-     *          "result".
-     * @stable ICU 3.8
-     */
-    UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Returns if this rule represents the same rule and offsets as another.
-     * When two <code>TimeZoneRule</code> objects differ only its names, this method
-     * returns true.
-     * @param that  The <code>TimeZoneRule</code> object to be compared with.
-     * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
-     * @stable ICU 3.8
-     */
-    virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
-
-    /**
-     * Gets the very first time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the very first time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Gets the final time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the final time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Gets the first time when this rule takes effect after the specified time.
-     * @param base              The first start time after this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The first time when this rule takes effect after
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const;
-
-    /**
-     * Gets the most recent time when this rule takes effect before the specified time.
-     * @param base              The most recent time before this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The most recent time when this rule takes effect before
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const;
-
-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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-/**
- * <code>AnnualTimeZoneRule</code> is a class used for representing a time zone
- * rule which takes effect annually.  The calenday system used for the rule is
- * is based on Gregorian calendar
- * 
- * @stable ICU 3.8
- */
-class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule {
-public:
-    /**
-     * The constant representing the maximum year used for designating
-     * a rule is permanent.
-     */
-    static const int32_t MAX_YEAR;
-
-    /**
-     * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offset of its
-     * standard time, the amount of daylight saving offset adjustment, the annual start
-     * time rule and the start/until years.  The input DateTimeRule is copied by this
-     * constructor, so the caller remains responsible for deleting the object.
-     * @param name          The time zone name.
-     * @param rawOffset     The GMT offset of its standard time in milliseconds.
-     * @param dstSavings    The amount of daylight saving offset adjustment in
-     *                      milliseconds.  If this ia a rule for standard time,
-     *                      the value of this argument is 0.
-     * @param dateTimeRule  The start date/time rule repeated annually.
-     * @param startYear     The first year when this rule takes effect.
-     * @param endYear       The last year when this rule takes effect.  If this
-     *                      rule is effective forever in future, specify MAX_YEAR.
-     * @stable ICU 3.8
-     */
-    AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
-            const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear);
-
-    /**
-     * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offset of its
-     * standard time, the amount of daylight saving offset adjustment, the annual start
-     * time rule and the start/until years.  The input DateTimeRule object is adopted
-     * by this object, therefore, the caller must not delete the object.
-     * @param name          The time zone name.
-     * @param rawOffset     The GMT offset of its standard time in milliseconds.
-     * @param dstSavings    The amount of daylight saving offset adjustment in
-     *                      milliseconds.  If this ia a rule for standard time,
-     *                      the value of this argument is 0.
-     * @param dateTimeRule  The start date/time rule repeated annually.
-     * @param startYear     The first year when this rule takes effect.
-     * @param endYear       The last year when this rule takes effect.  If this
-     *                      rule is effective forever in future, specify MAX_YEAR.
-     * @stable ICU 3.8
-     */
-    AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
-            DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear);
-
-    /**
-     * Copy constructor.
-     * @param source    The AnnualTimeZoneRule object to be copied.
-     * @stable ICU 3.8
-     */
-    AnnualTimeZoneRule(const AnnualTimeZoneRule& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~AnnualTimeZoneRule();
-
-    /**
-     * Clone this AnnualTimeZoneRule object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @stable ICU 3.8
-     */
-    virtual AnnualTimeZoneRule* clone(void) const;
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    AnnualTimeZoneRule& operator=(const AnnualTimeZoneRule& right);
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator==(const TimeZoneRule& that) const;
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator!=(const TimeZoneRule& that) const;
-
-    /**
-     * Gets the start date/time rule used by this rule.
-     * @return  The <code>AnnualDateTimeRule</code> which represents the start date/time
-     *          rule used by this time zone rule.
-     * @stable ICU 3.8
-     */
-    const DateTimeRule* getRule(void) const;
-
-    /**
-     * Gets the first year when this rule takes effect.
-     * @return  The start year of this rule.  The year is in Gregorian calendar
-     *          with 0 == 1 BCE, -1 == 2 BCE, etc.
-     * @stable ICU 3.8
-     */
-    int32_t getStartYear(void) const;
-
-    /**
-     * Gets the end year when this rule takes effect.
-     * @return  The end year of this rule (inclusive). The year is in Gregorian calendar
-     *          with 0 == 1 BCE, -1 == 2 BCE, etc.
-     * @stable ICU 3.8
-     */
-    int32_t getEndYear(void) const;
-
-    /**
-     * Gets the time when this rule takes effect in the given year.
-     * @param year              The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the start time in the year.
-     * @return  true if this rule takes effect in the year and the result is set to
-     *          "result".
-     * @stable ICU 3.8
-     */
-    UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Returns if this rule represents the same rule and offsets as another.
-     * When two <code>TimeZoneRule</code> objects differ only its names, this method
-     * returns true.
-     * @param that  The <code>TimeZoneRule</code> object to be compared with.
-     * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
-     * @stable ICU 3.8
-     */
-    virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
-
-    /**
-     * Gets the very first time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the very first time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Gets the final time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the final time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Gets the first time when this rule takes effect after the specified time.
-     * @param base              The first start time after this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The first time when this rule takes effect after
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const;
-
-    /**
-     * Gets the most recent time when this rule takes effect before the specified time.
-     * @param base              The most recent time before this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The most recent time when this rule takes effect before
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const;
-
-
-private:
-    DateTimeRule* fDateTimeRule;
-    int32_t fStartYear;
-    int32_t fEndYear;
-
-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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-/**
- * <code>TimeArrayTimeZoneRule</code> represents a time zone rule whose start times are
- * defined by an array of milliseconds since the standard base time.
- * 
- * @stable ICU 3.8
- */
-class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule {
-public:
-    /**
-     * Constructs a <code>TimeArrayTimeZoneRule</code> with the name, the GMT offset of its
-     * standard time, the amount of daylight saving offset adjustment and
-     * the array of times when this rule takes effect.
-     * @param name          The time zone name.
-     * @param rawOffset     The UTC offset of its standard time in milliseconds.
-     * @param dstSavings    The amount of daylight saving offset adjustment in
-     *                      milliseconds.  If this ia a rule for standard time,
-     *                      the value of this argument is 0.
-     * @param startTimes    The array start times in milliseconds since the base time
-     *                      (January 1, 1970, 00:00:00).
-     * @param numStartTimes The number of elements in the parameter "startTimes"
-     * @param timeRuleType  The time type of the start times, which is one of
-     *                      <code>DataTimeRule::WALL_TIME</code>, <code>STANDARD_TIME</code>
-     *                      and <code>UTC_TIME</code>.
-     * @stable ICU 3.8
-     */
-    TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
-        const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType);
-
-    /**
-     * Copy constructor.
-     * @param source    The TimeArrayTimeZoneRule object to be copied.
-     * @stable ICU 3.8
-     */
-    TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~TimeArrayTimeZoneRule();
-
-    /**
-     * Clone this TimeArrayTimeZoneRule object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return    A copy of the object.
-     * @stable ICU 3.8
-     */
-    virtual TimeArrayTimeZoneRule* clone(void) const;
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    TimeArrayTimeZoneRule& operator=(const TimeArrayTimeZoneRule& right);
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator==(const TimeZoneRule& that) const;
-
-    /**
-     * Return true if the given <code>TimeZoneRule</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>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 3.8
-     */
-    virtual UBool operator!=(const TimeZoneRule& that) const;
-
-    /**
-     * Gets the time type of the start times used by this rule.  The return value
-     * is either <code>DateTimeRule::WALL_TIME</code> or <code>STANDARD_TIME</code>
-     * or <code>UTC_TIME</code>.
-     * 
-     * @return The time type used of the start times used by this rule.
-     * @stable ICU 3.8
-     */
-    DateTimeRule::TimeRuleType getTimeType(void) const;
-
-    /**
-     * Gets a start time at the index stored in this rule.
-     * @param index     The index of start times
-     * @param result    Receives the start time at the index
-     * @return  true if the index is within the valid range and
-     *          and the result is set.  When false, the output
-     *          parameger "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    UBool getStartTimeAt(int32_t index, UDate& result) const;
-
-    /**
-     * Returns the number of start times stored in this rule
-     * @return The number of start times.
-     * @stable ICU 3.8
-     */
-    int32_t countStartTimes(void) const;
-
-    /**
-     * Returns if this rule represents the same rule and offsets as another.
-     * When two <code>TimeZoneRule</code> objects differ only its names, this method
-     * returns true.
-     * @param that  The <code>TimeZoneRule</code> object to be compared with.
-     * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
-     * @stable ICU 3.8
-     */
-    virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
-
-    /**
-     * Gets the very first time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the very first time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Gets the final time when this rule takes effect.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param result            Receives the final time when this rule takes effect.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
-
-    /**
-     * Gets the first time when this rule takes effect after the specified time.
-     * @param base              The first start time after this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The first time when this rule takes effect after
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const;
-
-    /**
-     * Gets the most recent time when this rule takes effect before the specified time.
-     * @param base              The most recent time before this base time will be returned.
-     * @param prevRawOffset     The standard time offset from UTC before this rule
-     *                          takes effect in milliseconds.
-     * @param prevDSTSavings    The amount of daylight saving offset from the
-     *                          standard time.
-     * @param inclusive         Whether the base time is inclusive or not.
-     * @param result            Receives The most recent time when this rule takes effect before
-     *                          the specified base time.
-     * @return  true if the start time is available.  When false is returned, output parameter
-     *          "result" is unchanged.
-     * @stable ICU 3.8
-     */
-    virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
-        UBool inclusive, UDate& result) const;
-
-
-private:
-    enum { TIMEARRAY_STACK_BUFFER_SIZE = 32 };
-    UBool initStartTimes(const UDate source[], int32_t size, UErrorCode& ec);
-    UDate getUTC(UDate time, int32_t raw, int32_t dst) const;
-
-    DateTimeRule::TimeRuleType  fTimeRuleType;
-    int32_t fNumStartTimes;
-    UDate*  fStartTimes;
-    UDate   fLocalStartTimes[TIMEARRAY_STACK_BUFFER_SIZE];
-
-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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // TZRULE_H
-
-//eof
diff --git a/source/i18n/unicode/tztrans.h b/source/i18n/unicode/tztrans.h
deleted file mode 100644
index 94b8e91..0000000
--- a/source/i18n/unicode/tztrans.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2008, International Business Machines Corporation and         *
-* others. All Rights Reserved.                                                *
-*******************************************************************************
-*/
-#ifndef TZTRANS_H
-#define TZTRANS_H
-
-/**
- * \file 
- * \brief C++ API: Time zone transition
- */
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/uobject.h"
-
-U_NAMESPACE_BEGIN
-
-// Forward declaration
-class TimeZoneRule;
-
-/**
- * <code>TimeZoneTransition</code> is a class representing a time zone transition.
- * An instance has a time of transition and rules for both before and after the transition.
- * @stable ICU 3.8
- */
-class U_I18N_API TimeZoneTransition : public UObject {
-public:
-    /**
-     * Constructs a <code>TimeZoneTransition</code> with the time and the rules before/after
-     * the transition.
-     * 
-     * @param time  The time of transition in milliseconds since the base time.
-     * @param from  The time zone rule used before the transition.
-     * @param to    The time zone rule used after the transition.
-     * @stable ICU 3.8
-     */
-    TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to);
-
-    /**
-     * Constructs an empty <code>TimeZoneTransition</code>
-     * @stable ICU 3.8
-     */
-    TimeZoneTransition();
-
-    /**
-     * Copy constructor.
-     * @param source    The TimeZoneTransition object to be copied.
-     * @stable ICU 3.8
-     */
-    TimeZoneTransition(const TimeZoneTransition& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    ~TimeZoneTransition();
-
-    /**
-     * Clone this TimeZoneTransition object polymorphically. The caller owns the result and
-     * should delete it when done.
-     * @return  A copy of the object.
-     * @stable ICU 3.8
-     */
-    TimeZoneTransition* clone(void) const;
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    TimeZoneTransition& operator=(const TimeZoneTransition& right);
-
-    /**
-     * Return true if the given TimeZoneTransition objects are semantically equal. Objects
-     * of different subclasses are considered unequal.
-     * @param that  The object to be compared with.
-     * @return  true if the given TimeZoneTransition objects are semantically equal.
-     * @stable ICU 3.8
-     */
-    UBool operator==(const TimeZoneTransition& that) const;
-
-    /**
-     * Return true if the given TimeZoneTransition objects are semantically unequal. Objects
-     * of different subclasses are considered unequal.
-     * @param that  The object to be compared with.
-     * @return  true if the given TimeZoneTransition objects are semantically unequal.
-     * @stable ICU 3.8
-     */
-    UBool operator!=(const TimeZoneTransition& that) const;
-
-    /**
-     * Returns the time of transition in milliseconds.
-     * @return The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
-     * @stable ICU 3.8
-     */
-    UDate getTime(void) const;
-
-    /**
-     * Sets the time of transition in milliseconds.
-     * @param time The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
-     * @stable ICU 3.8
-     */
-    void setTime(UDate time);
-
-    /**
-     * Returns the rule used before the transition.
-     * @return The time zone rule used after the transition.
-     * @stable ICU 3.8
-     */
-    const TimeZoneRule* getFrom(void) const;
-
-    /**
-     * Sets the rule used before the transition.  The caller remains
-     * responsible for deleting the <code>TimeZoneRule</code> object.
-     * @param from The time zone rule used before the transition.
-     * @stable ICU 3.8
-     */
-    void setFrom(const TimeZoneRule& from);
-
-    /**
-     * Adopts the rule used before the transition.  The caller must
-     * not delete the <code>TimeZoneRule</code> object passed in.
-     * @param from The time zone rule used before the transition.
-     * @stable ICU 3.8
-     */
-    void adoptFrom(TimeZoneRule* from);
-
-    /**
-     * Sets the rule used after the transition.  The caller remains
-     * responsible for deleting the <code>TimeZoneRule</code> object.
-     * @param to The time zone rule used after the transition.
-     * @stable ICU 3.8
-     */
-    void setTo(const TimeZoneRule& to);
-
-    /**
-     * Adopts the rule used after the transition.  The caller must
-     * not delete the <code>TimeZoneRule</code> object passed in.
-     * @param to The time zone rule used after the transition.
-     * @stable ICU 3.8
-     */
-    void adoptTo(TimeZoneRule* to);
-
-    /**
-     * Returns the rule used after the transition.
-     * @return The time zone rule used after the transition.
-     * @stable ICU 3.8
-     */
-    const TimeZoneRule* getTo(void) const;
-
-private:
-    UDate   fTime;
-    TimeZoneRule*   fFrom;
-    TimeZoneRule*   fTo;
-
-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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // TZTRANS_H
-
-//eof
diff --git a/source/i18n/unicode/ucal.h b/source/i18n/unicode/ucal.h
deleted file mode 100644
index 997af15..0000000
--- a/source/i18n/unicode/ucal.h
+++ /dev/null
@@ -1,1285 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2010, 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"
-#include "unicode/localpointer.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,
-  /**
-   * A better name for UCAL_TRADITIONAL.
-   * @stable ICU 4.2
-   */
-  UCAL_DEFAULT = UCAL_TRADITIONAL,
-  /**
-   * Unambiguously designates the Gregorian calendar for the locale.
-   * @stable ICU 2.0
-   */
-  UCAL_GREGORIAN
-};
-
-/** @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.
- * <p>
- * Note: When unknown TimeZone ID is specified, the UCalendar returned
- * by the function is initialized with GMT ("Etc/GMT") without any
- * errors/warnings.  If you want to check if a TimeZone ID is valid,
- * use ucal_getCanonicalTimeZoneID prior to this function.
- * 
- * @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);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUCalendarPointer
- * "Smart pointer" class, closes a UCalendar via ucal_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUCalendarPointer, UCalendar, ucal_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * 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.
- * @stable ICU 4.0
- */
-U_STABLE 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 localeIndex 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 localeIndex);
-
-/**
- * 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_STABLE 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.
- * @stable ICU 4.0
- */
-U_STABLE 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.
- * @stable ICU 4.2
- */
-U_STABLE const char * U_EXPORT2
-ucal_getType(const UCalendar *cal, UErrorCode* status);
-
-/**
- * Given a key and a locale, returns an array of string values in a preferred
- * order that would make a difference. These are all and only those values where
- * the open (creation) of the service with the locale formed from the input locale
- * plus input keyword and that value has different behavior than creation with the
- * input locale alone.
- * @param key           one of the keys supported by this service.  For now, only
- *                      "calendar" is supported.
- * @param locale        the locale
- * @param commonlyUsed  if set to true it will return only commonly used values
- *                      with the given locale in preferred order.  Otherwise,
- *                      it will return all the available values for the locale.
- * @param status error status
- * @return a string enumeration over keyword values for the given key and the locale.
- * @stable ICU 4.2
- */
-U_STABLE UEnumeration* U_EXPORT2
-ucal_getKeywordValuesForLocale(const char* key,
-                               const char* locale,
-                               UBool commonlyUsed,
-                               UErrorCode* status);
-
-
-/** Weekday types, as returned by ucal_getDayOfWeekType().
- * @stable ICU 4.4
- */
-enum UCalendarWeekdayType {
-  /**
-   * Designates a full weekday (no part of the day is included in the weekend).
-   * @stable ICU 4.4 
-   */
-  UCAL_WEEKDAY,
-  /**
-   * Designates a full weekend day (the entire day is included in the weekend).
-   * @stable ICU 4.4 
-   */
-  UCAL_WEEKEND,
-  /**
-   * Designates a day that starts as a weekday and transitions to the weekend.
-   * Call ucal_getWeekendTransition() to get the time of transition.
-   * @stable ICU 4.4 
-   */
-  UCAL_WEEKEND_ONSET,
-  /**
-   * Designates a day that starts as the weekend and transitions to a weekday.
-   * Call ucal_getWeekendTransition() to get the time of transition.
-   * @stable ICU 4.4 
-   */
-  UCAL_WEEKEND_CEASE
-};
-
-/** @stable ICU 4.4 */
-typedef enum UCalendarWeekdayType UCalendarWeekdayType;
-
-/**
- * Returns whether the given day of the week is a weekday, a
- * weekend day, or a day that transitions from one to the other,
- * in this calendar system. If a transition occurs at midnight,
- * then the days before and after the transition will have the
- * type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time
- * other than midnight, then the day of the transition will have
- * the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the
- * method getWeekendTransition() will return the point of
- * transition.
- * @param cal The UCalendar to query.
- * @param dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY).
- * @param status The error code for the operation.
- * @return The UCalendarWeekdayType for the day of the week.
- * @stable ICU 4.4
- */
-U_STABLE UCalendarWeekdayType U_EXPORT2
-ucal_getDayOfWeekType(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode* status);
-
-/**
- * Returns the time during the day at which the weekend begins or ends in
- * this calendar system.  If ucal_getDayOfWeekType() rerturns UCAL_WEEKEND_ONSET
- * for the specified dayOfWeek, return the time at which the weekend begins.
- * If ucal_getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek,
- * return the time at which the weekend ends. If ucal_getDayOfWeekType() returns
- * some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition
- * (U_ILLEGAL_ARGUMENT_ERROR).
- * @param cal The UCalendar to query.
- * @param dayOfWeek The day of the week for which the weekend transition time is
- * desired (UCAL_SUNDAY..UCAL_SATURDAY).
- * @param status The error code for the operation.
- * @return The milliseconds after midnight at which the weekend begins or ends.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-ucal_getWeekendTransition(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode *status);
-
-/**
- * Returns TRUE if the given UDate is in the weekend in
- * this calendar system.
- * @param cal The UCalendar to query.
- * @param date The UDate in question.
- * @param status The error code for the operation.
- * @return TRUE if the given UDate is in the weekend in
- * this calendar system, FALSE otherwise.
- * @stable ICU 4.4
- */
-U_STABLE UBool U_EXPORT2
-ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status);
-
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif
diff --git a/source/i18n/unicode/ucol.h b/source/i18n/unicode/ucol.h
deleted file mode 100644
index 4a4cd60..0000000
--- a/source/i18n/unicode/ucol.h
+++ /dev/null
@@ -1,1227 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (c) 1996-2010, International Business Machines Corporation and others.
-* All Rights Reserved.
-*******************************************************************************
-*/
-
-#ifndef UCOL_H
-#define UCOL_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_COLLATION
-
-#include "unicode/unorm.h"
-#include "unicode/localpointer.h"
-#include "unicode/parseerr.h"
-#include "unicode/uloc.h"
-#include "unicode/uset.h"
-
-/**
- * \file
- * \brief C API: Collator 
- *
- * <h2> Collator C API </h2>
- *
- * The C API for Collator performs locale-sensitive
- * string comparison. You use this service to build
- * searching and sorting routines for natural language text.
- * <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>
- * For more information about the collation service see 
- * <a href="http://icu-project.org/userguide/Collate_Intro.html">the users guide</a>.
- * <p>
- * Collation service provides correct sorting orders for most locales supported in ICU. 
- * If specific data for a locale is not available, the orders eventually falls back
- * to the <a href="http://www.unicode.org/unicode/reports/tr10/">UCA sort order</a>. 
- * <p>
- * Sort ordering may be customized by providing your own set of rules. For more on
- * this subject see the 
- * <a href="http://icu-project.org/userguide/Collate_Customization.html">
- * Collation customization</a> section of the users guide.
- * <p>
- * @see         UCollationResult
- * @see         UNormalizationMode
- * @see         UCollationStrength
- * @see         UCollationElements
- */
-
-/** A collator.
-*  For usage in C programs.
-*/
-struct UCollator;
-/** structure representing a collator object instance 
- * @stable ICU 2.0
- */
-typedef struct UCollator UCollator;
-
-
-/**
- * UCOL_LESS is returned if source string is compared to be less than target
- * string in the u_strcoll() method.
- * UCOL_EQUAL is returned if source string is compared to be equal to target
- * string in the u_strcoll() method.
- * UCOL_GREATER is returned if source string is compared to be greater than
- * target string in the u_strcoll() method.
- * @see u_strcoll()
- * <p>
- * Possible values for a comparison result 
- * @stable ICU 2.0
- */
-typedef enum {
-  /** string a == string b */
-  UCOL_EQUAL    = 0,
-  /** string a > string b */
-  UCOL_GREATER    = 1,
-  /** string a < string b */
-  UCOL_LESS    = -1
-} UCollationResult ;
-
-
-/** Enum containing attribute values for controling collation behavior.
- * Here are all the allowable values. Not every attribute can take every value. The only
- * universal value is UCOL_DEFAULT, which resets the attribute value to the predefined  
- * value for that locale 
- * @stable ICU 2.0
- */
-typedef enum {
-  /** accepted by most attributes */
-  UCOL_DEFAULT = -1,
-
-  /** Primary collation strength */
-  UCOL_PRIMARY = 0,
-  /** Secondary collation strength */
-  UCOL_SECONDARY = 1,
-  /** Tertiary collation strength */
-  UCOL_TERTIARY = 2,
-  /** Default collation strength */
-  UCOL_DEFAULT_STRENGTH = UCOL_TERTIARY,
-  UCOL_CE_STRENGTH_LIMIT,
-  /** Quaternary collation strength */
-  UCOL_QUATERNARY=3,
-  /** Identical collation strength */
-  UCOL_IDENTICAL=15,
-  UCOL_STRENGTH_LIMIT,
-
-  /** Turn the feature off - works for UCOL_FRENCH_COLLATION, 
-      UCOL_CASE_LEVEL, UCOL_HIRAGANA_QUATERNARY_MODE
-      & UCOL_DECOMPOSITION_MODE*/
-  UCOL_OFF = 16,
-  /** Turn the feature on - works for UCOL_FRENCH_COLLATION, 
-      UCOL_CASE_LEVEL, UCOL_HIRAGANA_QUATERNARY_MODE
-      & UCOL_DECOMPOSITION_MODE*/
-  UCOL_ON = 17,
-  
-  /** Valid for UCOL_ALTERNATE_HANDLING. Alternate handling will be shifted */
-  UCOL_SHIFTED = 20,
-  /** Valid for UCOL_ALTERNATE_HANDLING. Alternate handling will be non ignorable */
-  UCOL_NON_IGNORABLE = 21,
-
-  /** Valid for UCOL_CASE_FIRST - 
-      lower case sorts before upper case */
-  UCOL_LOWER_FIRST = 24,
-  /** upper case sorts before lower case */
-  UCOL_UPPER_FIRST = 25,
-
-  UCOL_ATTRIBUTE_VALUE_COUNT
-
-} UColAttributeValue;
-
-/** Enum containing the codes for reordering segments of the collation table that are not script
- *  codes. These reordering codes are to be used in conjunction with the script codes.
- *  @internal
- */
-typedef enum {
-    UCOL_REORDER_CODE_SPACE          = 0x1000,
-    UCOL_REORDER_CODE_FIRST          = UCOL_REORDER_CODE_SPACE,
-    UCOL_REORDER_CODE_PUNCTUATION    = 0x1001,
-    UCOL_REORDER_CODE_SYMBOL         = 0x1002,
-    UCOL_REORDER_CODE_CURRENCY       = 0x1003,
-    UCOL_REORDER_CODE_DIGIT          = 0x1004,
-    UCOL_REORDER_CODE_LIMIT          = 0x1005
-} UColReorderCode;
-
-/**
- * Base letter represents a primary difference.  Set comparison
- * level to UCOL_PRIMARY to ignore secondary and tertiary differences.
- * Use this to set the strength of a Collator object.
- * Example of primary difference, "abc" &lt; "abd"
- * 
- * Diacritical differences on the same base letter represent a secondary
- * difference.  Set comparison level to UCOL_SECONDARY to ignore tertiary
- * differences. Use this to set the strength of a Collator object.
- * Example of secondary difference, "&auml;" >> "a".
- *
- * Uppercase and lowercase versions of the same character represents a
- * tertiary difference.  Set comparison level to UCOL_TERTIARY to include
- * all comparison differences. Use this to set the strength of a Collator
- * object.
- * Example of tertiary difference, "abc" &lt;&lt;&lt; "ABC".
- *
- * Two characters are considered "identical" when they have the same
- * unicode spellings.  UCOL_IDENTICAL.
- * For example, "&auml;" == "&auml;".
- *
- * UCollationStrength is also used to determine the strength of sort keys 
- * generated from UCollator objects
- * These values can be now found in the UColAttributeValue enum.
- * @stable ICU 2.0
- **/
-typedef UColAttributeValue UCollationStrength;
-
-/** Attributes that collation service understands. All the attributes can take UCOL_DEFAULT
- * value, as well as the values specific to each one. 
- * @stable ICU 2.0
- */
-typedef enum {
-     /** Attribute for direction of secondary weights - used in French.
-      * Acceptable values are UCOL_ON, which results in secondary weights
-      * being considered backwards and UCOL_OFF which treats secondary
-      * weights in the order they appear.*/
-     UCOL_FRENCH_COLLATION, 
-     /** Attribute for handling variable elements.
-      * Acceptable values are UCOL_NON_IGNORABLE (default)
-      * which treats all the codepoints with non-ignorable 
-      * primary weights in the same way,
-      * and UCOL_SHIFTED which causes codepoints with primary 
-      * weights that are equal or below the variable top value
-      * to be ignored on primary level and moved to the quaternary 
-      * level.*/
-     UCOL_ALTERNATE_HANDLING, 
-     /** Controls the ordering of upper and lower case letters.
-      * Acceptable values are UCOL_OFF (default), which orders
-      * upper and lower case letters in accordance to their tertiary
-      * weights, UCOL_UPPER_FIRST which forces upper case letters to 
-      * sort before lower case letters, and UCOL_LOWER_FIRST which does 
-      * the opposite. */
-     UCOL_CASE_FIRST, 
-     /** Controls whether an extra case level (positioned before the third
-      * level) is generated or not. Acceptable values are UCOL_OFF (default), 
-      * when case level is not generated, and UCOL_ON which causes the case
-      * level to be generated. Contents of the case level are affected by
-      * the value of UCOL_CASE_FIRST attribute. A simple way to ignore 
-      * accent differences in a string is to set the strength to UCOL_PRIMARY
-      * and enable case level. */
-     UCOL_CASE_LEVEL,
-     /** Controls whether the normalization check and necessary normalizations
-      * are performed. When set to UCOL_OFF (default) no normalization check
-      * is performed. The correctness of the result is guaranteed only if the 
-      * input data is in so-called FCD form (see users manual for more info).
-      * When set to UCOL_ON, an incremental check is performed to see whether
-      * the input data is in the FCD form. If the data is not in the FCD form,
-      * incremental NFD normalization is performed. */
-     UCOL_NORMALIZATION_MODE, 
-     /** An alias for UCOL_NORMALIZATION_MODE attribute */
-     UCOL_DECOMPOSITION_MODE = UCOL_NORMALIZATION_MODE,
-     /** The strength attribute. Can be either UCOL_PRIMARY, UCOL_SECONDARY,
-      * UCOL_TERTIARY, UCOL_QUATERNARY or UCOL_IDENTICAL. The usual strength
-      * for most locales (except Japanese) is tertiary. Quaternary strength 
-      * is useful when combined with shifted setting for alternate handling
-      * attribute and for JIS x 4061 collation, when it is used to distinguish
-      * between Katakana  and Hiragana (this is achieved by setting the 
-      * UCOL_HIRAGANA_QUATERNARY mode to on. Otherwise, quaternary level
-      * is affected only by the number of non ignorable code points in
-      * the string. Identical strength is rarely useful, as it amounts 
-      * to codepoints of the NFD form of the string. */
-     UCOL_STRENGTH,  
-     /** When turned on, this attribute positions Hiragana before all  
-      * non-ignorables on quaternary level This is a sneaky way to produce JIS
-      * sort order */
-     UCOL_HIRAGANA_QUATERNARY_MODE,
-     /** When turned on, this attribute generates a collation key
-      * for the numeric value of substrings of digits.
-      * This is a way to get '100' to sort AFTER '2'. Note that the longest
-      * digit substring that can be treated as a single collation element is
-      * 254 digits (not counting leading zeros). If a digit substring is
-      * longer than that, the digits beyond the limit will be treated as a
-      * separate digit substring associated with a separate collation element. */
-     UCOL_NUMERIC_COLLATION, 
-     UCOL_ATTRIBUTE_COUNT
-} UColAttribute;
-
-/** Options for retrieving the rule string 
- *  @stable ICU 2.0
- */
-typedef enum {
-  /** Retrieve tailoring only */
-  UCOL_TAILORING_ONLY, 
-  /** Retrieve UCA rules and tailoring */
-  UCOL_FULL_RULES 
-} UColRuleOption ;
-
-/**
- * Open a UCollator for comparing strings.
- * The UCollator pointer is used in all the calls to the Collation 
- * service. After finished, collator must be disposed of by calling
- * {@link #ucol_close }.
- * @param loc The locale containing the required collation rules. 
- *            Special values for locales can be passed in - 
- *            if NULL is passed for the locale, the default locale
- *            collation rules will be used. If empty string ("") or
- *            "root" are passed, UCA rules will be used.
- * @param status A pointer to an UErrorCode to receive any errors
- * @return A pointer to a UCollator, or 0 if an error occurred.
- * @see ucol_openRules
- * @see ucol_safeClone
- * @see ucol_close
- * @stable ICU 2.0
- */
-U_STABLE UCollator* U_EXPORT2 
-ucol_open(const char *loc, UErrorCode *status);
-
-/**
- * Produce an UCollator instance according to the rules supplied.
- * The rules are used to change the default ordering, defined in the
- * UCA in a process called tailoring. The resulting UCollator pointer
- * can be used in the same way as the one obtained by {@link #ucol_strcoll }.
- * @param rules A string describing the collation rules. For the syntax
- *              of the rules please see users guide.
- * @param rulesLength The length of rules, or -1 if null-terminated.
- * @param normalizationMode The normalization mode: One of
- *             UCOL_OFF     (expect the text to not need normalization),
- *             UCOL_ON      (normalize), or
- *             UCOL_DEFAULT (set the mode according to the rules)
- * @param strength The default collation strength; one of UCOL_PRIMARY, UCOL_SECONDARY,
- * UCOL_TERTIARY, UCOL_IDENTICAL,UCOL_DEFAULT_STRENGTH - can be also set in the rules.
- * @param parseError  A pointer to UParseError to recieve information about errors
- *                    occurred during parsing. This argument can currently be set
- *                    to NULL, but at users own risk. Please provide a real structure.
- * @param status A pointer to an UErrorCode to receive any errors
- * @return A pointer to a UCollator. It is not guaranteed that NULL be returned in case
- *         of error - please use status argument to check for errors.
- * @see ucol_open
- * @see ucol_safeClone
- * @see ucol_close
- * @stable ICU 2.0
- */
-U_STABLE UCollator* U_EXPORT2 
-ucol_openRules( const UChar        *rules,
-                int32_t            rulesLength,
-                UColAttributeValue normalizationMode,
-                UCollationStrength strength,
-                UParseError        *parseError,
-                UErrorCode         *status);
-
-/** 
- * Open a collator defined by a short form string.
- * The structure and the syntax of the string is defined in the "Naming collators"
- * section of the users guide: 
- * http://icu-project.org/userguide/Collate_Concepts.html#Naming_Collators
- * Attributes are overriden by the subsequent attributes. So, for "S2_S3", final
- * strength will be 3. 3066bis locale overrides individual locale parts.
- * The call to this function is equivalent to a call to ucol_open, followed by a 
- * series of calls to ucol_setAttribute and ucol_setVariableTop.
- * @param definition A short string containing a locale and a set of attributes. 
- *                   Attributes not explicitly mentioned are left at the default
- *                   state for a locale.
- * @param parseError if not NULL, structure that will get filled with error's pre
- *                   and post context in case of error.
- * @param forceDefaults if FALSE, the settings that are the same as the collator 
- *                   default settings will not be applied (for example, setting
- *                   French secondary on a French collator would not be executed). 
- *                   If TRUE, all the settings will be applied regardless of the 
- *                   collator default value. If the definition
- *                   strings are to be cached, should be set to FALSE.
- * @param status     Error code. Apart from regular error conditions connected to 
- *                   instantiating collators (like out of memory or similar), this
- *                   API will return an error if an invalid attribute or attribute/value
- *                   combination is specified.
- * @return           A pointer to a UCollator or 0 if an error occured (including an 
- *                   invalid attribute).
- * @see ucol_open
- * @see ucol_setAttribute
- * @see ucol_setVariableTop
- * @see ucol_getShortDefinitionString
- * @see ucol_normalizeShortDefinitionString
- * @stable ICU 3.0
- *
- */
-U_STABLE UCollator* U_EXPORT2
-ucol_openFromShortString( const char *definition,
-                          UBool forceDefaults,
-                          UParseError *parseError,
-                          UErrorCode *status);
-
-/**
- * Get a set containing the contractions defined by the collator. The set includes
- * both the UCA contractions and the contractions defined by the collator. This set
- * will contain only strings. If a tailoring explicitly suppresses contractions from 
- * the UCA (like Russian), removed contractions will not be in the resulting set.
- * @param coll collator 
- * @param conts the set to hold the result. It gets emptied before
- *              contractions are added. 
- * @param status to hold the error code
- * @return the size of the contraction set
- *
- * @deprecated ICU 3.4, use ucol_getContractionsAndExpansions instead
- */
-U_DEPRECATED int32_t U_EXPORT2
-ucol_getContractions( const UCollator *coll,
-                  USet *conts,
-                  UErrorCode *status);
-
-/**
- * Get a set containing the expansions defined by the collator. The set includes
- * both the UCA expansions and the expansions defined by the tailoring
- * @param coll collator
- * @param contractions if not NULL, the set to hold the contractions
- * @param expansions if not NULL, the set to hold the expansions
- * @param addPrefixes add the prefix contextual elements to contractions
- * @param status to hold the error code
- *
- * @stable ICU 3.4
- */
-U_STABLE void U_EXPORT2
-ucol_getContractionsAndExpansions( const UCollator *coll,
-                  USet *contractions, USet *expansions,
-                  UBool addPrefixes, UErrorCode *status);
-
-/** 
- * Close a UCollator.
- * Once closed, a UCollator should not be used. Every open collator should
- * be closed. Otherwise, a memory leak will result.
- * @param coll The UCollator to close.
- * @see ucol_open
- * @see ucol_openRules
- * @see ucol_safeClone
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_close(UCollator *coll);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUCollatorPointer
- * "Smart pointer" class, closes a UCollator via ucol_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUCollatorPointer, UCollator, ucol_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Compare two strings.
- * The strings will be compared using the options already specified.
- * @param coll The UCollator containing the comparison rules.
- * @param source The source string.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param target The target string.
- * @param targetLength The length of target, or -1 if null-terminated.
- * @return The result of comparing the strings; one of UCOL_EQUAL,
- * UCOL_GREATER, UCOL_LESS
- * @see ucol_greater
- * @see ucol_greaterOrEqual
- * @see ucol_equal
- * @stable ICU 2.0
- */
-U_STABLE UCollationResult U_EXPORT2 
-ucol_strcoll(    const    UCollator    *coll,
-        const    UChar        *source,
-        int32_t            sourceLength,
-        const    UChar        *target,
-        int32_t            targetLength);
-
-/**
- * Determine if one string is greater than another.
- * This function is equivalent to {@link #ucol_strcoll } == UCOL_GREATER
- * @param coll The UCollator containing the comparison rules.
- * @param source The source string.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param target The target string.
- * @param targetLength The length of target, or -1 if null-terminated.
- * @return TRUE if source is greater than target, FALSE otherwise.
- * @see ucol_strcoll
- * @see ucol_greaterOrEqual
- * @see ucol_equal
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2 
-ucol_greater(const UCollator *coll,
-             const UChar     *source, int32_t sourceLength,
-             const UChar     *target, int32_t targetLength);
-
-/**
- * Determine if one string is greater than or equal to another.
- * This function is equivalent to {@link #ucol_strcoll } != UCOL_LESS
- * @param coll The UCollator containing the comparison rules.
- * @param source The source string.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param target The target string.
- * @param targetLength The length of target, or -1 if null-terminated.
- * @return TRUE if source is greater than or equal to target, FALSE otherwise.
- * @see ucol_strcoll
- * @see ucol_greater
- * @see ucol_equal
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2 
-ucol_greaterOrEqual(const UCollator *coll,
-                    const UChar     *source, int32_t sourceLength,
-                    const UChar     *target, int32_t targetLength);
-
-/**
- * Compare two strings for equality.
- * This function is equivalent to {@link #ucol_strcoll } == UCOL_EQUAL
- * @param coll The UCollator containing the comparison rules.
- * @param source The source string.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param target The target string.
- * @param targetLength The length of target, or -1 if null-terminated.
- * @return TRUE if source is equal to target, FALSE otherwise
- * @see ucol_strcoll
- * @see ucol_greater
- * @see ucol_greaterOrEqual
- * @stable ICU 2.0
- */
-U_STABLE UBool U_EXPORT2 
-ucol_equal(const UCollator *coll,
-           const UChar     *source, int32_t sourceLength,
-           const UChar     *target, int32_t targetLength);
-
-/**
- * Compare two UTF-8 encoded trings.
- * The strings will be compared using the options already specified.
- * @param coll The UCollator containing the comparison rules.
- * @param sIter The source string iterator.
- * @param tIter The target string iterator.
- * @return The result of comparing the strings; one of UCOL_EQUAL,
- * UCOL_GREATER, UCOL_LESS
- * @param status A pointer to an UErrorCode to receive any errors
- * @see ucol_strcoll
- * @stable ICU 2.6
- */
-U_STABLE UCollationResult U_EXPORT2 
-ucol_strcollIter(  const    UCollator    *coll,
-                  UCharIterator *sIter,
-                  UCharIterator *tIter,
-                  UErrorCode *status);
-
-/**
- * Get the collation strength used in a UCollator.
- * The strength influences how strings are compared.
- * @param coll The UCollator to query.
- * @return The collation strength; one of UCOL_PRIMARY, UCOL_SECONDARY,
- * UCOL_TERTIARY, UCOL_QUATERNARY, UCOL_IDENTICAL
- * @see ucol_setStrength
- * @stable ICU 2.0
- */
-U_STABLE UCollationStrength U_EXPORT2 
-ucol_getStrength(const UCollator *coll);
-
-/**
- * Set the collation strength used in a UCollator.
- * The strength influences how strings are compared.
- * @param coll The UCollator to set.
- * @param strength The desired collation strength; one of UCOL_PRIMARY, 
- * UCOL_SECONDARY, UCOL_TERTIARY, UCOL_QUATERNARY, UCOL_IDENTICAL, UCOL_DEFAULT
- * @see ucol_getStrength
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_setStrength(UCollator *coll,
-                 UCollationStrength strength);
-
-/**
- * Get the current reordering of scripts (if one has been set).
- * @param coll The UCollator to query.
- * @param dest The array to fill with the script ordering.
- * @param destCapacity The length of dest. 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 (pre-flighting).
- * @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 array of the script ordering.
- * @see ucol_setReorderCodes
- * @internal 
- */
-U_INTERNAL int32_t U_EXPORT2 
-ucol_getReorderCodes(const UCollator* coll,
-                    int32_t* dest,
-                    int32_t destCapacity,
-                    UErrorCode *pErrorCode);
-
-/**
- * Set the ordering of scripts for this collator.
- * @param coll The UCollator to set.
- * @param reorderCodes An array of script codes in the new order.
- * @param reorderCodesLength The length of reorderCodes.
- * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate a failure before the function call.
- * @see ucol_getReorderCodes
- * @internal 
- */
-U_INTERNAL void U_EXPORT2 
-ucol_setReorderCodes(UCollator* coll,
-                    const int32_t* reorderCodes,
-                    int32_t reorderCodesLength,
-                    UErrorCode *pErrorCode);
-
-/**
- * Get the display name for a UCollator.
- * The display name is suitable for presentation to a user.
- * @param objLoc The locale of the collator in question.
- * @param dispLoc The locale for display.
- * @param result A pointer to a buffer to receive the attribute.
- * @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 
-ucol_getDisplayName(    const    char        *objLoc,
-            const    char        *dispLoc,
-            UChar             *result,
-            int32_t         resultLength,
-            UErrorCode        *status);
-
-/**
- * Get a locale for which collation rules are available.
- * A UCollator in a locale returned by this function will perform the correct
- * collation for the locale.
- * @param localeIndex The index of the desired locale.
- * @return A locale for which collation rules are available, or 0 if none.
- * @see ucol_countAvailable
- * @stable ICU 2.0
- */
-U_STABLE const char* U_EXPORT2 
-ucol_getAvailable(int32_t localeIndex);
-
-/**
- * Determine how many locales have collation rules available.
- * This function is most useful as determining the loop ending condition for
- * calls to {@link #ucol_getAvailable }.
- * @return The number of locales for which collation rules are available.
- * @see ucol_getAvailable
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_countAvailable(void);
-
-#if !UCONFIG_NO_SERVICE
-/**
- * Create a string enumerator of all locales for which a valid
- * collator may be opened.
- * @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
- */
-U_STABLE UEnumeration* U_EXPORT2
-ucol_openAvailableLocales(UErrorCode *status);
-#endif
-
-/**
- * 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
- */
-U_STABLE UEnumeration* U_EXPORT2
-ucol_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 closing the result.
- * @stable ICU 3.0
- */
-U_STABLE UEnumeration* U_EXPORT2
-ucol_getKeywordValues(const char *keyword, UErrorCode *status);
-
-/**
- * Given a key and a locale, returns an array of string values in a preferred
- * order that would make a difference. These are all and only those values where
- * the open (creation) of the service with the locale formed from the input locale
- * plus input keyword and that value has different behavior than creation with the
- * input locale alone.
- * @param key           one of the keys supported by this service.  For now, only
- *                      "collation" is supported.
- * @param locale        the locale
- * @param commonlyUsed  if set to true it will return only commonly used values
- *                      with the given locale in preferred order.  Otherwise,
- *                      it will return all the available values for the locale.
- * @param status error status
- * @return a string enumeration over keyword values for the given key and the locale.
- * @stable ICU 4.2
- */
-U_STABLE UEnumeration* U_EXPORT2
-ucol_getKeywordValuesForLocale(const char* key,
-                               const char* locale,
-                               UBool commonlyUsed,
-                               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 result fillin for the functionally equivalent locale
- * @param resultCapacity capacity of the fillin buffer
- * @param keyword a particular keyword as enumerated by
- * ucol_getKeywords.
- * @param locale the requested locale
- * @param isAvailable if non-NULL, pointer 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 pointer to input-output error code
- * @return the actual buffer size needed for the locale.  If greater
- * than resultCapacity, the returned full name will be truncated and
- * an error code will be returned.
- * @stable ICU 3.0
- */
-U_STABLE int32_t U_EXPORT2
-ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity,
-                             const char* keyword, const char* locale,
-                             UBool* isAvailable, UErrorCode* status);
-
-/**
- * Get the collation rules from a UCollator.
- * The rules will follow the rule syntax.
- * @param coll The UCollator to query.
- * @param length 
- * @return The collation rules.
- * @stable ICU 2.0
- */
-U_STABLE const UChar* U_EXPORT2 
-ucol_getRules(    const    UCollator    *coll, 
-        int32_t            *length);
-
-/** Get the short definition string for a collator. This API harvests the collator's
- *  locale and the attribute set and produces a string that can be used for opening 
- *  a collator with the same properties using the ucol_openFromShortString API.
- *  This string will be normalized.
- *  The structure and the syntax of the string is defined in the "Naming collators"
- *  section of the users guide: 
- *  http://icu-project.org/userguide/Collate_Concepts.html#Naming_Collators
- *  This API supports preflighting.
- *  @param coll a collator
- *  @param locale a locale that will appear as a collators locale in the resulting
- *                short string definition. If NULL, the locale will be harvested 
- *                from the collator.
- *  @param buffer space to hold the resulting string
- *  @param capacity capacity of the buffer
- *  @param status for returning errors. All the preflighting errors are featured
- *  @return length of the resulting string
- *  @see ucol_openFromShortString
- *  @see ucol_normalizeShortDefinitionString
- *  @stable ICU 3.0
- */
-U_STABLE int32_t U_EXPORT2
-ucol_getShortDefinitionString(const UCollator *coll,
-                              const char *locale,
-                              char *buffer,
-                              int32_t capacity,
-                              UErrorCode *status);
-
-/** Verifies and normalizes short definition string.
- *  Normalized short definition string has all the option sorted by the argument name,
- *  so that equivalent definition strings are the same. 
- *  This API supports preflighting.
- *  @param source definition string
- *  @param destination space to hold the resulting string
- *  @param capacity capacity of the buffer
- *  @param parseError if not NULL, structure that will get filled with error's pre
- *                   and post context in case of error.
- *  @param status     Error code. This API will return an error if an invalid attribute 
- *                    or attribute/value combination is specified. All the preflighting 
- *                    errors are also featured
- *  @return length of the resulting normalized string.
- *
- *  @see ucol_openFromShortString
- *  @see ucol_getShortDefinitionString
- * 
- *  @stable ICU 3.0
- */
-
-U_STABLE int32_t U_EXPORT2
-ucol_normalizeShortDefinitionString(const char *source,
-                                    char *destination,
-                                    int32_t capacity,
-                                    UParseError *parseError,
-                                    UErrorCode *status);
-
-
-/**
- * Get a sort key for a string from a UCollator.
- * Sort keys may be compared using <TT>strcmp</TT>.
- *
- * Like ICU functions that write to an output buffer, the buffer contents
- * is undefined if the buffer capacity (resultLength parameter) is too small.
- * Unlike ICU functions that write a string to an output buffer,
- * the terminating zero byte is counted in the sort key length.
- * @param coll The UCollator containing the collation rules.
- * @param source The string to transform.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param result A pointer to a buffer to receive the attribute.
- * @param resultLength The maximum size of result.
- * @return The size needed to fully store the sort key.
- *      If there was an internal error generating the sort key,
- *      a zero value is returned.
- * @see ucol_keyHashCode
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_getSortKey(const    UCollator    *coll,
-        const    UChar        *source,
-        int32_t        sourceLength,
-        uint8_t        *result,
-        int32_t        resultLength);
-
-
-/** Gets the next count bytes of a sort key. Caller needs
- *  to preserve state array between calls and to provide
- *  the same type of UCharIterator set with the same string.
- *  The destination buffer provided must be big enough to store
- *  the number of requested bytes. Generated sortkey is not 
- *  compatible with sortkeys generated using ucol_getSortKey
- *  API, since we don't do any compression. If uncompressed
- *  sortkeys are required, this API can be used.
- *  @param coll The UCollator containing the collation rules.
- *  @param iter UCharIterator containing the string we need 
- *              the sort key to be calculated for.
- *  @param state Opaque state of sortkey iteration.
- *  @param dest Buffer to hold the resulting sortkey part
- *  @param count number of sort key bytes required.
- *  @param status error code indicator.
- *  @return the actual number of bytes of a sortkey. It can be
- *          smaller than count if we have reached the end of 
- *          the sort key.
- *  @stable ICU 2.6
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_nextSortKeyPart(const UCollator *coll,
-                     UCharIterator *iter,
-                     uint32_t state[2],
-                     uint8_t *dest, int32_t count,
-                     UErrorCode *status);
-
-/** enum that is taken by ucol_getBound API 
- * See below for explanation                
- * do not change the values assigned to the 
- * members of this enum. Underlying code    
- * depends on them having these numbers     
- * @stable ICU 2.0
- */
-typedef enum {
-  /** lower bound */
-  UCOL_BOUND_LOWER = 0,
-  /** upper bound that will match strings of exact size */
-  UCOL_BOUND_UPPER = 1,
-  /** upper bound that will match all the strings that have the same initial substring as the given string */
-  UCOL_BOUND_UPPER_LONG = 2,
-  UCOL_BOUND_VALUE_COUNT
-} UColBoundMode;
-
-/**
- * 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
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_getBound(const uint8_t       *source,
-        int32_t             sourceLength,
-        UColBoundMode       boundType,
-        uint32_t            noOfLevels,
-        uint8_t             *result,
-        int32_t             resultLength,
-        UErrorCode          *status);
-        
-/**
- * Gets the version information for a Collator. Version is currently
- * an opaque 32-bit number which depends, among other things, on major
- * versions of the collator tailoring and UCA.
- * @param coll The UCollator to query.
- * @param info the version # information, the result will be filled in
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2
-ucol_getVersion(const UCollator* coll, UVersionInfo info);
-
-/**
- * Gets the UCA version information for a Collator. Version is the
- * UCA version number (3.1.1, 4.0).
- * @param coll The UCollator to query.
- * @param info the version # information, the result will be filled in
- * @stable ICU 2.8
- */
-U_STABLE void U_EXPORT2
-ucol_getUCAVersion(const UCollator* coll, UVersionInfo info);
-
-/** 
- * Merge two sort keys. The levels are merged with their corresponding counterparts
- * (primaries with primaries, secondaries with secondaries etc.). Between the values
- * from the same level a separator is inserted.
- * example (uncompressed): 
- * 191B1D 01 050505 01 910505 00 and 1F2123 01 050505 01 910505 00
- * will be merged as 
- * 191B1D 02 1F212301 050505 02 050505 01 910505 02 910505 00
- * This allows for concatenating of first and last names for sorting, among other things.
- * If the destination buffer is not big enough, the results are undefined.
- * If any of source lengths are zero or any of source pointers are NULL/undefined, 
- * result is of size zero.
- * @param src1 pointer to the first sortkey
- * @param src1Length length of the first sortkey
- * @param src2 pointer to the second sortkey
- * @param src2Length length of the second sortkey
- * @param dest buffer to hold the result
- * @param destCapacity size of the buffer for the result
- * @return size of the result. If the buffer is big enough size is always
- *         src1Length+src2Length-1
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length,
-                   const uint8_t *src2, int32_t src2Length,
-                   uint8_t *dest, int32_t destCapacity);
-
-/**
- * Universal attribute setter
- * @param coll collator which attributes are to be changed
- * @param attr attribute type 
- * @param value attribute value
- * @param status to indicate whether the operation went on smoothly or there were errors
- * @see UColAttribute
- * @see UColAttributeValue
- * @see ucol_getAttribute
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value, UErrorCode *status);
-
-/**
- * Universal attribute getter
- * @param coll collator which attributes are to be changed
- * @param attr attribute type
- * @return attribute value
- * @param status to indicate whether the operation went on smoothly or there were errors
- * @see UColAttribute
- * @see UColAttributeValue
- * @see ucol_setAttribute
- * @stable ICU 2.0
- */
-U_STABLE UColAttributeValue  U_EXPORT2 
-ucol_getAttribute(const UCollator *coll, UColAttribute attr, UErrorCode *status);
-
-/** Variable top
- * is a two byte primary value which causes all the codepoints with primary values that
- * are less or equal than the variable top to be shifted when alternate handling is set
- * to UCOL_SHIFTED.
- * Sets the variable top to a collation element value of a string supplied. 
- * @param coll collator which variable top needs to be changed
- * @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
- * @see ucol_getVariableTop
- * @see ucol_restoreVariableTop
- * @stable ICU 2.0
- */
-U_STABLE uint32_t U_EXPORT2 
-ucol_setVariableTop(UCollator *coll, 
-                    const UChar *varTop, int32_t len, 
-                    UErrorCode *status);
-
-/** 
- * Gets the variable top value of a Collator. 
- * Lower 16 bits are undefined and should be ignored.
- * @param coll collator which variable top needs to be retrieved
- * @param status error code (not changed by function). If error code is set, 
- *               the return value is undefined.
- * @return the variable top value of a Collator.
- * @see ucol_setVariableTop
- * @see ucol_restoreVariableTop
- * @stable ICU 2.0
- */
-U_STABLE uint32_t U_EXPORT2 ucol_getVariableTop(const UCollator *coll, UErrorCode *status);
-
-/** 
- * 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 coll collator which variable top needs to be changed
- * @param varTop CE value, as returned by ucol_setVariableTop or ucol)getVariableTop
- * @param status error code (not changed by function)
- * @see ucol_getVariableTop
- * @see ucol_setVariableTop
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *status);
-
-/**
- * Thread safe cloning operation. The result is a clone of a given collator.
- * @param coll collator 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_COL_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
- * @see ucol_open
- * @see ucol_openRules
- * @see ucol_close
- * @stable ICU 2.0
- */
-U_STABLE UCollator* U_EXPORT2 
-ucol_safeClone(const UCollator *coll,
-               void            *stackBuffer,
-               int32_t         *pBufferSize,
-               UErrorCode      *status);
-
-/** default memory size for the new clone. It needs to be this large for os/400 large pointers 
- * @stable ICU 2.0
- */
-#define U_COL_SAFECLONE_BUFFERSIZE 512
-
-/**
- * Returns current rules. Delta defines whether full rules are returned or just the tailoring. 
- * Returns number of UChars needed to store rules. If buffer is NULL or bufferLen is not enough 
- * to store rules, will store up to available space.
- * @param coll collator to get the rules from
- * @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES. 
- * @param buffer buffer to store the result in. If NULL, you'll get no rules.
- * @param bufferLen lenght of buffer to store rules in. If less then needed you'll get only the part that fits in.
- * @return current rules
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int32_t bufferLen);
-
-/**
- * gets the locale name of the collator. If the collator
- * is instantiated from the rules, then this function returns
- * NULL.
- * @param coll The UCollator for which the locale is needed
- * @param type You can choose between requested, valid and actual
- *             locale. For description see the definition of
- *             ULocDataLocaleType in uloc.h
- * @param status error code of the operation
- * @return real locale name from which the collation data comes. 
- *         If the collator was instantiated from rules, returns
- *         NULL.
- * @deprecated ICU 2.8 Use ucol_getLocaleByType instead
- */
-U_DEPRECATED const char * U_EXPORT2
-ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status);
-
-
-/**
- * gets the locale name of the collator. If the collator
- * is instantiated from the rules, then this function returns
- * NULL.
- * @param coll The UCollator for which the locale is needed
- * @param type You can choose between requested, valid and actual
- *             locale. For description see the definition of
- *             ULocDataLocaleType in uloc.h
- * @param status error code of the operation
- * @return real locale name from which the collation data comes. 
- *         If the collator was instantiated from rules, returns
- *         NULL.
- * @stable ICU 2.8
- */
-U_STABLE const char * U_EXPORT2
-ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status);
-
-/**
- * Get an Unicode set that contains all the characters and sequences tailored in 
- * this collator. The result must be disposed of by using uset_close.
- * @param coll        The UCollator for which we want to get tailored chars
- * @param status      error code of the operation
- * @return a pointer to newly created USet. Must be be disposed by using uset_close
- * @see ucol_openRules
- * @see uset_close
- * @stable ICU 2.4
- */
-U_STABLE USet * U_EXPORT2
-ucol_getTailoredSet(const UCollator *coll, UErrorCode *status);
-
-/**
- * Universal attribute getter that returns UCOL_DEFAULT if the value is default
- * @param coll collator which attributes are to be changed
- * @param attr attribute type
- * @return attribute value or UCOL_DEFAULT if the value is default
- * @param status to indicate whether the operation went on smoothly or there were errors
- * @see UColAttribute
- * @see UColAttributeValue
- * @see ucol_setAttribute
- * @internal ICU 3.0
- */
-U_INTERNAL UColAttributeValue  U_EXPORT2
-ucol_getAttributeOrDefault(const UCollator *coll, UColAttribute attr, UErrorCode *status);
-
-/** Check whether two collators are equal. Collators are considered equal if they
- *  will sort strings the same. This means that both the current attributes and the
- *  rules must be equivalent. Currently used for RuleBasedCollator::operator==.
- *  @param source first collator
- *  @param target second collator
- *  @return TRUE or FALSE
- *  @internal ICU 3.0
- */
-U_INTERNAL UBool U_EXPORT2
-ucol_equals(const UCollator *source, const UCollator *target);
-
-/** Calculates the set of unsafe code points, given a collator.
- *   A character is unsafe if you could append any character and cause the ordering to alter significantly.
- *   Collation sorts in normalized order, so anything that rearranges in normalization can cause this.
- *   Thus if you have a character like a_umlaut, and you add a lower_dot to it,
- *   then it normalizes to a_lower_dot + umlaut, and sorts differently.
- *  @param coll Collator
- *  @param unsafe a fill-in set to receive the unsafe points
- *  @param status for catching errors
- *  @return number of elements in the set
- *  @internal ICU 3.0
- */
-U_INTERNAL int32_t U_EXPORT2
-ucol_getUnsafeSet( const UCollator *coll,
-                  USet *unsafe,
-                  UErrorCode *status);
-
-/** Reset UCA's static pointers. You don't want to use this, unless your static memory can go away.
- * @internal ICU 3.2.1
- */
-U_INTERNAL void U_EXPORT2
-ucol_forgetUCA(void);
-
-/** Touches all resources needed for instantiating a collator from a short string definition,
- *  thus filling up the cache.
- * @param definition A short string containing a locale and a set of attributes. 
- *                   Attributes not explicitly mentioned are left at the default
- *                   state for a locale.
- * @param parseError if not NULL, structure that will get filled with error's pre
- *                   and post context in case of error.
- * @param forceDefaults if FALSE, the settings that are the same as the collator 
- *                   default settings will not be applied (for example, setting
- *                   French secondary on a French collator would not be executed). 
- *                   If TRUE, all the settings will be applied regardless of the 
- *                   collator default value. If the definition
- *                   strings are to be cached, should be set to FALSE.
- * @param status     Error code. Apart from regular error conditions connected to 
- *                   instantiating collators (like out of memory or similar), this
- *                   API will return an error if an invalid attribute or attribute/value
- *                   combination is specified.
- * @see ucol_openFromShortString
- * @internal ICU 3.2.1
- */
-U_INTERNAL void U_EXPORT2
-ucol_prepareShortStringOpen( const char *definition,
-                          UBool forceDefaults,
-                          UParseError *parseError,
-                          UErrorCode *status);
-
-/** Creates a binary image of a collator. This binary image can be stored and 
- *  later used to instantiate a collator using ucol_openBinary.
- *  This API supports preflighting.
- *  @param coll Collator
- *  @param buffer a fill-in buffer to receive the binary image
- *  @param capacity capacity of the destination buffer
- *  @param status for catching errors
- *  @return size of the image
- *  @see ucol_openBinary
- *  @stable ICU 3.2
- */
-U_STABLE int32_t U_EXPORT2
-ucol_cloneBinary(const UCollator *coll,
-                 uint8_t *buffer, int32_t capacity,
-                 UErrorCode *status);
-
-/** Opens a collator from a collator binary image created using
- *  ucol_cloneBinary. Binary image used in instantiation of the 
- *  collator remains owned by the user and should stay around for 
- *  the lifetime of the collator. The API also takes a base collator
- *  which usualy should be UCA.
- *  @param bin binary image owned by the user and required through the
- *             lifetime of the collator
- *  @param length size of the image. If negative, the API will try to
- *                figure out the length of the image
- *  @param base fallback collator, usually UCA. Base is required to be
- *              present through the lifetime of the collator. Currently 
- *              it cannot be NULL.
- *  @param status for catching errors
- *  @return newly created collator
- *  @see ucol_cloneBinary
- *  @stable ICU 3.2
- */
-U_STABLE UCollator* U_EXPORT2
-ucol_openBinary(const uint8_t *bin, int32_t length, 
-                const UCollator *base, 
-                UErrorCode *status);
-
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
diff --git a/source/i18n/unicode/ucoleitr.h b/source/i18n/unicode/ucoleitr.h
deleted file mode 100644
index 419cb9f..0000000
--- a/source/i18n/unicode/ucoleitr.h
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2001-2009, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*
-* File ucoleitr.cpp
-*
-* Modification History:
-*
-* Date        Name        Description
-* 02/15/2001  synwee      Modified all methods to process its own function 
-*                         instead of calling the equivalent c++ api (coleitr.h)
-*******************************************************************************/
-
-#ifndef UCOLEITR_H
-#define UCOLEITR_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_COLLATION
-
-/**  
- * This indicates an error has occured during processing or if no more CEs is 
- * to be returned.
- * @stable ICU 2.0
- */
-#define UCOL_NULLORDER        ((int32_t)0xFFFFFFFF)
-
-/**  
- * This indicates an error has occured during processing or there are no more CEs 
- * to be returned.
- *
- * @internal
- */
-#define UCOL_PROCESSED_NULLORDER        ((int64_t)U_INT64_MAX)
-
-#include "unicode/ucol.h"
-
-/** 
- * The UCollationElements struct.
- * For usage in C programs.
- * @stable ICU 2.0
- */
-typedef struct UCollationElements UCollationElements;
-
-/**
- * \file
- * \brief C API: UCollationElements
- *
- * The UCollationElements API is used as an iterator to walk through each 
- * character of an international string. Use the iterator to return the
- * ordering priority of the positioned character. The ordering priority of a 
- * character, which we refer to as a key, defines how a character is collated 
- * in the given collation object.
- * For example, consider the following in Spanish:
- * <pre>
- * .       "ca" -> the first key is key('c') and second key is key('a').
- * .       "cha" -> the first key is key('ch') and second key is key('a').
- * </pre>
- * And in German,
- * <pre>
- * .       "<ae ligature>b"-> the first key is key('a'), the second key is key('e'), and
- * .       the third key is key('b').
- * </pre>
- * <p>Example of the iterator usage: (without error checking)
- * <pre>
- * .  void CollationElementIterator_Example()
- * .  {
- * .      UChar *s;
- * .      t_int32 order, primaryOrder;
- * .      UCollationElements *c;
- * .      UCollatorOld *coll;
- * .      UErrorCode success = U_ZERO_ERROR;
- * .      s=(UChar*)malloc(sizeof(UChar) * (strlen("This is a test")+1) );
- * .      u_uastrcpy(s, "This is a test");
- * .      coll = ucol_open(NULL, &success);
- * .      c = ucol_openElements(coll, str, u_strlen(str), &status);
- * .      order = ucol_next(c, &success);
- * .      ucol_reset(c);
- * .      order = ucol_prev(c, &success);
- * .      free(s);
- * .      ucol_close(coll);
- * .      ucol_closeElements(c);
- * .  }
- * </pre>
- * <p>
- * ucol_next() returns the collation order of the next.
- * ucol_prev() returns the collation order of the previous character.
- * The Collation Element Iterator moves only in one direction between calls to
- * ucol_reset. That is, ucol_next() and ucol_prev can not be inter-used. 
- * Whenever ucol_prev is to be called after ucol_next() or vice versa, 
- * ucol_reset has to be called first to reset the status, shifting pointers to 
- * either the end or the start of the string. Hence at the next call of 
- * ucol_prev or ucol_next, the first or last collation order will be returned. 
- * If a change of direction is done without a ucol_reset, the result is 
- * undefined.
- * The result of a forward iterate (ucol_next) and reversed result of the  
- * backward iterate (ucol_prev) on the same string are equivalent, if 
- * collation orders with the value UCOL_IGNORABLE are ignored.
- * Character based on the comparison level of the collator.  A collation order 
- * consists of primary order, secondary order and tertiary order.  The data 
- * type of the collation order is <strong>t_int32</strong>. 
- *
- * @see UCollator
- */
-
-/**
- * Open the collation elements for a string.
- *
- * @param coll The collator containing the desired collation rules.
- * @param text The text to iterate over.
- * @param textLength The number of characters in text, or -1 if null-terminated
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return a struct containing collation element information
- * @stable ICU 2.0
- */
-U_STABLE UCollationElements* U_EXPORT2 
-ucol_openElements(const UCollator  *coll,
-                  const UChar      *text,
-                        int32_t    textLength,
-                        UErrorCode *status);
-
-
-/**
- * get a hash code for a key... Not very useful!
- * @param key    the given key.
- * @param length the size of the key array.
- * @return       the hash code.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_keyHashCode(const uint8_t* key, int32_t length);
-
-/**
- * Close a UCollationElements.
- * Once closed, a UCollationElements may no longer be used.
- * @param elems The UCollationElements to close.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_closeElements(UCollationElements *elems);
-
-/**
- * Reset the collation elements to their initial state.
- * This will move the 'cursor' to the beginning of the text.
- * Property settings for collation will be reset to the current status.
- * @param elems The UCollationElements to reset.
- * @see ucol_next
- * @see ucol_previous
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_reset(UCollationElements *elems);
-
-/**
- * Set the collation elements to use implicit ordering for Han
- * even if they've been tailored. This will also force Hangul
- * syllables to be ordered by decomposing them to their component
- * Jamo.
- *
- * @param elems The UCollationElements containing the text.
- * @param status A pointer to a UErrorCode to reveive any errors.
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-ucol_forceHanImplicit(UCollationElements *elems, UErrorCode *status);
-
-/**
- * Get the ordering priority of the next collation element in the text.
- * A single character may contain more than one collation element.
- * @param elems The UCollationElements containing the text.
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return The next collation elements ordering, otherwise returns NULLORDER 
- *         if an error has occured or if the end of string has been reached
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_next(UCollationElements *elems, UErrorCode *status);
-
-/**
- * Get the ordering priority of the previous collation element in the text.
- * A single character may contain more than one collation element.
- * Note that internally a stack is used to store buffered collation elements. 
- * It is very rare that the stack will overflow, however if such a case is 
- * encountered, the problem can be solved by increasing the size 
- * UCOL_EXPAND_CE_BUFFER_SIZE in ucol_imp.h.
- * @param elems The UCollationElements containing the text.
- * @param status A pointer to an UErrorCode to receive any errors. Noteably 
- *               a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
- *               buffer has been exhausted.
- * @return The previous collation elements ordering, otherwise returns 
- *         NULLORDER if an error has occured or if the start of string has 
- *         been reached.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_previous(UCollationElements *elems, UErrorCode *status);
-
-/**
- * Get the processed ordering priority of the next collation element in the text.
- * A single character may contain more than one collation element.
- *
- * @param elems The UCollationElements containing the text.
- * @param ixLow a pointer to an int32_t to receive the iterator index before fetching the CE.
- * @param ixHigh a pointer to an int32_t to receive the iterator index after fetching the CE.
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return The next collation elements ordering, otherwise returns UCOL_PROCESSED_NULLORDER 
- *         if an error has occured or if the end of string has been reached
- *
- * @internal
- */
-U_INTERNAL int64_t U_EXPORT2
-ucol_nextProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status);
-
-/**
- * Get the processed ordering priority of the previous collation element in the text.
- * A single character may contain more than one collation element.
- * Note that internally a stack is used to store buffered collation elements. 
- * It is very rare that the stack will overflow, however if such a case is 
- * encountered, the problem can be solved by increasing the size 
- * UCOL_EXPAND_CE_BUFFER_SIZE in ucol_imp.h.
- *
- * @param elems The UCollationElements containing the text.
- * @param ixLow A pointer to an int32_t to receive the iterator index after fetching the CE
- * @param ixHigh A pointer to an int32_t to receiver the iterator index before fetching the CE
- * @param status A pointer to an UErrorCode to receive any errors. Noteably 
- *               a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
- *               buffer has been exhausted.
- * @return The previous collation elements ordering, otherwise returns 
- *         UCOL_PROCESSED_NULLORDER if an error has occured or if the start of
- *         string has been reached.
- *
- * @internal
- */
-U_INTERNAL int64_t U_EXPORT2
-ucol_previousProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status);
-
-/**
- * Get the maximum length of any expansion sequences that end with the 
- * specified comparison order.
- * This is useful for .... ?
- * @param elems The UCollationElements containing the text.
- * @param order A collation order returned by previous or next.
- * @return maximum size of the expansion sequences ending with the collation 
- *         element or 1 if collation element does not occur at the end of any 
- *         expansion sequence
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_getMaxExpansion(const UCollationElements *elems, int32_t order);
-
-/**
- * Set the text containing the collation elements.
- * Property settings for collation will remain the same.
- * In order to reset the iterator to the current collation property settings,
- * the API reset() has to be called.
- * @param elems The UCollationElements to set.
- * @param text The source text containing the collation elements.
- * @param textLength The length of text, or -1 if null-terminated.
- * @param status A pointer to an UErrorCode to receive any errors.
- * @see ucol_getText
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_setText(      UCollationElements *elems, 
-             const UChar              *text,
-                   int32_t            textLength,
-                   UErrorCode         *status);
-
-/**
- * Get the offset of the current source character.
- * This is an offset into the text of the character containing the current
- * collation elements.
- * @param elems The UCollationElements to query.
- * @return The offset of the current source character.
- * @see ucol_setOffset
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-ucol_getOffset(const UCollationElements *elems);
-
-/**
- * Set the offset of the current source character.
- * This is an offset into the text of the character to be processed.
- * Property settings for collation will remain the same.
- * In order to reset the iterator to the current collation property settings,
- * the API reset() has to be called.
- * @param elems The UCollationElements to set.
- * @param offset The desired character offset.
- * @param status A pointer to an UErrorCode to receive any errors.
- * @see ucol_getOffset
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-ucol_setOffset(UCollationElements *elems,
-               int32_t        offset,
-               UErrorCode         *status);
-
-/**
-* Get the primary order of a collation order.
-* @param order the collation order
-* @return the primary order of a collation order.
-* @stable ICU 2.6
-*/
-U_STABLE int32_t U_EXPORT2
-ucol_primaryOrder (int32_t order); 
-
-/**
-* Get the secondary order of a collation order.
-* @param order the collation order
-* @return the secondary order of a collation order.
-* @stable ICU 2.6
-*/
-U_STABLE int32_t U_EXPORT2
-ucol_secondaryOrder (int32_t order); 
-
-/**
-* Get the tertiary order of a collation order.
-* @param order the collation order
-* @return the tertiary order of a collation order.
-* @stable ICU 2.6
-*/
-U_STABLE int32_t U_EXPORT2
-ucol_tertiaryOrder (int32_t order); 
-
-#endif /* #if !UCONFIG_NO_COLLATION */
-
-#endif
diff --git a/source/i18n/unicode/ucsdet.h b/source/i18n/unicode/ucsdet.h
deleted file mode 100644
index dc492ee..0000000
--- a/source/i18n/unicode/ucsdet.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- **********************************************************************
- *   Copyright (C) 2005-2010, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- *   file name:  ucsdet.h
- *   encoding:   US-ASCII
- *   indentation:4
- *
- *   created on: 2005Aug04
- *   created by: Andy Heninger
- *
- *   ICU Character Set Detection, API for C
- *
- *   Draft version 18 Oct 2005
- *
- */
-
-#ifndef __UCSDET_H
-#define __UCSDET_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_CONVERSION
-
-#include "unicode/localpointer.h"
-#include "unicode/uenum.h"
-
-/**
- * \file 
- * \brief C API: Charset Detection API
- *
- * This API provides a facility for detecting the
- * charset or encoding of character data in an unknown text format.
- * The input data can be from an array of bytes.
- * <p>
- * Character set detection is at best an imprecise operation.  The detection
- * process will attempt to identify the charset that best matches the characteristics
- * of the byte data, but the process is partly statistical in nature, and
- * the results can not be guaranteed to always be correct.
- * <p>
- * For best accuracy in charset detection, the input data should be primarily
- * in a single language, and a minimum of a few hundred bytes worth of plain text
- * in the language are needed.  The detection process will attempt to
- * ignore html or xml style markup that could otherwise obscure the content.
- */
- 
-
-struct UCharsetDetector;
-/**
-  * Structure representing a charset detector
-  * @stable ICU 3.6
-  */
-typedef struct UCharsetDetector UCharsetDetector;
-
-struct UCharsetMatch;
-/**
-  *  Opaque structure representing a match that was identified
-  *  from a charset detection operation.
-  *  @stable ICU 3.6
-  */
-typedef struct UCharsetMatch UCharsetMatch;
-
-/**
-  *  Open a charset detector.
-  *
-  *  @param status Any error conditions occurring during the open
-  *                operation are reported back in this variable.
-  *  @return the newly opened charset detector.
-  *  @stable ICU 3.6
-  */
-U_STABLE UCharsetDetector * U_EXPORT2
-ucsdet_open(UErrorCode   *status);
-
-/**
-  * Close a charset detector.  All storage and any other resources
-  *   owned by this charset detector will be released.  Failure to
-  *   close a charset detector when finished with it can result in
-  *   memory leaks in the application.
-  *
-  *  @param ucsd  The charset detector to be closed.
-  *  @stable ICU 3.6
-  */
-U_STABLE void U_EXPORT2
-ucsdet_close(UCharsetDetector *ucsd);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUCharsetDetectorPointer
- * "Smart pointer" class, closes a UCharsetDetector via ucsdet_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUCharsetDetectorPointer, UCharsetDetector, ucsdet_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
-  * Set the input byte data whose charset is to detected.
-  *
-  * Ownership of the input  text byte array remains with the caller.
-  * The input string must not be altered or deleted until the charset
-  * detector is either closed or reset to refer to different input text.
-  *
-  * @param ucsd   the charset detector to be used.
-  * @param textIn the input text of unknown encoding.   .
-  * @param len    the length of the input text, or -1 if the text
-  *               is NUL terminated.
-  * @param status any error conditions are reported back in this variable.
-  *
-  * @stable ICU 3.6
-  */
-U_STABLE void U_EXPORT2
-ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status);
-
-
-/** Set the declared encoding for charset detection.
- *  The declared encoding of an input text is an encoding obtained
- *  by the user from an http header or xml declaration or similar source that
- *  can be provided as an additional hint to the charset detector.
- *
- *  How and whether the declared encoding will be used during the
- *  detection process is TBD.
- *
- * @param ucsd      the charset detector to be used.
- * @param encoding  an encoding for the current data obtained from
- *                  a header or declaration or other source outside
- *                  of the byte data itself.
- * @param length    the length of the encoding name, or -1 if the name string
- *                  is NUL terminated.
- * @param status    any error conditions are reported back in this variable.
- *
- * @stable ICU 3.6
- */
-U_STABLE void U_EXPORT2
-ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status);
-
-
-/**
- * Return the charset that best matches the supplied input data.
- * 
- * Note though, that because the detection 
- * only looks at the start of the input data,
- * there is a possibility that the returned charset will fail to handle
- * the full set of input data.
- * <p>
- * The returned UCharsetMatch object is owned by the UCharsetDetector.
- * It will remain valid until the detector input is reset, or until
- * the detector is closed.
- * <p>
- * The function will fail if
- *  <ul>
- *    <li>no charset appears to match the data.</li>
- *    <li>no input text has been provided</li>
- *  </ul>
- *
- * @param ucsd      the charset detector to be used.
- * @param status    any error conditions are reported back in this variable.
- * @return          a UCharsetMatch  representing the best matching charset,
- *                  or NULL if no charset matches the byte data.
- *
- * @stable ICU 3.6
- */
-U_STABLE const UCharsetMatch * U_EXPORT2
-ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status);
-    
-
-/**
- *  Find all charset matches that appear to be consistent with the input,
- *  returning an array of results.  The results are ordered with the
- *  best quality match first.
- *
- *  Because the detection only looks at a limited amount of the
- *  input byte data, some of the returned charsets may fail to handle
- *  the all of input data.
- *  <p>
- *  The returned UCharsetMatch objects are owned by the UCharsetDetector.
- *  They will remain valid until the detector is closed or modified
- *  
- * <p>
- * Return an error if 
- *  <ul>
- *    <li>no charsets appear to match the input data.</li>
- *    <li>no input text has been provided</li>
- *  </ul>
- * 
- * @param ucsd          the charset detector to be used.
- * @param matchesFound  pointer to a variable that will be set to the
- *                      number of charsets identified that are consistent with
- *                      the input data.  Output only.
- * @param status        any error conditions are reported back in this variable.
- * @return              A pointer to an array of pointers to UCharSetMatch objects.
- *                      This array, and the UCharSetMatch instances to which it refers,
- *                      are owned by the UCharsetDetector, and will remain valid until
- *                      the detector is closed or modified.
- * @stable ICU 3.6
- */
-U_STABLE const UCharsetMatch ** U_EXPORT2
-ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *status);
-
-
-
-/**
- *  Get the name of the charset represented by a UCharsetMatch.
- *
- *  The storage for the returned name string is owned by the
- *  UCharsetMatch, and will remain valid while the UCharsetMatch
- *  is valid.
- *
- *  The name returned is suitable for use with the ICU conversion APIs.
- *
- *  @param ucsm    The charset match object.
- *  @param status  Any error conditions are reported back in this variable.
- *  @return        The name of the matching charset.
- *
- *  @stable ICU 3.6
- */
-U_STABLE const char * U_EXPORT2
-ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status);
-
-/**
- *  Get a confidence number for the quality of the match of the byte
- *  data with the charset.  Confidence numbers range from zero to 100,
- *  with 100 representing complete confidence and zero representing
- *  no confidence.
- *
- *  The confidence values are somewhat arbitrary.  They define an
- *  an ordering within the results for any single detection operation
- *  but are not generally comparable between the results for different input.
- *
- *  A confidence value of ten does have a general meaning - it is used
- *  for charsets that can represent the input data, but for which there
- *  is no other indication that suggests that the charset is the correct one.
- *  Pure 7 bit ASCII data, for example, is compatible with a
- *  great many charsets, most of which will appear as possible matches
- *  with a confidence of 10.
- *
- *  @param ucsm    The charset match object.
- *  @param status  Any error conditions are reported back in this variable.
- *  @return        A confidence number for the charset match.
- *
- *  @stable ICU 3.6
- */
-U_STABLE int32_t U_EXPORT2
-ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status);
-
-/**
- *  Get the RFC 3066 code for the language of the input data.
- *
- *  The Charset Detection service is intended primarily for detecting
- *  charsets, not language.  For some, but not all, charsets, a language is
- *  identified as a byproduct of the detection process, and that is what
- *  is returned by this function.
- *
- *  CAUTION:
- *    1.  Language information is not available for input data encoded in
- *        all charsets. In particular, no language is identified
- *        for UTF-8 input data.
- *
- *    2.  Closely related languages may sometimes be confused.
- *
- *  If more accurate language detection is required, a linguistic
- *  analysis package should be used.
- *
- *  The storage for the returned name string is owned by the
- *  UCharsetMatch, and will remain valid while the UCharsetMatch
- *  is valid.
- *
- *  @param ucsm    The charset match object.
- *  @param status  Any error conditions are reported back in this variable.
- *  @return        The RFC 3066 code for the language of the input data, or
- *                 an empty string if the language could not be determined.
- *
- *  @stable ICU 3.6
- */
-U_STABLE const char * U_EXPORT2
-ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status);
-
-
-/**
-  *  Get the entire input text as a UChar string, placing it into
-  *  a caller-supplied buffer.  A terminating
-  *  NUL character will be appended to the buffer if space is available.
-  *
-  *  The number of UChars in the output string, not including the terminating
-  *  NUL, is returned. 
-  *
-  *  If the supplied buffer is smaller than required to hold the output,
-  *  the contents of the buffer are undefined.  The full output string length
-  *  (in UChars) is returned as always, and can be used to allocate a buffer
-  *  of the correct size.
-  *
-  *
-  * @param ucsm    The charset match object.
-  * @param buf     A UChar buffer to be filled with the converted text data.
-  * @param cap     The capacity of the buffer in UChars.
-  * @param status  Any error conditions are reported back in this variable.
-  * @return        The number of UChars in the output string.
-  *
-  * @stable ICU 3.6
-  */
-U_STABLE  int32_t U_EXPORT2
-ucsdet_getUChars(const UCharsetMatch *ucsm,
-                 UChar *buf, int32_t cap, UErrorCode *status);
-
-
-
-/**
-  *  Get an iterator over the set of all detectable charsets - 
-  *  over the charsets that are known to the charset detection
-  *  service.
-  *
-  *  The returned UEnumeration provides access to the names of
-  *  the charsets.
-  *
-  *  The state of the Charset detector that is passed in does not
-  *  affect the result of this function, but requiring a valid, open
-  *  charset detector as a parameter insures that the charset detection
-  *  service has been safely initialized and that the required detection
-  *  data is available.
-  *
-  *  @param ucsd a Charset detector.
-  *  @param status  Any error conditions are reported back in this variable.
-  *  @return an iterator providing access to the detectable charset names.
-  *  @stable ICU 3.6
-  */
-U_STABLE  UEnumeration * U_EXPORT2
-ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd,  UErrorCode *status);
-
-
-/**
-  *  Test whether input filtering is enabled for this charset detector.
-  *  Input filtering removes text that appears to be HTML or xml
-  *  markup from the input before applying the code page detection
-  *  heuristics.
-  *
-  *  @param ucsd  The charset detector to check.
-  *  @return TRUE if filtering is enabled.
-  *  @stable ICU 3.6
-  */
-U_STABLE  UBool U_EXPORT2
-ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd);
-
-
-/**
- * Enable filtering of input text. If filtering is enabled,
- * text within angle brackets ("<" and ">") will be removed
- * before detection, which will remove most HTML or xml markup.
- *
- * @param ucsd   the charset detector to be modified.
- * @param filter <code>true</code> to enable input text filtering.
- * @return The previous setting.
- *
- * @stable ICU 3.6
- */
-U_STABLE  UBool U_EXPORT2
-ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter);
-
-#endif
-#endif   /* __UCSDET_H */
-
-
diff --git a/source/i18n/unicode/ucurr.h b/source/i18n/unicode/ucurr.h
deleted file mode 100644
index cee8e21..0000000
--- a/source/i18n/unicode/ucurr.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
-**********************************************************************
-* Copyright (c) 2002-2010, International Business Machines
-* Corporation and others.  All Rights Reserved.
-**********************************************************************
-*/
-#ifndef _UCURR_H_
-#define _UCURR_H_
-
-#include "unicode/utypes.h"
-#include "unicode/uenum.h"
-
-/**
- * \file 
- * \brief C API: Encapsulates information about a currency.
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-/**
- * The ucurr API encapsulates information about a currency, as defined by
- * ISO 4217.  A currency is represented by a 3-character string
- * containing its ISO 4217 code.  This API can return various data
- * necessary the proper display of a currency:
- *
- * <ul><li>A display symbol, for a specific locale
- * <li>The number of fraction digits to display
- * <li>A rounding increment
- * </ul>
- *
- * The <tt>DecimalFormat</tt> class uses these data to display
- * currencies.
- * @author Alan Liu
- * @since ICU 2.2
- */
-
-/**
- * Finds a currency code for the given locale.
- * @param locale the locale for which to retrieve a currency code. 
- *               Currency can be specified by the "currency" keyword
- *               in which case it overrides the default currency code
- * @param buff   fill in buffer. Can be NULL for preflighting.
- * @param buffCapacity capacity of the fill in buffer. Can be 0 for
- *               preflighting. If it is non-zero, the buff parameter
- *               must not be NULL.
- * @param ec error code
- * @return length of the currency string. It should always be 3. If 0,
- *                currency couldn't be found or the input values are 
- *                invalid. 
- * @stable ICU 2.8
- */
-U_STABLE int32_t U_EXPORT2
-ucurr_forLocale(const char* locale,
-                UChar* buff,
-                int32_t buffCapacity,
-                UErrorCode* ec);
-
-/**
- * Selector constants for ucurr_getName().
- *
- * @see ucurr_getName
- * @stable ICU 2.6
- */
-typedef enum UCurrNameStyle {
-    /**
-     * Selector for ucurr_getName indicating a symbolic name for a
-     * currency, such as "$" for USD.
-     * @stable ICU 2.6
-     */
-    UCURR_SYMBOL_NAME,
-
-    /**
-     * Selector for ucurr_getName indicating the long name for a
-     * currency, such as "US Dollar" for USD.
-     * @stable ICU 2.6
-     */
-    UCURR_LONG_NAME
-} UCurrNameStyle;
-
-#if !UCONFIG_NO_SERVICE
-/**
- * @stable ICU 2.6
- */
-typedef const void* UCurrRegistryKey;
-
-/**
- * Register an (existing) ISO 4217 currency code for the given locale.
- * Only the country code and the two variants EURO and PRE_EURO are
- * recognized.
- * @param isoCode the three-letter ISO 4217 currency code
- * @param locale  the locale for which to register this currency code
- * @param status the in/out status code
- * @return a registry key that can be used to unregister this currency code, or NULL
- * if there was an error.
- * @stable ICU 2.6
- */
-U_STABLE UCurrRegistryKey U_EXPORT2
-ucurr_register(const UChar* isoCode, 
-                   const char* locale,  
-                   UErrorCode* status);
-/**
- * Unregister the previously-registered currency definitions using the
- * URegistryKey returned from ucurr_register.  Key becomes invalid after
- * a successful call and should not be used again.  Any currency 
- * that might have been hidden by the original ucurr_register call is 
- * restored.
- * @param key the registry key returned by a previous call to ucurr_register
- * @param status the in/out status code, no special meanings are assigned
- * @return TRUE if the currency for this key was successfully unregistered
- * @stable ICU 2.6
- */
-U_STABLE UBool U_EXPORT2
-ucurr_unregister(UCurrRegistryKey key, UErrorCode* status);
-#endif /* UCONFIG_NO_SERVICE */
-
-/**
- * Returns the display name for the given currency in the
- * given locale.  For example, the display name for the USD
- * currency object in the en_US locale is "$".
- * @param currency null-terminated 3-letter ISO 4217 code
- * @param locale locale in which to display currency
- * @param nameStyle selector for which kind of name to return
- * @param isChoiceFormat fill-in set to TRUE if the returned value
- * is a ChoiceFormat pattern; otherwise it is a static string
- * @param len fill-in parameter to receive length of result
- * @param ec error code
- * @return pointer to display string of 'len' UChars.  If the resource
- * data contains no entry for 'currency', then 'currency' itself is
- * returned.  If *isChoiceFormat is TRUE, then the result is a
- * ChoiceFormat pattern.  Otherwise it is a static string.
- * @stable ICU 2.6
- */
-U_STABLE const UChar* U_EXPORT2
-ucurr_getName(const UChar* currency,
-              const char* locale,
-              UCurrNameStyle nameStyle,
-              UBool* isChoiceFormat,
-              int32_t* len,
-              UErrorCode* ec);
-
-/**
- * Returns the plural name for the given currency in the
- * given locale.  For example, the plural name for the USD
- * currency object in the en_US locale is "US dollar" or "US dollars".
- * @param currency null-terminated 3-letter ISO 4217 code
- * @param locale locale in which to display currency
- * @param isChoiceFormat fill-in set to TRUE if the returned value
- * is a ChoiceFormat pattern; otherwise it is a static string
- * @param pluralCount plural count
- * @param len fill-in parameter to receive length of result
- * @param ec error code
- * @return pointer to display string of 'len' UChars.  If the resource
- * data contains no entry for 'currency', then 'currency' itself is
- * returned.  
- * @stable ICU 4.2
- */
-U_STABLE const UChar* U_EXPORT2
-ucurr_getPluralName(const UChar* currency,
-                    const char* locale,
-                    UBool* isChoiceFormat,
-                    const char* pluralCount,
-                    int32_t* len,
-                    UErrorCode* ec);
-
-/**
- * Returns the number of the number of fraction digits that should
- * be displayed for the given currency.
- * @param currency null-terminated 3-letter ISO 4217 code
- * @param ec input-output error code
- * @return a non-negative number of fraction digits to be
- * displayed, or 0 if there is an error
- * @stable ICU 3.0
- */
-U_STABLE int32_t U_EXPORT2
-ucurr_getDefaultFractionDigits(const UChar* currency,
-                               UErrorCode* ec);
-
-/**
- * Returns the rounding increment for the given currency, or 0.0 if no
- * rounding is done by the currency.
- * @param currency null-terminated 3-letter ISO 4217 code
- * @param ec input-output error code
- * @return the non-negative rounding increment, or 0.0 if none,
- * or 0.0 if there is an error
- * @stable ICU 3.0
- */
-U_STABLE double U_EXPORT2
-ucurr_getRoundingIncrement(const UChar* currency,
-                           UErrorCode* ec);
-
-/**
- * Selector constants for ucurr_openCurrencies().
- *
- * @see ucurr_openCurrencies
- * @stable ICU 3.2
- */
-typedef enum UCurrCurrencyType {
-    /**
-     * Select all ISO-4217 currency codes.
-     * @stable ICU 3.2
-     */
-    UCURR_ALL = INT32_MAX,
-    /**
-     * Select only ISO-4217 commonly used currency codes.
-     * These currencies can be found in common use, and they usually have
-     * bank notes or coins associated with the currency code.
-     * This does not include fund codes, precious metals and other
-     * various ISO-4217 codes limited to special financial products.
-     * @stable ICU 3.2
-     */
-    UCURR_COMMON = 1,
-    /**
-     * Select ISO-4217 uncommon currency codes.
-     * These codes respresent fund codes, precious metals and other
-     * various ISO-4217 codes limited to special financial products.
-     * A fund code is a monetary resource associated with a currency.
-     * @stable ICU 3.2
-     */
-    UCURR_UNCOMMON = 2,
-    /**
-     * Select only deprecated ISO-4217 codes.
-     * These codes are no longer in general public use.
-     * @stable ICU 3.2
-     */
-    UCURR_DEPRECATED = 4,
-    /**
-     * Select only non-deprecated ISO-4217 codes.
-     * These codes are in general public use.
-     * @stable ICU 3.2
-     */
-    UCURR_NON_DEPRECATED = 8
-} UCurrCurrencyType;
-
-/**
- * Provides a UEnumeration object for listing ISO-4217 codes.
- * @param currType You can use one of several UCurrCurrencyType values for this
- *      variable. You can also | (or) them together to get a specific list of
- *      currencies. Most people will want to use the (UCURR_CURRENCY|UCURR_NON_DEPRECATED) value to
- *      get a list of current currencies.
- * @param pErrorCode Error code
- * @stable ICU 3.2
- */
-U_STABLE UEnumeration * U_EXPORT2
-ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode);
-
-/** 
- * Finds the number of valid currency codes for the
- * given locale and date.
- * @param locale the locale for which to retrieve the
- *               currency count.
- * @param date   the date for which to retrieve the
- *               currency count for the given locale.
- * @param ec     error code
- * @return       the number of currency codes for the
- *               given locale and date.  If 0, currency
- *               codes couldn't be found for the input
- *               values are invalid.
- * @stable ICU 4.0
- */
-U_STABLE int32_t U_EXPORT2
-ucurr_countCurrencies(const char* locale, 
-                 UDate date, 
-                 UErrorCode* ec); 
-
-/** 
- * Finds a currency code for the given locale and date 
- * @param locale the locale for which to retrieve a currency code.  
- *               Currency can be specified by the "currency" keyword 
- *               in which case it overrides the default currency code 
- * @param date   the date for which to retrieve a currency code for 
- *               the given locale. 
- * @param index  the index within the available list of currency codes
- *               for the given locale on the given date.
- * @param buff   fill in buffer. Can be NULL for preflighting. 
- * @param buffCapacity capacity of the fill in buffer. Can be 0 for 
- *               preflighting. If it is non-zero, the buff parameter 
- *               must not be NULL. 
- * @param ec     error code 
- * @return       length of the currency string. It should always be 3. 
- *               If 0, currency couldn't be found or the input values are  
- *               invalid.  
- * @stable ICU 4.0 
- */ 
-U_STABLE int32_t U_EXPORT2 
-ucurr_forLocaleAndDate(const char* locale, 
-                UDate date, 
-                int32_t index,
-                UChar* buff, 
-                int32_t buffCapacity, 
-                UErrorCode* ec); 
-
-/**
- * Given a key and a locale, returns an array of string values in a preferred
- * order that would make a difference. These are all and only those values where
- * the open (creation) of the service with the locale formed from the input locale
- * plus input keyword and that value has different behavior than creation with the
- * input locale alone.
- * @param key           one of the keys supported by this service.  For now, only
- *                      "currency" is supported.
- * @param locale        the locale
- * @param commonlyUsed  if set to true it will return only commonly used values
- *                      with the given locale in preferred order.  Otherwise,
- *                      it will return all the available values for the locale.
- * @param status error status
- * @return a string enumeration over keyword values for the given key and the locale.
- * @stable ICU 4.2
- */
-U_STABLE UEnumeration* U_EXPORT2
-ucurr_getKeywordValuesForLocale(const char* key,
-                                const char* locale,
-                                UBool commonlyUsed,
-                                UErrorCode* status);
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif
diff --git a/source/i18n/unicode/udat.h b/source/i18n/unicode/udat.h
deleted file mode 100644
index d480c7d..0000000
--- a/source/i18n/unicode/udat.h
+++ /dev/null
@@ -1,997 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2010, International Business Machines
- * Corporation and others. All Rights Reserved.
- *******************************************************************************
-*/
-
-#ifndef UDAT_H
-#define UDAT_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/localpointer.h"
-#include "unicode/ucal.h"
-#include "unicode/unum.h"
-/**
- * \file
- * \brief C API: DateFormat
- *
- * <h2> Date Format C API</h2>
- *
- * Date Format C API  consists of functions 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
- * structure UDateFormat, which can handle pretty much all normal
- * date formatting and parsing actions.
- * <P>
- * Date Format 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 with default time and date style,
- * use one of the static factory methods:
- * <pre>
- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  UChar *myString;
- *  int32_t myStrlen = 0;
- *  UDateFormat* dfmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &status);
- *  myStrlen = udat_format(dfmt, myDate, NULL, myStrlen, NULL, &status);
- *  if (status==U_BUFFER_OVERFLOW_ERROR){
- *      status=U_ZERO_ERROR;
- *      myString=(UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
- *      udat_format(dfmt, myDate, myString, myStrlen+1, NULL, &status);
- *  }
- * \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
- *  UErrorCode status = U_ZERO_ERROR;
- *  int32_t i, myStrlen = 0;
- *  UChar* myString;
- *  char buffer[1024];
- *  UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values
- *  UDateFormat* df = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, 0, &status);
- *  for (i = 0; i < 3; i++) {
- *      myStrlen = udat_format(df, myDateArr[i], NULL, myStrlen, NULL, &status);
- *      if(status == U_BUFFER_OVERFLOW_ERROR){
- *          status = U_ZERO_ERROR;
- *          myString = (UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
- *          udat_format(df, myDateArr[i], myString, myStrlen+1, NULL, &status);
- *          printf("%s\n", u_austrcpy(buffer, myString) );
- *          free(myString);
- *      }
- *  }
- * \endcode
- * </pre>
- * To get specific fields of a date, you can use UFieldPosition to
- * get specific fields.
- * <pre>
- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  UFieldPosition pos;
- *  UChar *myString;
- *  int32_t myStrlen = 0;
- *  char buffer[1024];
- *
- *  pos.field = 1;  // Same as the DateFormat::EField enum
- *  UDateFormat* dfmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, -1, NULL, 0, &status);
- *  myStrlen = udat_format(dfmt, myDate, NULL, myStrlen, &pos, &status);
- *  if (status==U_BUFFER_OVERFLOW_ERROR){
- *      status=U_ZERO_ERROR;
- *      myString=(UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
- *      udat_format(dfmt, myDate, myString, myStrlen+1, &pos, &status);
- *  }
- *  printf("date format: %s\n", u_austrcpy(buffer, myString));
- *  buffer[pos.endIndex] = 0;   // NULL terminate the string.
- *  printf("UFieldPosition position equals %s\n", &buffer[pos.beginIndex]);
- * \endcode
- * </pre>
- * To format a date for a different Locale, specify it in the call to
- * udat_open()
- * <pre>
- * \code
- *        UDateFormat* df = udat_open(UDAT_SHORT, UDAT_SHORT, "fr_FR", NULL, -1, NULL, 0, &status);
- * \endcode
- * </pre>
- * You can use a DateFormat API udat_parse() to parse.
- * <pre>
- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  int32_t parsepos=0;
- *  UDate myDate = udat_parse(df, myString, u_strlen(myString), &parsepos, &status);
- * \endcode
- * </pre>
- *  You can pass in different options for the arguments for date and time style
- *  to control the length of the result; from SHORT to MEDIUM to LONG to FULL.
- *  The exact result depends on the locale, but generally:
- *  see UDateFormatStyle for more details
- * <ul type=round>
- *   <li>   UDAT_SHORT is completely numeric, such as 12/13/52 or 3:30pm
- *   <li>   UDAT_MEDIUM is longer, such as Jan 12, 1952
- *   <li>   UDAT_LONG is longer, such as January 12, 1952 or 3:30:32pm
- *   <li>   UDAT_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.
- * <P>
- * You can also use forms of the parse and format methods with Parse Position and
- * UFieldPosition 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>
- */
-
-/** A date formatter.
- *  For usage in C programs.
- *  @stable ICU 2.6
- */
-typedef void* UDateFormat;
-
-/** The possible date/time format styles 
- *  @stable ICU 2.6
- */
-typedef enum UDateFormatStyle {
-    /** Full style */
-    UDAT_FULL,
-    /** Long style */
-    UDAT_LONG,
-    /** Medium style */
-    UDAT_MEDIUM,
-    /** Short style */
-    UDAT_SHORT,
-    /** Default style */
-    UDAT_DEFAULT = UDAT_MEDIUM,
-
-    /** Bitfield for relative date */
-    UDAT_RELATIVE = (1 << 7),
-    
-    UDAT_FULL_RELATIVE = UDAT_FULL | UDAT_RELATIVE,
-        
-    UDAT_LONG_RELATIVE = UDAT_LONG | UDAT_RELATIVE,
-    
-    UDAT_MEDIUM_RELATIVE = UDAT_MEDIUM | UDAT_RELATIVE,
-    
-    UDAT_SHORT_RELATIVE = UDAT_SHORT | UDAT_RELATIVE,
-    
-    
-    /** No style */
-    UDAT_NONE = -1,
-    /** for internal API use only */
-    UDAT_IGNORE = -2
-
-} UDateFormatStyle;
-
-
-/**
- * @{
- * Below are a set of pre-defined skeletons.
- *
- * <P>
- * A skeleton 
- * <ol>
- * <li>
- *    only keeps the field pattern letter and ignores all other parts 
- *    in a pattern, such as space, punctuations, and string literals.
- * </li>
- * <li>
- *    hides the order of fields. 
- * </li>
- * <li>
- *    might hide a field's pattern letter length.
- *
- *    For those non-digit calendar fields, the pattern letter length is 
- *    important, such as MMM, MMMM, and MMMMM; EEE and EEEE, 
- *    and the field's pattern letter length is honored.
- *    
- *    For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy, 
- *    the field pattern length is ignored and the best match, which is defined 
- *    in date time patterns, will be returned without honor the field pattern
- *    letter length in skeleton.
- * </li>
- * </ol>
- *
- * @stable ICU 4.0
- */
-
-#define UDAT_MINUTE_SECOND              "ms"
-#define UDAT_HOUR24_MINUTE              "Hm"
-#define UDAT_HOUR24_MINUTE_SECOND       "Hms"      
-#define UDAT_HOUR_MINUTE_SECOND         "hms"
-#define UDAT_STANDALONE_MONTH           "LLLL"
-#define UDAT_ABBR_STANDALONE_MONTH      "LLL"
-#define UDAT_YEAR_QUARTER               "yQQQ"
-#define UDAT_YEAR_ABBR_QUARTER          "yQ"
-
-/** @} */
-
-/**
- * @{
- * Below are a set of pre-defined skeletons that 
- * have pre-defined interval patterns in resource files.
- * Users are encouraged to use them in date interval format factory methods.
- * 
- * @stable ICU 4.0
- */
-#define UDAT_HOUR_MINUTE                "hm"
-#define UDAT_YEAR                       "y"
-#define UDAT_DAY                        "d"
-#define UDAT_NUM_MONTH_WEEKDAY_DAY      "MEd"
-#define UDAT_YEAR_NUM_MONTH             "yM"              
-#define UDAT_NUM_MONTH_DAY              "Md"
-#define UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY "yMEd"
-#define UDAT_ABBR_MONTH_WEEKDAY_DAY     "MMMEd"
-#define UDAT_YEAR_MONTH                 "yMMMM"
-#define UDAT_YEAR_ABBR_MONTH            "yMMM"
-#define UDAT_MONTH_DAY                  "MMMMd"
-#define UDAT_ABBR_MONTH_DAY             "MMMd" 
-#define UDAT_MONTH_WEEKDAY_DAY          "MMMMEEEEd"
-#define UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY "yMMMEd" 
-#define UDAT_YEAR_MONTH_WEEKDAY_DAY     "yMMMMEEEEd"
-#define UDAT_YEAR_MONTH_DAY             "yMMMMd"
-#define UDAT_YEAR_ABBR_MONTH_DAY        "yMMMd"
-#define UDAT_YEAR_NUM_MONTH_DAY         "yMd"
-#define UDAT_NUM_MONTH                  "M"
-#define UDAT_ABBR_MONTH                 "MMM"
-#define UDAT_MONTH                      "MMMM"
-#define UDAT_HOUR_MINUTE_GENERIC_TZ     "hmv"
-#define UDAT_HOUR_MINUTE_TZ             "hmz"
-#define UDAT_HOUR                       "h"
-#define UDAT_HOUR_GENERIC_TZ            "hv"
-#define UDAT_HOUR_TZ                    "hz"
-
-/** @} */
-
-
-/**
- * FieldPosition and UFieldPosition selectors for format fields
- * defined by DateFormat and UDateFormat.
- * @stable ICU 3.0
- */
-typedef enum UDateFormatField {
-    /**
-     * FieldPosition and UFieldPosition selector for 'G' field alignment,
-     * corresponding to the UCAL_ERA field.
-     * @stable ICU 3.0
-     */
-    UDAT_ERA_FIELD = 0,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'y' field alignment,
-     * corresponding to the UCAL_YEAR field.
-     * @stable ICU 3.0
-     */
-    UDAT_YEAR_FIELD = 1,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'M' field alignment,
-     * corresponding to the UCAL_MONTH field.
-     * @stable ICU 3.0
-     */
-    UDAT_MONTH_FIELD = 2,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'd' field alignment,
-     * corresponding to the UCAL_DATE field.
-     * @stable ICU 3.0
-     */
-    UDAT_DATE_FIELD = 3,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'k' field alignment,
-     * corresponding to the UCAL_HOUR_OF_DAY field.
-     * UDAT_HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock.
-     * For example, 23:59 + 01:00 results in 24:59.
-     * @stable ICU 3.0
-     */
-    UDAT_HOUR_OF_DAY1_FIELD = 4,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'H' field alignment,
-     * corresponding to the UCAL_HOUR_OF_DAY field.
-     * UDAT_HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
-     * For example, 23:59 + 01:00 results in 00:59.
-     * @stable ICU 3.0
-     */
-    UDAT_HOUR_OF_DAY0_FIELD = 5,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'm' field alignment,
-     * corresponding to the UCAL_MINUTE field.
-     * @stable ICU 3.0
-     */
-    UDAT_MINUTE_FIELD = 6,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 's' field alignment,
-     * corresponding to the UCAL_SECOND field.
-     * @stable ICU 3.0
-     */
-    UDAT_SECOND_FIELD = 7,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'S' field alignment,
-     * corresponding to the UCAL_MILLISECOND field.
-     * @stable ICU 3.0
-     */
-    UDAT_FRACTIONAL_SECOND_FIELD = 8,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'E' field alignment,
-     * corresponding to the UCAL_DAY_OF_WEEK field.
-     * @stable ICU 3.0
-     */
-    UDAT_DAY_OF_WEEK_FIELD = 9,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'D' field alignment,
-     * corresponding to the UCAL_DAY_OF_YEAR field.
-     * @stable ICU 3.0
-     */
-    UDAT_DAY_OF_YEAR_FIELD = 10,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'F' field alignment,
-     * corresponding to the UCAL_DAY_OF_WEEK_IN_MONTH field.
-     * @stable ICU 3.0
-     */
-    UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'w' field alignment,
-     * corresponding to the UCAL_WEEK_OF_YEAR field.
-     * @stable ICU 3.0
-     */
-    UDAT_WEEK_OF_YEAR_FIELD = 12,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'W' field alignment,
-     * corresponding to the UCAL_WEEK_OF_MONTH field.
-     * @stable ICU 3.0
-     */
-    UDAT_WEEK_OF_MONTH_FIELD = 13,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'a' field alignment,
-     * corresponding to the UCAL_AM_PM field.
-     * @stable ICU 3.0
-     */
-    UDAT_AM_PM_FIELD = 14,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'h' field alignment,
-     * corresponding to the UCAL_HOUR field.
-     * UDAT_HOUR1_FIELD is used for the one-based 12-hour clock.
-     * For example, 11:30 PM + 1 hour results in 12:30 AM.
-     * @stable ICU 3.0
-     */
-    UDAT_HOUR1_FIELD = 15,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'K' field alignment,
-     * corresponding to the UCAL_HOUR field.
-     * UDAT_HOUR0_FIELD is used for the zero-based 12-hour clock.
-     * For example, 11:30 PM + 1 hour results in 00:30 AM.
-     * @stable ICU 3.0
-     */
-    UDAT_HOUR0_FIELD = 16,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'z' field alignment,
-     * corresponding to the UCAL_ZONE_OFFSET and
-     * UCAL_DST_OFFSET fields.
-     * @stable ICU 3.0
-     */
-    UDAT_TIMEZONE_FIELD = 17,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'Y' field alignment,
-     * corresponding to the UCAL_YEAR_WOY field.
-     * @stable ICU 3.0
-     */
-    UDAT_YEAR_WOY_FIELD = 18,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'e' field alignment,
-     * corresponding to the UCAL_DOW_LOCAL field.
-     * @stable ICU 3.0
-     */
-    UDAT_DOW_LOCAL_FIELD = 19,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'u' field alignment,
-     * corresponding to the UCAL_EXTENDED_YEAR field.
-     * @stable ICU 3.0
-     */
-    UDAT_EXTENDED_YEAR_FIELD = 20,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'g' field alignment,
-     * corresponding to the UCAL_JULIAN_DAY field.
-     * @stable ICU 3.0
-     */
-    UDAT_JULIAN_DAY_FIELD = 21,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'A' field alignment,
-     * corresponding to the UCAL_MILLISECONDS_IN_DAY field.
-     * @stable ICU 3.0
-     */
-    UDAT_MILLISECONDS_IN_DAY_FIELD = 22,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'Z' field alignment,
-     * corresponding to the UCAL_ZONE_OFFSET and
-     * UCAL_DST_OFFSET fields.
-     * @stable ICU 3.0
-     */
-    UDAT_TIMEZONE_RFC_FIELD = 23,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'v' field alignment,
-     * corresponding to the UCAL_ZONE_OFFSET field.
-     * @stable ICU 3.4
-     */
-    UDAT_TIMEZONE_GENERIC_FIELD = 24,
-    /**
-     * FieldPosition selector for 'c' field alignment,
-     * corresponding to the {@link #UCAL_DOW_LOCAL} field.
-     * This displays the stand alone day name, if available.
-     * @stable ICU 3.4
-     */
-    UDAT_STANDALONE_DAY_FIELD = 25,
-
-    /**
-     * FieldPosition selector for 'L' field alignment,
-     * corresponding to the {@link #UCAL_MONTH} field.
-     * This displays the stand alone month name, if available.
-     * @stable ICU 3.4
-     */
-    UDAT_STANDALONE_MONTH_FIELD = 26,
-
-    /**
-     * FieldPosition selector for "Q" field alignment,
-     * corresponding to quarters. This is implemented
-     * using the {@link #UCAL_MONTH} field. This
-     * displays the quarter.
-     * @stable ICU 3.6
-     */
-    UDAT_QUARTER_FIELD = 27,
-
-    /**
-     * FieldPosition selector for the "q" field alignment,
-     * corresponding to stand-alone quarters. This is
-     * implemented using the {@link #UCAL_MONTH} field.
-     * This displays the stand-alone quarter.
-     * @stable ICU 3.6
-     */
-    UDAT_STANDALONE_QUARTER_FIELD = 28,
-
-    /**
-     * FieldPosition and UFieldPosition selector for 'V' field alignment,
-     * corresponding to the UCAL_ZONE_OFFSET field.
-     * @stable ICU 3.8
-     */
-    UDAT_TIMEZONE_SPECIAL_FIELD = 29,
-
-   /**
-     * Number of FieldPosition and UFieldPosition selectors for
-     * DateFormat and UDateFormat.
-     * Valid selectors range from 0 to UDAT_FIELD_COUNT-1.
-     * This value is subject to change if new fields are defined
-     * in the future.
-     * @stable ICU 3.0
-     */
-    UDAT_FIELD_COUNT = 30
-
-} UDateFormatField;
-
-
-/**
- * Maps from a UDateFormatField to the corresponding UCalendarDateFields.
- * Note: since the mapping is many-to-one, there is no inverse mapping.
- * @param field the UDateFormatField.
- * @return the UCalendarDateField.  This will be UCAL_FIELD_COUNT in case
- * of error (e.g., the input field is UDAT_FIELD_COUNT).
- * @stable ICU 4.4
- */
-U_STABLE UCalendarDateFields U_EXPORT2
-udat_toCalendarDateField(UDateFormatField field);
-
-
-/**
- * Open a new UDateFormat for formatting and parsing dates and times.
- * A UDateFormat may be used to format dates in calls to {@link #udat_format },
- * and to parse dates in calls to {@link #udat_parse }.
- * @param timeStyle The style used to format times; one of UDAT_FULL, UDAT_LONG,
- * UDAT_MEDIUM, UDAT_SHORT, UDAT_DEFAULT, or UDAT_NONE (relative time styles
- * are not currently supported)
- * @param dateStyle The style used to format dates; one of UDAT_FULL, UDAT_LONG,
- * UDAT_MEDIUM, UDAT_SHORT, UDAT_DEFAULT, UDAT_FULL_RELATIVE, UDAT_LONG_RELATIVE,
- * UDAT_MEDIUM_RELATIVE, UDAT_SHORT_RELATIVE, or UDAT_NONE
- * @param locale The locale specifying the formatting conventions
- * @param tzID A timezone ID specifying the timezone to use.  If 0, use
- * the default timezone.
- * @param tzIDLength The length of tzID, or -1 if null-terminated.
- * @param pattern A pattern specifying the format to use.
- * @param patternLength The number of characters in the pattern, or -1 if null-terminated.
- * @param status A pointer to an UErrorCode to receive any errors
- * @return A pointer to a UDateFormat to use for formatting dates and times, or 0 if
- * an error occurred.
- * @stable ICU 2.0
- */
-U_STABLE UDateFormat* U_EXPORT2 
-udat_open(UDateFormatStyle  timeStyle,
-          UDateFormatStyle  dateStyle,
-          const char        *locale,
-          const UChar       *tzID,
-          int32_t           tzIDLength,
-          const UChar       *pattern,
-          int32_t           patternLength,
-          UErrorCode        *status);
-
-
-/**
-* Close a UDateFormat.
-* Once closed, a UDateFormat may no longer be used.
-* @param format The formatter to close.
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_close(UDateFormat* format);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUDateFormatPointer
- * "Smart pointer" class, closes a UDateFormat via udat_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Open a copy of a UDateFormat.
- * This function performs a deep copy.
- * @param fmt The format to copy
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return A pointer to a UDateFormat identical to fmt.
- * @stable ICU 2.0
- */
-U_STABLE UDateFormat* U_EXPORT2 
-udat_clone(const UDateFormat *fmt,
-       UErrorCode *status);
-
-/**
-* Format a date using an UDateFormat.
-* The date will be formatted using the conventions specified in {@link #udat_open }
-* @param format The formatter to use
-* @param dateToFormat The date to format
-* @param result A pointer to a buffer to receive the formatted number.
-* @param resultLength The maximum size of result.
-* @param position A pointer to a UFieldPosition.  On input, position->field
-* is read.  On output, position->beginIndex and position->endIndex indicate
-* the beginning and ending indices of field number position->field, if such
-* a field exists.  This parameter may be NULL, in which case no field
-* position data is returned.
-* @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.
-* @see udat_parse
-* @see UFieldPosition
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-udat_format(    const    UDateFormat*    format,
-                        UDate           dateToFormat,
-                        UChar*          result,
-                        int32_t         resultLength,
-                        UFieldPosition* position,
-                        UErrorCode*     status);
-
-/**
-* Parse a string into an date/time using a UDateFormat.
-* The date will be parsed using the conventions specified in {@link #udat_open }
-* @param format The formatter to use.
-* @param text The text to parse.
-* @param textLength The length of text, or -1 if null-terminated.
-* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
-* to begin parsing.  If not 0, on output the offset at which parsing ended.
-* @param status A pointer to an UErrorCode to receive any errors
-* @return The value of the parsed date/time
-* @see udat_format
-* @stable ICU 2.0
-*/
-U_STABLE UDate U_EXPORT2 
-udat_parse(    const    UDateFormat*    format,
-            const    UChar*          text,
-                    int32_t         textLength,
-                    int32_t         *parsePos,
-                    UErrorCode      *status);
-
-/**
-* Parse a string into an date/time using a UDateFormat.
-* The date will be parsed using the conventions specified in {@link #udat_open }
-* @param format The formatter to use.
-* @param calendar The calendar in which to store the parsed data.
-* @param text The text to parse.
-* @param textLength The length of text, or -1 if null-terminated.
-* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
-* to begin parsing.  If not 0, on output the offset at which parsing ended.
-* @param status A pointer to an UErrorCode to receive any errors
-* @see udat_format
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_parseCalendar(const    UDateFormat*    format,
-                            UCalendar*      calendar,
-                   const    UChar*          text,
-                            int32_t         textLength,
-                            int32_t         *parsePos,
-                            UErrorCode      *status);
-
-/**
-* Determine if an UDateFormat will perform lenient parsing.
-* With lenient parsing, the parser may use heuristics to interpret inputs that do not
-* precisely match the pattern. With strict parsing, inputs must match the pattern.
-* @param fmt The formatter to query
-* @return TRUE if fmt is set to perform lenient parsing, FALSE otherwise.
-* @see udat_setLenient
-* @stable ICU 2.0
-*/
-U_STABLE UBool U_EXPORT2 
-udat_isLenient(const UDateFormat* fmt);
-
-/**
-* Specify whether an UDateFormat will perform lenient parsing.
-* With lenient parsing, the parser may use heuristics to interpret inputs that do not
-* precisely match the pattern. With strict parsing, inputs must match the pattern.
-* @param fmt The formatter to set
-* @param isLenient TRUE if fmt should perform lenient parsing, FALSE otherwise.
-* @see dat_isLenient
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_setLenient(    UDateFormat*    fmt,
-                    UBool          isLenient);
-
-/**
-* Get the UCalendar associated with an UDateFormat.
-* A UDateFormat uses a UCalendar to convert a raw value to, for example,
-* the day of the week.
-* @param fmt The formatter to query.
-* @return A pointer to the UCalendar used by fmt.
-* @see udat_setCalendar
-* @stable ICU 2.0
-*/
-U_STABLE const UCalendar* U_EXPORT2 
-udat_getCalendar(const UDateFormat* fmt);
-
-/**
-* Set the UCalendar associated with an UDateFormat.
-* A UDateFormat uses a UCalendar to convert a raw value to, for example,
-* the day of the week.
-* @param fmt The formatter to set.
-* @param calendarToSet A pointer to an UCalendar to be used by fmt.
-* @see udat_setCalendar
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_setCalendar(            UDateFormat*    fmt,
-                    const   UCalendar*      calendarToSet);
-
-/**
-* Get the UNumberFormat associated with an UDateFormat.
-* A UDateFormat uses a UNumberFormat to format numbers within a date,
-* for example the day number.
-* @param fmt The formatter to query.
-* @return A pointer to the UNumberFormat used by fmt to format numbers.
-* @see udat_setNumberFormat
-* @stable ICU 2.0
-*/
-U_STABLE const UNumberFormat* U_EXPORT2 
-udat_getNumberFormat(const UDateFormat* fmt);
-
-/**
-* Set the UNumberFormat associated with an UDateFormat.
-* A UDateFormat uses a UNumberFormat to format numbers within a date,
-* for example the day number.
-* @param fmt The formatter to set.
-* @param numberFormatToSet A pointer to the UNumberFormat to be used by fmt to format numbers.
-* @see udat_getNumberFormat
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_setNumberFormat(            UDateFormat*    fmt,
-                        const   UNumberFormat*  numberFormatToSet);
-
-/**
-* Get a locale for which date/time formatting patterns are available.
-* A UDateFormat in a locale returned by this function will perform the correct
-* formatting and parsing for the locale.
-* @param localeIndex The index of the desired locale.
-* @return A locale for which date/time formatting patterns are available, or 0 if none.
-* @see udat_countAvailable
-* @stable ICU 2.0
-*/
-U_STABLE const char* U_EXPORT2 
-udat_getAvailable(int32_t localeIndex);
-
-/**
-* Determine how many locales have date/time  formatting patterns available.
-* This function is most useful as determining the loop ending condition for
-* calls to {@link #udat_getAvailable }.
-* @return The number of locales for which date/time formatting patterns are available.
-* @see udat_getAvailable
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-udat_countAvailable(void);
-
-/**
-* Get the year relative to which all 2-digit years are interpreted.
-* For example, if the 2-digit start year is 2100, the year 99 will be
-* interpreted as 2199.
-* @param fmt The formatter to query.
-* @param status A pointer to an UErrorCode to receive any errors
-* @return The year relative to which all 2-digit years are interpreted.
-* @see udat_Set2DigitYearStart
-* @stable ICU 2.0
-*/
-U_STABLE UDate U_EXPORT2 
-udat_get2DigitYearStart(    const   UDateFormat     *fmt,
-                                    UErrorCode      *status);
-
-/**
-* Set the year relative to which all 2-digit years will be interpreted.
-* For example, if the 2-digit start year is 2100, the year 99 will be
-* interpreted as 2199.
-* @param fmt The formatter to set.
-* @param d The year relative to which all 2-digit years will be interpreted.
-* @param status A pointer to an UErrorCode to receive any errors
-* @see udat_Set2DigitYearStart
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_set2DigitYearStart(    UDateFormat     *fmt,
-                            UDate           d,
-                            UErrorCode      *status);
-
-/**
-* Extract the pattern from a UDateFormat.
-* The pattern will follow the pattern syntax rules.
-* @param fmt The formatter to query.
-* @param localized TRUE if the pattern should be localized, FALSE otherwise.
-* @param result A pointer to a buffer to receive the pattern.
-* @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.
-* @see udat_applyPattern
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-udat_toPattern(    const   UDateFormat     *fmt,
-                        UBool          localized,
-                        UChar           *result,
-                        int32_t         resultLength,
-                        UErrorCode      *status);
-
-/**
-* Set the pattern used by an UDateFormat.
-* The pattern should follow the pattern syntax rules.
-* @param format The formatter to set.
-* @param localized TRUE if the pattern is localized, FALSE otherwise.
-* @param pattern The new pattern
-* @param patternLength The length of pattern, or -1 if null-terminated.
-* @see udat_toPattern
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_applyPattern(            UDateFormat     *format,
-                            UBool          localized,
-                    const   UChar           *pattern,
-                            int32_t         patternLength);
-
-/** 
- * The possible types of date format symbols 
- * @stable ICU 2.6
- */
-typedef enum UDateFormatSymbolType {
-    /** The era names, for example AD */
-    UDAT_ERAS,
-    /** The month names, for example February */
-    UDAT_MONTHS,
-    /** The short month names, for example Feb. */
-    UDAT_SHORT_MONTHS,
-    /** The weekday names, for example Monday */
-    UDAT_WEEKDAYS,
-    /** The short weekday names, for example Mon. */
-    UDAT_SHORT_WEEKDAYS,
-    /** The AM/PM names, for example AM */
-    UDAT_AM_PMS,
-    /** The localized characters */
-    UDAT_LOCALIZED_CHARS,
-    /** The long era names, for example Anno Domini */
-    UDAT_ERA_NAMES,
-    /** The narrow month names, for example F */
-    UDAT_NARROW_MONTHS,
-    /** The narrow weekday names, for example N */
-    UDAT_NARROW_WEEKDAYS,
-    /** Standalone context versions of months */
-    UDAT_STANDALONE_MONTHS,
-    UDAT_STANDALONE_SHORT_MONTHS,
-    UDAT_STANDALONE_NARROW_MONTHS,
-    /** Standalone context versions of weekdays */
-    UDAT_STANDALONE_WEEKDAYS,
-    UDAT_STANDALONE_SHORT_WEEKDAYS,
-    UDAT_STANDALONE_NARROW_WEEKDAYS,
-    /** The quarters, for example 1st Quarter */
-    UDAT_QUARTERS,
-    /** The short quarter names, for example Q1 */
-    UDAT_SHORT_QUARTERS,
-    /** Standalone context versions of quarters */
-    UDAT_STANDALONE_QUARTERS,
-    UDAT_STANDALONE_SHORT_QUARTERS
-
-} UDateFormatSymbolType;
-
-struct UDateFormatSymbols;
-/** Date format symbols.
- *  For usage in C programs.
- *  @stable ICU 2.6
- */
-typedef struct UDateFormatSymbols UDateFormatSymbols;
-
-/**
-* Get the symbols associated with an UDateFormat.
-* The symbols are what a UDateFormat uses to represent locale-specific data,
-* for example month or day names.
-* @param fmt The formatter to query.
-* @param type The type of symbols to get.  One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
-* UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS
-* @param symbolIndex The desired symbol of type type.
-* @param result A pointer to a buffer to receive the pattern.
-* @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.
-* @see udat_countSymbols
-* @see udat_setSymbols
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-udat_getSymbols(const   UDateFormat             *fmt,
-                        UDateFormatSymbolType   type,
-                        int32_t                 symbolIndex,
-                        UChar                   *result,
-                        int32_t                 resultLength,
-                        UErrorCode              *status);
-
-/**
-* Count the number of particular symbols for an UDateFormat.
-* This function is most useful as for detemining the loop termination condition
-* for calls to {@link #udat_getSymbols }.
-* @param fmt The formatter to query.
-* @param type The type of symbols to count.  One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
-* UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS
-* @return The number of symbols of type type.
-* @see udat_getSymbols
-* @see udat_setSymbols
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-udat_countSymbols(    const    UDateFormat                *fmt,
-                            UDateFormatSymbolType    type);
-
-/**
-* Set the symbols associated with an UDateFormat.
-* The symbols are what a UDateFormat uses to represent locale-specific data,
-* for example month or day names.
-* @param format The formatter to set
-* @param type The type of symbols to set.  One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
-* UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS
-* @param symbolIndex The index of the symbol to set of type type.
-* @param value The new value
-* @param valueLength The length of value, or -1 if null-terminated
-* @param status A pointer to an UErrorCode to receive any errors
-* @see udat_getSymbols
-* @see udat_countSymbols
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-udat_setSymbols(    UDateFormat             *format,
-                    UDateFormatSymbolType   type,
-                    int32_t                 symbolIndex,
-                    UChar                   *value,
-                    int32_t                 valueLength,
-                    UErrorCode              *status);
-
-/**
- * Get the locale for this date format object.
- * You can choose between valid and actual locale.
- * @param fmt The formatter to get the locale from
- * @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
-udat_getLocaleByType(const UDateFormat *fmt,
-                     ULocDataLocaleType type,
-                     UErrorCode* status); 
-
-/**
-* Extract the date pattern from a UDateFormat set for relative date formatting.
-* The pattern will follow the pattern syntax rules.
-* @param fmt The formatter to query.
-* @param result A pointer to a buffer to receive the pattern.
-* @param resultLength The maximum size of result.
-* @param status A pointer to a UErrorCode to receive any errors
-* @return The total buffer size needed; if greater than resultLength, the output was truncated.
-* @see udat_applyPatternRelative
-* @internal ICU 4.2 technology preview
-*/
-U_INTERNAL int32_t U_EXPORT2 
-udat_toPatternRelativeDate(const UDateFormat *fmt,
-                           UChar             *result,
-                           int32_t           resultLength,
-                           UErrorCode        *status);
-
-/**
-* Extract the time pattern from a UDateFormat set for relative date formatting.
-* The pattern will follow the pattern syntax rules.
-* @param fmt The formatter to query.
-* @param result A pointer to a buffer to receive the pattern.
-* @param resultLength The maximum size of result.
-* @param status A pointer to a UErrorCode to receive any errors
-* @return The total buffer size needed; if greater than resultLength, the output was truncated.
-* @see udat_applyPatternRelative
-* @internal ICU 4.2 technology preview
-*/
-U_INTERNAL int32_t U_EXPORT2 
-udat_toPatternRelativeTime(const UDateFormat *fmt,
-                           UChar             *result,
-                           int32_t           resultLength,
-                           UErrorCode        *status);
-
-/**
-* Set the date & time patterns used by a UDateFormat set for relative date formatting.
-* The patterns should follow the pattern syntax rules.
-* @param format The formatter to set.
-* @param datePattern The new date pattern
-* @param datePatternLength The length of datePattern, or -1 if null-terminated.
-* @param timePattern The new time pattern
-* @param timePatternLength The length of timePattern, or -1 if null-terminated.
-* @param status A pointer to a UErrorCode to receive any errors
-* @see udat_toPatternRelativeDate, udat_toPatternRelativeTime
-* @internal ICU 4.2 technology preview
-*/
-U_INTERNAL void U_EXPORT2 
-udat_applyPatternRelative(UDateFormat *format,
-                          const UChar *datePattern,
-                          int32_t     datePatternLength,
-                          const UChar *timePattern,
-                          int32_t     timePatternLength,
-                          UErrorCode  *status);
-
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif
diff --git a/source/i18n/unicode/udatpg.h b/source/i18n/unicode/udatpg.h
deleted file mode 100644
index 3dc7e89..0000000
--- a/source/i18n/unicode/udatpg.h
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2007-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  udatpg.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2007jul30
-*   created by: Markus W. Scherer
-*/
-
-#ifndef __UDATPG_H__
-#define __UDATPG_H__
-
-#include "unicode/utypes.h"
-#include "unicode/uenum.h"
-#include "unicode/localpointer.h"
-
-/**
- * \file
- * \brief C API: Wrapper for DateTimePatternGenerator (unicode/dtptngen.h).
- *
- * UDateTimePatternGenerator provides flexible generation of date format patterns, 
- * like "yy-MM-dd". The user can build up the generator by adding successive 
- * patterns. Once that is done, a query can be made using a "skeleton", which is 
- * a pattern which just includes the desired fields and lengths. The generator 
- * will return the "best fit" pattern corresponding to that skeleton.
- * <p>The main method people will use is udatpg_getBestPattern, since normally
- * UDateTimePatternGenerator is pre-built with data from a particular locale. 
- * However, generators can be built directly from other data as well.
- * <p><i>Issue: may be useful to also have a function that returns the list of 
- * fields in a pattern, in order, since we have that internally.
- * That would be useful for getting the UI order of field elements.</i>
- */
-
-/**
- * Opaque type for a date/time pattern generator object.
- * @stable ICU 3.8
- */
-typedef void *UDateTimePatternGenerator;
-
-/**
- * Field number constants for udatpg_getAppendItemFormats() and similar functions.
- * These constants are separate from UDateFormatField despite semantic overlap
- * because some fields are merged for the date/time pattern generator.
- * @stable ICU 3.8
- */
-typedef enum UDateTimePatternField {
-    /** @stable ICU 3.8 */
-    UDATPG_ERA_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_YEAR_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_QUARTER_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_MONTH_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_WEEK_OF_YEAR_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_WEEK_OF_MONTH_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_WEEKDAY_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_DAY_OF_YEAR_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_DAY_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_DAYPERIOD_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_HOUR_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_MINUTE_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_SECOND_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_FRACTIONAL_SECOND_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_ZONE_FIELD,
-    /** @stable ICU 3.8 */
-    UDATPG_FIELD_COUNT
-} UDateTimePatternField;
-
-/**
- * Masks to control forcing the length of specified fields in the returned
- * pattern to match those in the skeleton (when this would not happen
- * otherwise). These may be combined to force the length of multiple fields.
- * Used with udatpg_getBestPatternWithOptions, udatpg_replaceFieldTypesWithOptions.
- * @stable ICU 4.4
- */
-typedef enum UDateTimePatternMatchOptions {
-    /** @stable ICU 4.4 */
-    UDATPG_MATCH_NO_OPTIONS = 0,
-    /** @stable ICU 4.4 */
-    UDATPG_MATCH_HOUR_FIELD_LENGTH = 1 << UDATPG_HOUR_FIELD,
-    /** @internal ICU 4.4 */
-    UDATPG_MATCH_MINUTE_FIELD_LENGTH = 1 << UDATPG_MINUTE_FIELD,
-    /** @internal ICU 4.4 */
-    UDATPG_MATCH_SECOND_FIELD_LENGTH = 1 << UDATPG_SECOND_FIELD,
-    /** @stable ICU 4.4 */
-    UDATPG_MATCH_ALL_FIELDS_LENGTH = (1 << UDATPG_FIELD_COUNT) - 1
-} UDateTimePatternMatchOptions;
-
-/**
- * Status return values from udatpg_addPattern().
- * @stable ICU 3.8
- */
-typedef enum UDateTimePatternConflict {
-    /** @stable ICU 3.8 */
-    UDATPG_NO_CONFLICT,
-    /** @stable ICU 3.8 */
-    UDATPG_BASE_CONFLICT,
-    /** @stable ICU 3.8 */
-    UDATPG_CONFLICT,
-    /** @stable ICU 3.8 */
-    UDATPG_CONFLICT_COUNT
-} UDateTimePatternConflict;
-
-/**
-  * Open a generator according to a given locale.
-  * @param locale
-  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
-  *                   failure before the function call.
-  * @return a pointer to UDateTimePatternGenerator.
-  * @stable ICU 3.8
-  */
-U_STABLE UDateTimePatternGenerator * U_EXPORT2
-udatpg_open(const char *locale, UErrorCode *pErrorCode);
-
-/**
-  * Open an empty generator, to be constructed with udatpg_addPattern(...) etc.
-  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
-  *                   failure before the function call.
-  * @return a pointer to UDateTimePatternGenerator.
-  * @stable ICU 3.8
-  */
-U_STABLE UDateTimePatternGenerator * U_EXPORT2
-udatpg_openEmpty(UErrorCode *pErrorCode);
-
-/**
-  * Close a generator.
-  * @param dtpg a pointer to UDateTimePatternGenerator.
-  * @stable ICU 3.8
-  */
-U_STABLE void U_EXPORT2
-udatpg_close(UDateTimePatternGenerator *dtpg);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUDateTimePatternGeneratorPointer
- * "Smart pointer" class, closes a UDateTimePatternGenerator via udatpg_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateTimePatternGeneratorPointer, UDateTimePatternGenerator, udatpg_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
-  * Create a copy pf a generator.
-  * @param dtpg a pointer to UDateTimePatternGenerator to be copied.
-  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
-  *                   failure before the function call.
-  * @return a pointer to a new UDateTimePatternGenerator.
-  * @stable ICU 3.8
- */
-U_STABLE UDateTimePatternGenerator * U_EXPORT2
-udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
-
-/**
- * Get the best pattern matching the input skeleton. It is guaranteed to
- * have all of the fields in the skeleton.
- * 
- * Note that this function uses a non-const UDateTimePatternGenerator:
- * It uses a stateful pattern parser which is set up for each generator object,
- * rather than creating one for each function call.
- * Consecutive calls to this function do not affect each other,
- * but this function cannot be used concurrently on a single generator object.
- * 
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param skeleton
- *            The skeleton is a pattern containing only the variable fields.
- *            For example, "MMMdd" and "mmhh" are skeletons.
- * @param length the length of skeleton
- * @param bestPattern
- *            The best pattern found from the given skeleton.
- * @param capacity the capacity of bestPattern.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *                   failure before the function call.
- * @return the length of bestPattern.
- * @stable ICU 3.8
- */
-U_STABLE int32_t U_EXPORT2
-udatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
-                      const UChar *skeleton, int32_t length,
-                      UChar *bestPattern, int32_t capacity,
-                      UErrorCode *pErrorCode);
-
-/**
- * Get the best pattern matching the input skeleton. It is guaranteed to
- * have all of the fields in the skeleton.
- * 
- * Note that this function uses a non-const UDateTimePatternGenerator:
- * It uses a stateful pattern parser which is set up for each generator object,
- * rather than creating one for each function call.
- * Consecutive calls to this function do not affect each other,
- * but this function cannot be used concurrently on a single generator object.
- * 
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param skeleton
- *            The skeleton is a pattern containing only the variable fields.
- *            For example, "MMMdd" and "mmhh" are skeletons.
- * @param length the length of skeleton
- * @param options
- *            Options for forcing the length of specified fields in the
- *            returned pattern to match those in the skeleton (when this
- *            would not happen otherwise). For default behavior, use
- *            UDATPG_MATCH_NO_OPTIONS.
- * @param bestPattern
- *            The best pattern found from the given skeleton.
- * @param capacity
- *            the capacity of bestPattern.
- * @param pErrorCode
- *            a pointer to the UErrorCode which must not indicate a
- *            failure before the function call.
- * @return the length of bestPattern.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
-                                 const UChar *skeleton, int32_t length,
-                                 UDateTimePatternMatchOptions options,
-                                 UChar *bestPattern, int32_t capacity,
-                                 UErrorCode *pErrorCode);
-
-/**
-  * Get a unique skeleton from a given pattern. For example,
-  * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
-  * 
-  * Note that this function uses a non-const UDateTimePatternGenerator:
-  * It uses a stateful pattern parser which is set up for each generator object,
-  * rather than creating one for each function call.
-  * Consecutive calls to this function do not affect each other,
-  * but this function cannot be used concurrently on a single generator object.
-  *
-  * @param dtpg     a pointer to UDateTimePatternGenerator.
-  * @param pattern  input pattern, such as "dd/MMM".
-  * @param length   the length of pattern.
-  * @param skeleton such as "MMMdd"
-  * @param capacity the capacity of skeleton.
-  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
-  *                  failure before the function call.
-  * @return the length of skeleton.
-  * @stable ICU 3.8
-  */
-U_STABLE int32_t U_EXPORT2
-udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
-                   const UChar *pattern, int32_t length,
-                   UChar *skeleton, int32_t capacity,
-                   UErrorCode *pErrorCode);
-
-/**
- * Get a unique base skeleton from a given pattern. This is the same
- * as the skeleton, except that differences in length are minimized so
- * as to only preserve the difference between string and numeric form. So
- * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd"
- * (notice the single d).
- *
- * Note that this function uses a non-const UDateTimePatternGenerator:
- * It uses a stateful pattern parser which is set up for each generator object,
- * rather than creating one for each function call.
- * Consecutive calls to this function do not affect each other,
- * but this function cannot be used concurrently on a single generator object.
- *
- * @param dtpg     a pointer to UDateTimePatternGenerator.
- * @param pattern  input pattern, such as "dd/MMM".
- * @param length   the length of pattern.
- * @param baseSkeleton such as "Md"
- * @param capacity the capacity of base skeleton.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *                  failure before the function call.
- * @return the length of baseSkeleton.
- * @stable ICU 3.8
- */
-U_STABLE int32_t U_EXPORT2
-udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg,
-                       const UChar *pattern, int32_t length,
-                       UChar *baseSkeleton, int32_t capacity,
-                       UErrorCode *pErrorCode);
-
-/**
- * Adds a pattern to the generator. If the pattern has the same skeleton as
- * an existing pattern, and the override parameter is set, then the previous
- * value is overriden. Otherwise, the previous value is retained. In either
- * case, the conflicting status is set and previous vale is stored in 
- * conflicting pattern.
- * <p>
- * Note that single-field patterns (like "MMM") are automatically added, and
- * don't need to be added explicitly!
- *
- * @param dtpg     a pointer to UDateTimePatternGenerator.
- * @param pattern  input pattern, such as "dd/MMM"
- * @param patternLength the length of pattern.
- * @param override  When existing values are to be overridden use true, 
- *                  otherwise use false.
- * @param conflictingPattern  Previous pattern with the same skeleton.
- * @param capacity the capacity of conflictingPattern.
- * @param pLength a pointer to the length of conflictingPattern.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *                  failure before the function call.
- * @return conflicting status. The value could be UDATPG_NO_CONFLICT, 
- *                  UDATPG_BASE_CONFLICT or UDATPG_CONFLICT.
- * @stable ICU 3.8
- */
-U_STABLE UDateTimePatternConflict U_EXPORT2
-udatpg_addPattern(UDateTimePatternGenerator *dtpg,
-                  const UChar *pattern, int32_t patternLength,
-                  UBool override,
-                  UChar *conflictingPattern, int32_t capacity, int32_t *pLength,
-                  UErrorCode *pErrorCode);
-
-/**
-  * An AppendItem format is a pattern used to append a field if there is no
-  * good match. For example, suppose that the input skeleton is "GyyyyMMMd",
-  * and there is no matching pattern internally, but there is a pattern
-  * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the
-  * G. The way these two are conjoined is by using the AppendItemFormat for G
-  * (era). So if that value is, say "{0}, {1}" then the final resulting
-  * pattern is "d-MM-yyyy, G".
-  * <p>
-  * There are actually three available variables: {0} is the pattern so far,
-  * {1} is the element we are adding, and {2} is the name of the element.
-  * <p>
-  * This reflects the way that the CLDR data is organized.
-  *
-  * @param dtpg   a pointer to UDateTimePatternGenerator.
-  * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
-  * @param value  pattern, such as "{0}, {1}"
-  * @param length the length of value.
-  * @stable ICU 3.8
-  */
-U_STABLE void U_EXPORT2
-udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
-                           UDateTimePatternField field,
-                           const UChar *value, int32_t length);
-
-/**
- * Getter corresponding to setAppendItemFormat. Values below 0 or at or
- * above UDATPG_FIELD_COUNT are illegal arguments.
- *
- * @param dtpg   A pointer to UDateTimePatternGenerator.
- * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
- * @param pLength A pointer that will receive the length of appendItemFormat.
- * @return appendItemFormat for field.
- * @stable ICU 3.8
- */
-U_STABLE const UChar * U_EXPORT2
-udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
-                           UDateTimePatternField field,
-                           int32_t *pLength);
-
-/**
-   * Set the name of field, eg "era" in English for ERA. These are only
-   * used if the corresponding AppendItemFormat is used, and if it contains a
-   * {2} variable.
-   * <p>
-   * This reflects the way that the CLDR data is organized.
-   *
-   * @param dtpg   a pointer to UDateTimePatternGenerator.
-   * @param field  UDateTimePatternField
-   * @param value  name for the field.
-   * @param length the length of value.
-   * @stable ICU 3.8
-   */
-U_STABLE void U_EXPORT2
-udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
-                         UDateTimePatternField field,
-                         const UChar *value, int32_t length);
-
-/**
- * Getter corresponding to setAppendItemNames. Values below 0 or at or above
- * UDATPG_FIELD_COUNT are illegal arguments.
- *
- * @param dtpg   a pointer to UDateTimePatternGenerator.
- * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
- * @param pLength A pointer that will receive the length of the name for field.
- * @return name for field
- * @stable ICU 3.8
- */
-U_STABLE const UChar * U_EXPORT2
-udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
-                         UDateTimePatternField field,
-                         int32_t *pLength);
-
-/**
- * The date time format is a message format pattern used to compose date and
- * time patterns. The default value is "{0} {1}", where {0} will be replaced
- * by the date pattern and {1} will be replaced by the time pattern.
- * <p>
- * This is used when the input skeleton contains both date and time fields,
- * but there is not a close match among the added patterns. For example,
- * suppose that this object was created by adding "dd-MMM" and "hh:mm", and
- * its datetimeFormat is the default "{0} {1}". Then if the input skeleton
- * is "MMMdhmm", there is not an exact match, so the input skeleton is
- * broken up into two components "MMMd" and "hmm". There are close matches
- * for those two skeletons, so the result is put together with this pattern,
- * resulting in "d-MMM h:mm".
- *
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param dtFormat
- *            message format pattern, here {0} will be replaced by the date
- *            pattern and {1} will be replaced by the time pattern.
- * @param length the length of dtFormat.
- * @stable ICU 3.8
- */
-U_STABLE void U_EXPORT2
-udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
-                         const UChar *dtFormat, int32_t length);
-
-/**
- * Getter corresponding to setDateTimeFormat.
- * @param dtpg   a pointer to UDateTimePatternGenerator.
- * @param pLength A pointer that will receive the length of the format
- * @return dateTimeFormat.
- * @stable ICU 3.8
- */
-U_STABLE const UChar * U_EXPORT2
-udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
-                         int32_t *pLength);
-
-/**
- * The decimal value is used in formatting fractions of seconds. If the
- * skeleton contains fractional seconds, then this is used with the
- * fractional seconds. For example, suppose that the input pattern is
- * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and
- * the decimal string is ",". Then the resulting pattern is modified to be
- * "H:mm:ss,SSSS"
- *
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param decimal
- * @param length the length of decimal.
- * @stable ICU 3.8
- */
-U_STABLE void U_EXPORT2
-udatpg_setDecimal(UDateTimePatternGenerator *dtpg,
-                  const UChar *decimal, int32_t length);
-
-/**
- * Getter corresponding to setDecimal.
- * 
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param pLength A pointer that will receive the length of the decimal string.
- * @return corresponding to the decimal point.
- * @stable ICU 3.8
- */
-U_STABLE const UChar * U_EXPORT2
-udatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
-                  int32_t *pLength);
-
-/**
- * Adjusts the field types (width and subtype) of a pattern to match what is
- * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
- * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
- * "dd-MMMM hh:mm". This is used internally to get the best match for the
- * input skeleton, but can also be used externally.
- *
- * Note that this function uses a non-const UDateTimePatternGenerator:
- * It uses a stateful pattern parser which is set up for each generator object,
- * rather than creating one for each function call.
- * Consecutive calls to this function do not affect each other,
- * but this function cannot be used concurrently on a single generator object.
- *
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param pattern Input pattern
- * @param patternLength the length of input pattern.
- * @param skeleton
- * @param skeletonLength the length of input skeleton.
- * @param dest  pattern adjusted to match the skeleton fields widths and subtypes.
- * @param destCapacity the capacity of dest.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *                  failure before the function call.
- * @return the length of dest.
- * @stable ICU 3.8
- */
-U_STABLE int32_t U_EXPORT2
-udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
-                         const UChar *pattern, int32_t patternLength,
-                         const UChar *skeleton, int32_t skeletonLength,
-                         UChar *dest, int32_t destCapacity,
-                         UErrorCode *pErrorCode);
-
-/**
- * Adjusts the field types (width and subtype) of a pattern to match what is
- * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
- * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
- * "dd-MMMM hh:mm". This is used internally to get the best match for the
- * input skeleton, but can also be used externally.
- *
- * Note that this function uses a non-const UDateTimePatternGenerator:
- * It uses a stateful pattern parser which is set up for each generator object,
- * rather than creating one for each function call.
- * Consecutive calls to this function do not affect each other,
- * but this function cannot be used concurrently on a single generator object.
- *
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param pattern Input pattern
- * @param patternLength the length of input pattern.
- * @param skeleton
- * @param skeletonLength the length of input skeleton.
- * @param options
- *            Options controlling whether the length of specified fields in the
- *            pattern are adjusted to match those in the skeleton (when this
- *            would not happen otherwise). For default behavior, use
- *            UDATPG_MATCH_NO_OPTIONS.
- * @param dest  pattern adjusted to match the skeleton fields widths and subtypes.
- * @param destCapacity the capacity of dest.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *                  failure before the function call.
- * @return the length of dest.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg,
-                                    const UChar *pattern, int32_t patternLength,
-                                    const UChar *skeleton, int32_t skeletonLength,
-                                    UDateTimePatternMatchOptions options,
-                                    UChar *dest, int32_t destCapacity,
-                                    UErrorCode *pErrorCode);
-
-/**
- * Return a UEnumeration list of all the skeletons in canonical form.
- * Call udatpg_getPatternForSkeleton() to get the corresponding pattern.
- * 
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *                  failure before the function call
- * @return a UEnumeration list of all the skeletons
- *         The caller must close the object.
- * @stable ICU 3.8
- */
-U_STABLE UEnumeration * U_EXPORT2
-udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
-
-/**
- * Return a UEnumeration list of all the base skeletons in canonical form.
- *
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param pErrorCode a pointer to the UErrorCode which must not indicate a
- *             failure before the function call.
- * @return a UEnumeration list of all the base skeletons
- *             The caller must close the object.
- * @stable ICU 3.8
- */
-U_STABLE UEnumeration * U_EXPORT2
-udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
-
-/**
- * Get the pattern corresponding to a given skeleton.
- * 
- * @param dtpg a pointer to UDateTimePatternGenerator.
- * @param skeleton 
- * @param skeletonLength pointer to the length of skeleton.
- * @param pLength pointer to the length of return pattern.
- * @return pattern corresponding to a given skeleton.
- * @stable ICU 3.8
- */
-U_STABLE const UChar * U_EXPORT2
-udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
-                             const UChar *skeleton, int32_t skeletonLength,
-                             int32_t *pLength);
-
-#endif
diff --git a/source/i18n/unicode/uldnames.h b/source/i18n/unicode/uldnames.h
deleted file mode 100644
index 4a119ea..0000000
--- a/source/i18n/unicode/uldnames.h
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 2010, International Business Machines Corporation and       * 
-*   others.  All Rights Reserved.                                             *
-*******************************************************************************
-*/
-
-#ifndef __ULDNAMES_H__
-#define __ULDNAMES_H__
-
-/**
- * \file
- * \brief C++ API: Provides display names of Locale ids and their components.
- */
-
-#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
-#include "unicode/uscript.h"
-
-/**
- * Enum used in LocaleDisplayNames::createInstance.
- * @stable ICU 4.4
- */
-typedef enum {
-    /**
-     * Use standard names when generating a locale name,
-     * e.g. en_GB displays as 'English (United Kingdom)'.
-     * @stable ICU 4.4
-     */
-    ULDN_STANDARD_NAMES = 0,
-    /**
-     * Use dialect names, when generating a locale name,
-     * e.g. en_GB displays as 'British English'.
-     * @stable ICU 4.4
-     */
-    ULDN_DIALECT_NAMES
-} UDialectHandling;
-
-/**
- * Opaque C service object type for the locale display names API
- * @stable ICU 4.4
- */
-struct ULocaleDisplayNames;
-
-/** 
- * C typedef for struct ULocaleDisplayNames. 
- * @stable ICU 4.4 
- */
-typedef struct ULocaleDisplayNames ULocaleDisplayNames;  
-
-#if !UCONFIG_NO_FORMATTING
-
-/**
- * Returns an instance of LocaleDisplayNames that returns names
- * formatted for the provided locale, using the provided
- * dialectHandling.  The usual value for dialectHandling is
- * ULOC_STANDARD_NAMES.
- *
- * @param locale the display locale 
- * @param dialectHandling how to select names for locales 
- * @return a ULocaleDisplayNames instance 
- * @param pErrorCode the status code
- * @stable ICU 4.4
- */
-U_STABLE ULocaleDisplayNames * U_EXPORT2
-uldn_open(const char * locale,
-          UDialectHandling dialectHandling,
-          UErrorCode *pErrorCode);
-
-/**
- * Closes a ULocaleDisplayNames instance obtained from uldn_open().
- * @param ldn the ULocaleDisplayNames instance to be closed
- * @stable ICU 4.4
- */
-U_STABLE void U_EXPORT2
-uldn_close(ULocaleDisplayNames *ldn);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalULocaleDisplayNamesPointer
- * "Smart pointer" class, closes a ULocaleDisplayNames via uldn_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalULocaleDisplayNamesPointer, ULocaleDisplayNames, uldn_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/* getters for state */
-
-/**
- * Returns the locale used to determine the display names. This is
- * not necessarily the same locale passed to {@link #uldn_open}.
- * @param ldn the LocaleDisplayNames instance
- * @return the display locale 
- * @stable ICU 4.4
- */
-U_STABLE const char * U_EXPORT2
-uldn_getLocale(const ULocaleDisplayNames *ldn);
-
-/**
- * Returns the dialect handling used in the display names.
- * @param ldn the LocaleDisplayNames instance
- * @return the dialect handling enum
- * @stable ICU 4.4
- */
-U_STABLE UDialectHandling U_EXPORT2
-uldn_getDialectHandling(const ULocaleDisplayNames *ldn);
-
-/* names for entire locales */
-
-/**
- * Returns the display name of the provided locale.
- * @param ldn the LocaleDisplayNames instance
- * @param locale the locale whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_localeDisplayName(const ULocaleDisplayNames *ldn,
-                       const char *locale,
-                       UChar *result,
-                       int32_t maxResultSize,
-                       UErrorCode *pErrorCode);
-
-/* names for components of a locale */
-
-/**
- * Returns the display name of the provided language code.
- * @param ldn the LocaleDisplayNames instance
- * @param lang the language code whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_languageDisplayName(const ULocaleDisplayNames *ldn,
-                         const char *lang,
-                         UChar *result,
-                         int32_t maxResultSize,
-                         UErrorCode *pErrorCode);
-
-/**
- * Returns the display name of the provided script.
- * @param ldn the LocaleDisplayNames instance
- * @param script the script whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_scriptDisplayName(const ULocaleDisplayNames *ldn,
-                       const char *script,
-                       UChar *result,
-                       int32_t maxResultSize,
-                       UErrorCode *pErrorCode);
-
-/**
- * Returns the display name of the provided script code.
- * @param ldn the LocaleDisplayNames instance
- * @param scriptCode the script code whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn,
-                           UScriptCode scriptCode,
-                           UChar *result,
-                           int32_t maxResultSize,
-                           UErrorCode *pErrorCode);
-
-/**
- * Returns the display name of the provided region code.
- * @param ldn the LocaleDisplayNames instance
- * @param region the region code whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_regionDisplayName(const ULocaleDisplayNames *ldn,
-                       const char *region,
-                       UChar *result,
-                       int32_t maxResultSize,
-                       UErrorCode *pErrorCode);
-
-/**
- * Returns the display name of the provided variant
- * @param ldn the LocaleDisplayNames instance
- * @param variant the variant whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_variantDisplayName(const ULocaleDisplayNames *ldn,
-                        const char *variant,
-                        UChar *result,
-                        int32_t maxResultSize,
-                        UErrorCode *pErrorCode);
-
-/**
- * Returns the display name of the provided locale key
- * @param ldn the LocaleDisplayNames instance
- * @param key the locale key whose display name to return
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_keyDisplayName(const ULocaleDisplayNames *ldn,
-                    const char *key,
-                    UChar *result,
-                    int32_t maxResultSize,
-                    UErrorCode *pErrorCode);
-
-/**
- * Returns the display name of the provided value (used with the provided key).
- * @param ldn the LocaleDisplayNames instance
- * @param key the locale key
- * @param value the locale key's value
- * @param result receives the display name
- * @param maxResultSize the size of the result buffer
- * @param pErrorCode the status code
- * @return the actual buffer size needed for the display name.  If it's
- * greater than maxResultSize, the returned name will be truncated.
- * @stable ICU 4.4
- */
-U_STABLE int32_t U_EXPORT2
-uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn,
-                         const char *key,
-                         const char *value,
-                         UChar *result,
-                         int32_t maxResultSize,
-                         UErrorCode *pErrorCode);
-
-
-#endif  /* !UCONFIG_NO_FORMATTING */
-#endif  /* __ULDNAMES_H__ */
diff --git a/source/i18n/unicode/ulocdata.h b/source/i18n/unicode/ulocdata.h
deleted file mode 100644
index 3431f25..0000000
--- a/source/i18n/unicode/ulocdata.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
-******************************************************************************
-*                                                                            *
-* Copyright (C) 2003-2010, International Business Machines                   *
-*                Corporation and others. All Rights Reserved.                *
-*                                                                            *
-******************************************************************************
-*   file name:  ulocdata.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2003Oct21
-*   created by: Ram Viswanadha
-*/
-
-#ifndef __ULOCDATA_H__
-#define __ULOCDATA_H__
-
-#include "unicode/ures.h"
-#include "unicode/uloc.h"
-#include "unicode/uset.h"
-#include "unicode/localpointer.h"
-
-/**
- * \file
- * \brief C API: Provides access to locale data.
- */
-
-/** Forward declaration of the ULocaleData structure. @stable ICU 3.6 */
-struct ULocaleData;
-
-/** A locale data object. @stable ICU 3.6 */
-typedef struct ULocaleData ULocaleData;
-
-
-
-/** The possible types of exemplar character sets.
-  * @stable ICU 3.4
-  */
-typedef enum ULocaleDataExemplarSetType  {
-     ULOCDATA_ES_STANDARD=0,      /* Basic set */
-     ULOCDATA_ES_AUXILIARY=1,     /* Auxiliary set */
-     ULOCDATA_ES_COUNT=2
-} ULocaleDataExemplarSetType;
-
-/** The possible types of delimiters.
-  * @stable ICU 3.4
-  */
-typedef enum ULocaleDataDelimiterType {
-    ULOCDATA_QUOTATION_START = 0,     /* Quotation start */
-     ULOCDATA_QUOTATION_END = 1,       /* Quotation end */
-     ULOCDATA_ALT_QUOTATION_START = 2, /* Alternate quotation start */
-     ULOCDATA_ALT_QUOTATION_END = 3,   /* Alternate quotation end */
-     ULOCDATA_DELIMITER_COUNT = 4
-} ULocaleDataDelimiterType;
-
-/**
- * Opens a locale data object for the given locale
- *
- * @param localeID  Specifies the locale associated with this locale
- *                  data object.
- * @param status    Pointer to error status code.
- * @stable ICU 3.4
- */
-U_STABLE ULocaleData* U_EXPORT2
-ulocdata_open(const char *localeID, UErrorCode *status);
-
-/**
- * Closes a locale data object.
- *
- * @param uld       The locale data object to close
- * @stable ICU 3.4
- */
-U_STABLE void U_EXPORT2
-ulocdata_close(ULocaleData *uld);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalULocaleDataPointer
- * "Smart pointer" class, closes a ULocaleData via ulocdata_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalULocaleDataPointer, ULocaleData, ulocdata_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Sets the "no Substitute" attribute of the locale data
- * object.  If true, then any methods associated with the
- * locale data object will return null when there is no
- * data available for that method, given the locale ID
- * supplied to ulocdata_open().
- *
- * @param uld       The locale data object to set.
- * @param setting   Value of the "no substitute" attribute.
- * @stable ICU 3.4
- */
-U_STABLE void U_EXPORT2
-ulocdata_setNoSubstitute(ULocaleData *uld, UBool setting);
-
-/**
- * Retrieves the current "no Substitute" value of the locale data
- * object.  If true, then any methods associated with the
- * locale data object will return null when there is no
- * data available for that method, given the locale ID
- * supplied to ulocdata_open().
- *
- * @param uld       Pointer to the The locale data object to set.
- * @return UBool    Value of the "no substitute" attribute.
- * @stable ICU 3.4
- */
-U_STABLE UBool U_EXPORT2
-ulocdata_getNoSubstitute(ULocaleData *uld);
-
-/**
- * Returns the set of exemplar characters for a locale.
- *
- * @param uld       Pointer to the locale data object from which the
- *                  exemplar character set is to be retrieved.
- * @param fillIn    Pointer to a USet object to receive the
- *                  exemplar character set for the given locale.  Previous
- *                  contents of fillIn are lost.  <em>If fillIn is NULL,
- *                  then a new USet is created and returned.  The caller
- *                  owns the result and must dispose of it by calling
- *                  uset_close.</em>
- * @param options   Bitmask for options to apply to the exemplar pattern.
- *                  Specify zero to retrieve the exemplar set as it is
- *                  defined in the locale data.  Specify
- *                  USET_CASE_INSENSITIVE to retrieve a case-folded
- *                  exemplar set.  See uset_applyPattern for a complete
- *                  list of valid options.  The USET_IGNORE_SPACE bit is
- *                  always set, regardless of the value of 'options'.
- * @param extype    Specifies the type of exemplar set to be retrieved.
- * @param status    Pointer to an input-output error code value;
- *                  must not be NULL.
- * @return USet*    Either fillIn, or if fillIn is NULL, a pointer to
- *                  a newly-allocated USet that the user must close.
- * @stable ICU 3.4
- */
-U_STABLE USet* U_EXPORT2
-ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn,
-                        uint32_t options, ULocaleDataExemplarSetType extype, UErrorCode *status);
-
-/**
- * Returns one of the delimiter strings associated with a locale.
- *
- * @param uld           Pointer to the locale data object from which the
- *                      delimiter string is to be retrieved.
- * @param type          the type of delimiter to be retrieved.
- * @param result        A pointer to a buffer to receive the result.
- * @param resultLength  The maximum size of result.
- * @param status        Pointer to an error code value
- * @return int32_t      The total buffer size needed; if greater than resultLength,
- *                      the output was truncated.
- * @stable ICU 3.4
- */
-U_STABLE int32_t U_EXPORT2
-ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type, UChar *result, int32_t resultLength, UErrorCode *status);
-
-/**
- * Enumeration for representing the measurement systems.
- * @stable ICU 2.8
- */
-typedef enum UMeasurementSystem {
-    UMS_SI,     /** Measurement system specified by SI otherwise known as Metric system. */
-    UMS_US,     /** Measurement system followed in the United States of America. */
-    UMS_LIMIT
-} UMeasurementSystem;
-
-/**
- * Returns the measurement system used in the locale specified by the localeID.
- * Please note that this API will change in ICU 3.6 and will use an ulocdata object.
- *
- * @param localeID      The id of the locale for which the measurement system to be retrieved.
- * @param status        Must be a valid pointer to an error code value,
- *                      which must not indicate a failure before the function call.
- * @return UMeasurementSystem the measurement system used in the locale.
- * @stable ICU 2.8
- */
-U_STABLE UMeasurementSystem U_EXPORT2
-ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status);
-
-/**
- * Returns the element gives the normal business letter size, and customary units.
- * The units for the numbers are always in <em>milli-meters</em>.
- * For US since 8.5 and 11 do not yeild an integral value when converted to milli-meters,
- * the values are rounded off.
- * So for A4 size paper the height and width are 297 mm and 210 mm repectively,
- * and for US letter size the height and width are 279 mm and 216 mm respectively.
- * Please note that this API will change in ICU 3.6 and will use an ulocdata object.
- *
- * @param localeID      The id of the locale for which the paper size information to be retrieved.
- * @param height        A pointer to int to recieve the height information.
- * @param width         A pointer to int to recieve the width information.
- * @param status        Must be a valid pointer to an error code value,
- *                      which must not indicate a failure before the function call.
- * @stable ICU 2.8
- */
-U_STABLE void U_EXPORT2
-ulocdata_getPaperSize(const char *localeID, int32_t *height, int32_t *width, UErrorCode *status);
-
-/**
- * Return the current CLDR version used by the library.
- * @param versionArray fillin that will recieve the version number
- * @param status error code - could be U_MISSING_RESOURCE_ERROR if the version was not found.
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-ulocdata_getCLDRVersion(UVersionInfo versionArray, UErrorCode *status);
-
-/**
- * Returns locale display pattern associated with a locale.
- *
- * @param uld       Pointer to the locale data object from which the
- *                  exemplar character set is to be retrieved.
- * @param pattern   locale display pattern for locale.
- * @param patternCapacity the size of the buffer to store the locale display
- *                  pattern with.
- * @param status    Must be a valid pointer to an error code value,
- *                  which must not indicate a failure before the function call.
- * @return the actual buffer size needed for localeDisplayPattern.  If it's greater
- * than patternCapacity, the returned pattern will be truncated.
- *
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-ulocdata_getLocaleDisplayPattern(ULocaleData *uld,
-                                 UChar *pattern,
-                                 int32_t patternCapacity,
-                                 UErrorCode *status);
-
-
-/**
- * Returns locale separator associated with a locale.
- *
- * @param uld       Pointer to the locale data object from which the
- *                  exemplar character set is to be retrieved.
- * @param separator locale separator for locale.
- * @param separatorCapacity the size of the buffer to store the locale
- *                  separator with.
- * @param status    Must be a valid pointer to an error code value,
- *                  which must not indicate a failure before the function call.
- * @return the actual buffer size needed for localeSeparator.  If it's greater
- * than separatorCapacity, the returned separator will be truncated.
- *
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-ulocdata_getLocaleSeparator(ULocaleData *uld,
-                            UChar *separator,
-                            int32_t separatorCapacity,
-                            UErrorCode *status);
-#endif
diff --git a/source/i18n/unicode/umsg.h b/source/i18n/unicode/umsg.h
deleted file mode 100644
index 7d08fd3..0000000
--- a/source/i18n/unicode/umsg.h
+++ /dev/null
@@ -1,709 +0,0 @@
-/********************************************************************
- * COPYRIGHT: 
- * Copyright (c) 1997-2010, International Business Machines Corporation and
- * others. All Rights Reserved.
- * Copyright (C) 2010 , Yahoo! Inc. 
- ********************************************************************
- *
- *   file name:  umsg.h
- *   encoding:   US-ASCII
- *   tab size:   8 (not used)
- *   indentation:4
- *
- *   Change history:
- *
- *   08/5/2001  Ram         Added C wrappers for C++ API.
- *                          
- ********************************************************************/
-
-#ifndef UMSG_H
-#define UMSG_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/localpointer.h"
-#include "unicode/uloc.h"
-#include "unicode/parseerr.h"
-#include <stdarg.h>
-/**
- * \file
- * \brief C API: MessageFormat
- *
- * <h2>Message Format C API </h2>
- *
- * Provides means to produce concatenated messages in language-neutral way.
- * Use this for all concatenations that show up to end users.
- * <P>
- * Takes a set of objects, formats them, then inserts the formatted
- * strings into the pattern at the appropriate places.
- * <P>
- * Here are some examples of usage:
- * Example 1:
- * <pre>
- * \code
- *     UChar *result, *tzID, *str;
- *     UChar pattern[100];
- *     int32_t resultLengthOut, resultlength;
- *     UCalendar *cal;
- *     UDate d1;
- *     UDateFormat *def1;
- *     UErrorCode status = U_ZERO_ERROR;
- *
- *     str=(UChar*)malloc(sizeof(UChar) * (strlen("disturbance in force") +1));
- *     u_uastrcpy(str, "disturbance in force");
- *     tzID=(UChar*)malloc(sizeof(UChar) * 4);
- *     u_uastrcpy(tzID, "PST");
- *     cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
- *     ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status);
- *     d1=ucal_getMillis(cal, &status);
- *     u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}");
- *     resultlength=0;
- *     resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, d1, str, 7);
- *     if(status==U_BUFFER_OVERFLOW_ERROR){
- *         status=U_ZERO_ERROR;
- *         resultlength=resultLengthOut+1;
- *         result=(UChar*)realloc(result, sizeof(UChar) * resultlength);
- *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, d1, str, 7);
- *     }
- *     printf("%s\n", austrdup(result) );//austrdup( a function used to convert UChar* to char*)
- *     //output>: "On March 18, 1999, there was a disturbance in force on planet 7
- * \endcode
- * </pre>
- * Typically, the message format will come from resources, and the
- * arguments will be dynamically set at runtime.
- * <P>
- * Example 2:
- * <pre>
- * \code
- *     UChar* str;
- *     UErrorCode status = U_ZERO_ERROR;
- *     UChar *result;
- *     UChar pattern[100];
- *     int32_t resultlength, resultLengthOut, i;
- *     double testArgs= { 100.0, 1.0, 0.0};
- *
- *     str=(UChar*)malloc(sizeof(UChar) * 10);
- *     u_uastrcpy(str, "MyDisk");
- *     u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}");
- *     for(i=0; i<3; i++){
- *       resultlength=0; 
- *       resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str); 
- *       if(status==U_BUFFER_OVERFLOW_ERROR){
- *         status=U_ZERO_ERROR;
- *         resultlength=resultLengthOut+1;
- *         result=(UChar*)malloc(sizeof(UChar) * resultlength);
- *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, testArgs[i], str);
- *       }
- *       printf("%s\n", austrdup(result) );  //austrdup( a function used to convert UChar* to char*)
- *       free(result);
- *     }
- *     // output, with different testArgs:
- *     // output: The disk "MyDisk" contains 100 files.
- *     // output: The disk "MyDisk" contains one file.
- *     // output: The disk "MyDisk" contains no files.
- * \endcode
- *  </pre>
- *
- *
- * Example 3:
- * <pre>
- * \code
- * UChar* str;
- * UChar* str1;
- * UErrorCode status = U_ZERO_ERROR;
- * UChar *result;
- * UChar pattern[100];
- * UChar expected[100];
- * int32_t resultlength,resultLengthOut;
-
- * str=(UChar*)malloc(sizeof(UChar) * 25);
- * u_uastrcpy(str, "Kirti");
- * str1=(UChar*)malloc(sizeof(UChar) * 25);
- * u_uastrcpy(str1, "female");
- * log_verbose("Testing message format with Select test #1\n:");
- * u_uastrcpy(pattern, "{0} est {1, select, female {all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris.");
- * u_uastrcpy(expected, "Kirti est all\\u00E9e \\u00E0 Paris.");
- * resultlength=0;
- * resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1);
- * if(status==U_BUFFER_OVERFLOW_ERROR)
- *  {
- *      status=U_ZERO_ERROR;
- *      resultlength=resultLengthOut+1;
- *      result=(UChar*)malloc(sizeof(UChar) * resultlength);
- *      u_formatMessage( "fr", pattern, u_strlen(pattern), result, resultlength, &status, str , str1);
- *      if(u_strcmp(result, expected)==0)
- *          log_verbose("PASS: MessagFormat successful on Select test#1\n");
- *      else{
- *          log_err("FAIL: Error in MessageFormat on Select test#1\n GOT %s EXPECTED %s\n", austrdup(result),
- *          austrdup(expected) );
- *      }
- *      free(result);
- * }
- * \endcode
- *  </pre>
- *
-
- *  The pattern is of the following form.  Legend:
- *  <pre>
- * \code
- *       {optional item}
- *       (group that may be repeated)*
- * \endcode
- *  </pre>
- *  Do not confuse optional items with items inside quotes braces, such
- *  as this: "{".  Quoted braces are literals.
- *  <pre>
- * \code
- *       messageFormatPattern := string ( "{" messageFormatElement "}" string )*
- *
- *       messageFormatElement := argument { "," elementFormat }
- *
- *       elementFormat := "time" { "," datetimeStyle }
- *                      | "date" { "," datetimeStyle }
- *                      | "number" { "," numberStyle }
- *                      | "choice" "," choiceStyle
- *                      | "select" "," selectStyle
- *
- *       datetimeStyle := "short"
- *                      | "medium"
- *                      | "long"
- *                      | "full"
- *                      | dateFormatPattern
- *
- *       numberStyle :=   "currency"
- *                      | "percent"
- *                      | "integer"
- *                      | numberFormatPattern
- *
- *       choiceStyle :=   choiceFormatPattern
- *
- *       selectStyle :=   selectFormatPattern
- * \endcode
- * </pre>
- * If there is no elementFormat, then the argument must be a string,
- * which is substituted. If there is no dateTimeStyle or numberStyle,
- * then the default format is used (e.g.  NumberFormat.getInstance(),
- * DateFormat.getDefaultTime() or DateFormat.getDefaultDate(). For
- * a ChoiceFormat, the pattern must always be specified, since there
- * is no default.
- * <P>
- * In strings, single quotes can be used to quote the "{" sign if
- * necessary. A real single quote is represented by ''.  Inside a
- * messageFormatElement, quotes are [not] removed. For example,
- * {1,number,$'#',##} will produce a number format with the pound-sign
- * quoted, with a result such as: "$#31,45".
- * <P>
- * If a pattern is used, then unquoted braces in the pattern, if any,
- * must match: that is, "ab {0} de" and "ab '}' de" are ok, but "ab
- * {0'}' de" and "ab } de" are not.
- * <p>
- * <dl><dt><b>Warning:</b><dd>The rules for using quotes within message
- * format patterns unfortunately have shown to be somewhat confusing.
- * In particular, it isn't always obvious to localizers whether single
- * quotes need to be doubled or not. Make sure to inform localizers about
- * the rules, and tell them (for example, by using comments in resource
- * bundle source files) which strings will be processed by MessageFormat.
- * Note that localizers may need to use single quotes in translated
- * strings where the original version doesn't have them.
- * <br>Note also that the simplest way to avoid the problem is to
- * use the real apostrophe (single quote) character U+2019 (') for
- * human-readable text, and to use the ASCII apostrophe (U+0027 ' )
- * only in program syntax, like quoting in MessageFormat.
- * See the annotations for U+0027 Apostrophe in The Unicode Standard.</p>
- * </dl>
- * <P>
- * The argument is a number from 0 to 9, which corresponds to the
- * arguments presented in an array to be formatted.
- * <P>
- * It is ok to have unused arguments in the array.  With missing
- * arguments or arguments that are not of the right class for the
- * specified format, a failing UErrorCode result is set.
- * <P>
-
- * <P>
- * [Note:] As we see above, the string produced by a choice Format in
- * MessageFormat is treated specially; occurances of '{' are used to
- * indicated subformats.
- * <P>
- * [Note:] Formats are numbered by order of variable in the string.
- * This is [not] the same as the argument numbering!
- * <pre>
- * \code
- *    For example: with "abc{2}def{3}ghi{0}...",
- *
- *    format0 affects the first variable {2}
- *    format1 affects the second variable {3}
- *    format2 affects the second variable {0}
- * \endcode
- * </pre>
- * and so on.
- */
-
-/**
- * Format a message for a locale.
- * This function may perform re-ordering of the arguments depending on the
- * locale. For all numeric arguments, double is assumed unless the type is
- * explicitly integer.  All choice format arguments must be of type double.
- * @param locale The locale for which the message will be formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param result A pointer to a buffer to receive the formatted message.
- * @param resultLength The maximum size of result.
- * @param status A pointer to an UErrorCode to receive any errors
- * @param ... A variable-length argument list containing the arguments specified
- * in pattern.
- * @return The total buffer size needed; if greater than resultLength, the
- * output was truncated.
- * @see u_parseMessage
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-u_formatMessage(const char  *locale,
-                 const UChar *pattern,
-                int32_t     patternLength,
-                UChar       *result,
-                int32_t     resultLength,
-                UErrorCode  *status,
-                ...);
-
-/**
- * Format a message for a locale.
- * This function may perform re-ordering of the arguments depending on the
- * locale. For all numeric arguments, double is assumed unless the type is
- * explicitly integer.  All choice format arguments must be of type double.
- * @param locale The locale for which the message will be formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param result A pointer to a buffer to receive the formatted message.
- * @param resultLength The maximum size of result.
- * @param ap A variable-length argument list containing the arguments specified
- * @param status A pointer to an UErrorCode to receive any errors
- * in pattern.
- * @return The total buffer size needed; if greater than resultLength, the
- * output was truncated.
- * @see u_parseMessage
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-u_vformatMessage(   const char  *locale,
-                    const UChar *pattern,
-                    int32_t     patternLength,
-                    UChar       *result,
-                    int32_t     resultLength,
-                    va_list     ap,
-                    UErrorCode  *status);
-
-/**
- * Parse a message.
- * For numeric arguments, this function will always use doubles.  Integer types
- * should not be passed.
- * This function is not able to parse all output from {@link #u_formatMessage }.
- * @param locale The locale for which the message is formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param source The text to parse.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param status A pointer to an UErrorCode to receive any errors
- * @param ... A variable-length argument list containing the arguments
- * specified in pattern.
- * @see u_formatMessage
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-u_parseMessage( const char   *locale,
-                const UChar  *pattern,
-                int32_t      patternLength,
-                const UChar  *source,
-                int32_t      sourceLength,
-                UErrorCode   *status,
-                ...);
-
-/**
- * Parse a message.
- * For numeric arguments, this function will always use doubles.  Integer types
- * should not be passed.
- * This function is not able to parse all output from {@link #u_formatMessage }.
- * @param locale The locale for which the message is formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param source The text to parse.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param ap A variable-length argument list containing the arguments
- * @param status A pointer to an UErrorCode to receive any errors
- * specified in pattern.
- * @see u_formatMessage
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-u_vparseMessage(const char  *locale,
-                const UChar *pattern,
-                int32_t     patternLength,
-                const UChar *source,
-                int32_t     sourceLength,
-                va_list     ap,
-                UErrorCode  *status);
-
-/**
- * Format a message for a locale.
- * This function may perform re-ordering of the arguments depending on the
- * locale. For all numeric arguments, double is assumed unless the type is
- * explicitly integer.  All choice format arguments must be of type double.
- * @param locale The locale for which the message will be formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param result A pointer to a buffer to receive the formatted message.
- * @param resultLength The maximum size of result.
- * @param status A pointer to an UErrorCode to receive any errors
- * @param ... A variable-length argument list containing the arguments specified
- * in pattern.
- * @param parseError  A pointer to UParseError to receive information about errors
- *                     occurred during parsing.
- * @return The total buffer size needed; if greater than resultLength, the
- * output was truncated.
- * @see u_parseMessage
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-u_formatMessageWithError(   const char    *locale,
-                            const UChar   *pattern,
-                            int32_t       patternLength,
-                            UChar         *result,
-                            int32_t       resultLength,
-                            UParseError   *parseError,
-                            UErrorCode    *status,
-                            ...);
-
-/**
- * Format a message for a locale.
- * This function may perform re-ordering of the arguments depending on the
- * locale. For all numeric arguments, double is assumed unless the type is
- * explicitly integer.  All choice format arguments must be of type double.
- * @param locale The locale for which the message will be formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param result A pointer to a buffer to receive the formatted message.
- * @param resultLength The maximum size of result.
- * @param parseError  A pointer to UParseError to receive information about errors
- *                    occurred during parsing.
- * @param ap A variable-length argument list containing the arguments specified
- * @param status A pointer to an UErrorCode to receive any errors
- * in pattern.
- * @return The total buffer size needed; if greater than resultLength, the
- * output was truncated.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-u_vformatMessageWithError(  const char   *locale,
-                            const UChar  *pattern,
-                            int32_t      patternLength,
-                            UChar        *result,
-                            int32_t      resultLength,
-                            UParseError* parseError,
-                            va_list      ap,
-                            UErrorCode   *status);
-
-/**
- * Parse a message.
- * For numeric arguments, this function will always use doubles.  Integer types
- * should not be passed.
- * This function is not able to parse all output from {@link #u_formatMessage }.
- * @param locale The locale for which the message is formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param source The text to parse.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param parseError  A pointer to UParseError to receive information about errors
- *                     occurred during parsing.
- * @param status A pointer to an UErrorCode to receive any errors
- * @param ... A variable-length argument list containing the arguments
- * specified in pattern.
- * @see u_formatMessage
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-u_parseMessageWithError(const char  *locale,
-                        const UChar *pattern,
-                        int32_t     patternLength,
-                        const UChar *source,
-                        int32_t     sourceLength,
-                        UParseError *parseError,
-                        UErrorCode  *status,
-                        ...);
-
-/**
- * Parse a message.
- * For numeric arguments, this function will always use doubles.  Integer types
- * should not be passed.
- * This function is not able to parse all output from {@link #u_formatMessage }.
- * @param locale The locale for which the message is formatted
- * @param pattern The pattern specifying the message's format
- * @param patternLength The length of pattern
- * @param source The text to parse.
- * @param sourceLength The length of source, or -1 if null-terminated.
- * @param ap A variable-length argument list containing the arguments
- * @param parseError  A pointer to UParseError to receive information about errors
- *                     occurred during parsing.
- * @param status A pointer to an UErrorCode to receive any errors
- * specified in pattern.
- * @see u_formatMessage
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-u_vparseMessageWithError(const char  *locale,
-                         const UChar *pattern,
-                         int32_t     patternLength,
-                         const UChar *source,
-                         int32_t     sourceLength,
-                         va_list     ap,
-                         UParseError *parseError,
-                         UErrorCode* status);
-
-/*----------------------- New experimental API --------------------------- */
-/** 
- * The message format object
- * @stable ICU 2.0
- */
-typedef void* UMessageFormat;
-
-
-/**
- * Open a message formatter with given pattern and for the given locale.
- * @param pattern       A pattern specifying the format to use.
- * @param patternLength Length of the pattern to use
- * @param locale        The locale for which the messages are formatted.
- * @param parseError    A pointer to UParseError struct to receive any errors 
- *                      occured during parsing. Can be NULL.
- * @param status        A pointer to an UErrorCode to receive any errors.
- * @return              A pointer to a UMessageFormat to use for formatting 
- *                      messages, or 0 if an error occurred. 
- * @stable ICU 2.0
- */
-U_STABLE UMessageFormat* U_EXPORT2 
-umsg_open(  const UChar     *pattern,
-            int32_t         patternLength,
-            const  char     *locale,
-            UParseError     *parseError,
-            UErrorCode      *status);
-
-/**
- * Close a UMessageFormat.
- * Once closed, a UMessageFormat may no longer be used.
- * @param format The formatter to close.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-umsg_close(UMessageFormat* format);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUMessageFormatPointer
- * "Smart pointer" class, closes a UMessageFormat via umsg_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUMessageFormatPointer, UMessageFormat, umsg_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Open a copy of a UMessageFormat.
- * This function performs a deep copy.
- * @param fmt The formatter to copy
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return A pointer to a UDateFormat identical to fmt.
- * @stable ICU 2.0
- */
-U_STABLE UMessageFormat U_EXPORT2 
-umsg_clone(const UMessageFormat *fmt,
-           UErrorCode *status);
-
-/**
- * Sets the locale. This locale is used for fetching default number or date
- * format information.
- * @param fmt The formatter to set
- * @param locale The locale the formatter should use.
- * @stable ICU 2.0
- */
-U_STABLE void  U_EXPORT2 
-umsg_setLocale(UMessageFormat *fmt,
-               const char* locale);
-
-/**
- * Gets the locale. This locale is used for fetching default number or date
- * format information.
- * @param fmt The formatter to querry
- * @return the locale.
- * @stable ICU 2.0
- */
-U_STABLE const char*  U_EXPORT2 
-umsg_getLocale(const UMessageFormat *fmt);
-
-/**
- * Sets the pattern.
- * @param fmt           The formatter to use
- * @param pattern       The pattern to be applied.
- * @param patternLength Length of the pattern to use
- * @param parseError    Struct to receive information on position 
- *                      of error if an error is encountered.Can be NULL.
- * @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
- */
-U_STABLE void  U_EXPORT2 
-umsg_applyPattern( UMessageFormat *fmt,
-                   const UChar* pattern,
-                   int32_t patternLength,
-                   UParseError* parseError,
-                   UErrorCode* status);
-
-/**
- * Gets the pattern.
- * @param fmt          The formatter to use
- * @param result       A pointer to a buffer to receive the pattern.
- * @param resultLength The maximum size of result.
- * @param status       Output param set to success/failure code on
- *                     exit. If the pattern is invalid, this will be
- *                     set to a failure result.  
- * @return the pattern of the format
- * @stable ICU 2.0
- */
-U_STABLE int32_t  U_EXPORT2 
-umsg_toPattern(const UMessageFormat *fmt,
-               UChar* result, 
-               int32_t resultLength,
-               UErrorCode* status);
-
-/**
- * Format a message for a locale.
- * This function may perform re-ordering of the arguments depending on the
- * locale. For all numeric arguments, double is assumed unless the type is
- * explicitly integer.  All choice format arguments must be of type double.
- * @param fmt           The formatter to use
- * @param result        A pointer to a buffer to receive the formatted message.
- * @param resultLength  The maximum size of result.
- * @param status        A pointer to an UErrorCode to receive any errors
- * @param ...           A variable-length argument list containing the arguments 
- *                      specified in pattern.
- * @return              The total buffer size needed; if greater than resultLength, 
- *                      the output was truncated.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-umsg_format(    const UMessageFormat *fmt,
-                UChar          *result,
-                int32_t        resultLength,
-                UErrorCode     *status,
-                ...);
-
-/**
- * Format a message for a locale.
- * This function may perform re-ordering of the arguments depending on the
- * locale. For all numeric arguments, double is assumed unless the type is
- * explicitly integer.  All choice format arguments must be of type double.
- * @param fmt          The formatter to use 
- * @param result       A pointer to a buffer to receive the formatted message.
- * @param resultLength The maximum size of result.
- * @param ap           A variable-length argument list containing the arguments 
- * @param status       A pointer to an UErrorCode to receive any errors
- *                     specified in pattern.
- * @return             The total buffer size needed; if greater than resultLength, 
- *                     the output was truncated.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-umsg_vformat(   const UMessageFormat *fmt,
-                UChar          *result,
-                int32_t        resultLength,
-                va_list        ap,
-                UErrorCode     *status);
-
-/**
- * Parse a message.
- * For numeric arguments, this function will always use doubles.  Integer types
- * should not be passed.
- * This function is not able to parse all output from {@link #umsg_format }.
- * @param fmt           The formatter to use 
- * @param source        The text to parse.
- * @param sourceLength  The length of source, or -1 if null-terminated.
- * @param count         Output param to receive number of elements returned.
- * @param status        A pointer to an UErrorCode to receive any errors
- * @param ...           A variable-length argument list containing the arguments
- *                      specified in pattern.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-umsg_parse( const UMessageFormat *fmt,
-            const UChar    *source,
-            int32_t        sourceLength,
-            int32_t        *count,
-            UErrorCode     *status,
-            ...);
-
-/**
- * Parse a message.
- * For numeric arguments, this function will always use doubles.  Integer types
- * should not be passed.
- * This function is not able to parse all output from {@link #umsg_format }.
- * @param fmt           The formatter to use 
- * @param source        The text to parse.
- * @param sourceLength  The length of source, or -1 if null-terminated.
- * @param count         Output param to receive number of elements returned.
- * @param ap            A variable-length argument list containing the arguments
- * @param status        A pointer to an UErrorCode to receive any errors
- *                      specified in pattern.
- * @see u_formatMessage
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-umsg_vparse(const UMessageFormat *fmt,
-            const UChar    *source,
-            int32_t        sourceLength,
-            int32_t        *count,
-            va_list        ap,
-            UErrorCode     *status);
-
-
-/**
- * Convert an 'apostrophe-friendly' pattern into a standard
- * pattern.  Standard patterns treat all apostrophes as
- * quotes, which is problematic in some languages, e.g. 
- * French, where apostrophe is commonly used.  This utility
- * assumes that only an unpaired apostrophe immediately before
- * a brace is a true quote.  Other unpaired apostrophes are paired,
- * and the resulting standard pattern string is returned.
- *
- * <p><b>Note</b> it is not guaranteed that the returned pattern
- * is indeed a valid pattern.  The only effect is to convert
- * between patterns having different quoting semantics.
- *
- * @param pattern the 'apostrophe-friendly' patttern to convert
- * @param patternLength the length of pattern, or -1 if unknown and pattern is null-terminated
- * @param dest the buffer for the result, or NULL if preflight only
- * @param destCapacity the length of the buffer, or 0 if preflighting
- * @param ec the error code
- * @return the length of the resulting text, not including trailing null
- *        if buffer has room for the trailing null, it is provided, otherwise
- *        not
- * @stable ICU 3.4
- */
-U_STABLE int32_t U_EXPORT2 
-umsg_autoQuoteApostrophe(const UChar* pattern, 
-                         int32_t patternLength,
-                         UChar* dest,
-                         int32_t destCapacity,
-                         UErrorCode* ec);
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif
diff --git a/source/i18n/unicode/unirepl.h b/source/i18n/unicode/unirepl.h
deleted file mode 100644
index 6b7746b..0000000
--- a/source/i18n/unicode/unirepl.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (c) 2002-2005, International Business Machines Corporation
-*   and others.  All Rights Reserved.
-**********************************************************************
-*   Date        Name        Description
-*   01/14/2002  aliu        Creation.
-**********************************************************************
-*/
-#ifndef UNIREPL_H
-#define UNIREPL_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file 
- * \brief C++ API: UnicodeReplacer
- */
-
-U_NAMESPACE_BEGIN
-
-class Replaceable;
-class UnicodeString;
-class UnicodeSet;
-
-/**
- * <code>UnicodeReplacer</code> defines a protocol for objects that
- * replace a range of characters in a Replaceable string with output
- * text.  The replacement is done via the Replaceable API so as to
- * preserve out-of-band data.
- *
- * <p>This is a mixin class.
- * @author Alan Liu
- * @stable ICU 2.4
- */
-class U_I18N_API UnicodeReplacer /* not : public UObject because this is an interface/mixin class */ {
-
- public:
-
-    /**
-     * Destructor.
-     * @stable ICU 2.4
-     */
-    virtual ~UnicodeReplacer();
-
-    /**
-     * Replace characters in 'text' from 'start' to 'limit' with the
-     * output text of this object.  Update the 'cursor' parameter to
-     * give the cursor position and return the length of the
-     * replacement text.
-     *
-     * @param text the text to be matched
-     * @param start inclusive start index of text to be replaced
-     * @param limit exclusive end index of text to be replaced;
-     * must be greater than or equal to start
-     * @param cursor output parameter for the cursor position.
-     * Not all replacer objects will update this, but in a complete
-     * tree of replacer objects, representing the entire output side
-     * of a transliteration rule, at least one must update it.
-     * @return the number of 16-bit code units in the text replacing
-     * the characters at offsets start..(limit-1) in text
-     * @stable ICU 2.4
-     */
-    virtual int32_t replace(Replaceable& text,
-                            int32_t start,
-                            int32_t limit,
-                            int32_t& cursor) = 0;
-
-    /**
-     * Returns a string representation of this replacer.  If the
-     * result of calling this function is passed to the appropriate
-     * parser, typically TransliteratorParser, it will produce another
-     * replacer that is equal to this one.
-     * @param result the string to receive the pattern.  Previous
-     * contents will be deleted.
-     * @param escapeUnprintable if TRUE then convert unprintable
-     * character to their hex escape representations, \\uxxxx or
-     * \\Uxxxxxxxx.  Unprintable characters are defined by
-     * Utility.isUnprintable().
-     * @return a reference to 'result'.
-     * @stable ICU 2.4
-     */
-    virtual UnicodeString& toReplacerPattern(UnicodeString& result,
-                                             UBool escapeUnprintable) const = 0;
-
-    /**
-     * Union the set of all characters that may output by this object
-     * into the given set.
-     * @param toUnionTo the set into which to union the output characters
-     * @stable ICU 2.4
-     */
-    virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const = 0;
-};
-
-U_NAMESPACE_END
-
-#endif
diff --git a/source/i18n/unicode/unum.h b/source/i18n/unicode/unum.h
deleted file mode 100644
index 1102bab..0000000
--- a/source/i18n/unicode/unum.h
+++ /dev/null
@@ -1,999 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 1997-2010, International Business Machines Corporation and others.
-* All Rights Reserved.
-* Modification History:
-*
-*   Date        Name        Description
-*   06/24/99    helena      Integrated Alan's NF enhancements and Java2 bug fixes
-*******************************************************************************
-*/
-
-#ifndef _UNUM
-#define _UNUM
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/localpointer.h"
-#include "unicode/uloc.h"
-#include "unicode/umisc.h"
-#include "unicode/parseerr.h"
-/**
- * \file
- * \brief C API: NumberFormat
- *
- * <h2> Number Format C API </h2>
- *
- * Number Format C API  Provides functions for
- * formatting and parsing a number.  Also provides methods for
- * determining which locales have number formats, and what their names
- * are.
- * <P>
- * UNumberFormat helps you to format and parse numbers for any locale.
- * Your code can be completely independent of the locale conventions
- * for decimal points, thousands-separators, or even the particular
- * decimal digits used, or whether the number format is even decimal.
- * There are different number format styles like decimal, currency,
- * percent and spellout.
- * <P>
- * To format a number for the current Locale, use one of the static
- * factory methods:
- * <pre>
- * \code
- *    UChar myString[20];
- *    double myNumber = 7.0;
- *    UErrorCode status = U_ZERO_ERROR;
- *    UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
- *    unum_formatDouble(nf, myNumber, myString, 20, NULL, &status);
- *    printf(" Example 1: %s\n", austrdup(myString) ); //austrdup( a function used to convert UChar* to char*)
- * \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
- * uint32_t i, resultlength, reslenneeded;
- * UErrorCode status = U_ZERO_ERROR;
- * UFieldPosition pos;
- * uint32_t a[] = { 123, 3333, -1234567 };
- * const uint32_t a_len = sizeof(a) / sizeof(a[0]);
- * UNumberFormat* nf;
- * UChar* result = NULL;
- *
- * nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
- * for (i = 0; i < a_len; i++) {
- *    resultlength=0;
- *    reslenneeded=unum_format(nf, a[i], NULL, resultlength, &pos, &status);
- *    result = NULL;
- *    if(status==U_BUFFER_OVERFLOW_ERROR){
- *       status=U_ZERO_ERROR;
- *       resultlength=reslenneeded+1;
- *       result=(UChar*)malloc(sizeof(UChar) * resultlength);
- *       unum_format(nf, a[i], result, resultlength, &pos, &status);
- *    }
- *    printf( " Example 2: %s\n", austrdup(result));
- *    free(result);
- * }
- * \endcode
- * </pre>
- * To format a number for a different Locale, specify it in the
- * call to unum_open().
- * <pre>
- * \code
- *     UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, "fr_FR", NULL, &success)
- * \endcode
- * </pre>
- * You can use a NumberFormat API unum_parse() to parse.
- * <pre>
- * \code
- *    UErrorCode status = U_ZERO_ERROR;
- *    int32_t pos=0;
- *    int32_t num;
- *    num = unum_parse(nf, str, u_strlen(str), &pos, &status);
- * \endcode
- * </pre>
- * Use UNUM_DECIMAL to get the normal number format for that country.
- * There are other static options available.  Use UNUM_CURRENCY
- * to get the currency number format for that country.  Use UNUM_PERCENT
- * to get a format for displaying percentages. With this format, a
- * fraction from 0.53 is displayed as 53%.
- * <P>
- * Use a pattern to create either a DecimalFormat or a RuleBasedNumberFormat
- * formatter.  The pattern must conform to the syntax defined for those
- * formatters.
- * <P>
- * You can also control the display of numbers with such function as
- * unum_getAttribues() and unum_setAtributes(), which let you set the
- * miminum fraction digits, grouping, etc.
- * @see UNumberFormatAttributes for more details
- * <P>
- * You can also use forms of the parse and format methods with
- * ParsePosition and UFieldPosition to allow you to:
- * <ul type=round>
- *   <li>(a) progressively parse through pieces of a string.
- *   <li>(b) align the decimal point and other areas.
- * </ul>
- * <p>
- * It is also possible to change or set the symbols used for a particular
- * locale like the currency symbol, the grouping seperator , monetary seperator
- * etc by making use of functions unum_setSymbols() and unum_getSymbols().
- */
-
-/** A number formatter.
- *  For usage in C programs.
- *  @stable ICU 2.0
- */
-typedef void* UNumberFormat;
-
-/** The possible number format styles. 
- *  @stable ICU 2.0
- */
-typedef enum UNumberFormatStyle {
-    /**
-     * Decimal format defined by pattern 
-     * @stable ICU 3.0
-     */
-    UNUM_PATTERN_DECIMAL=0,
-    /** Decimal format */
-    UNUM_DECIMAL=1,
-    /** Currency format */
-    UNUM_CURRENCY,
-    /** Percent format */
-    UNUM_PERCENT,
-    /** Scientific format */
-    UNUM_SCIENTIFIC,
-    /** Spellout rule-based format */
-    UNUM_SPELLOUT,
-    /** 
-     * Ordinal rule-based format 
-     * @stable ICU 3.0
-     */
-    UNUM_ORDINAL,
-    /** 
-     * Duration rule-based format 
-     * @stable ICU 3.0
-     */
-    UNUM_DURATION,
-    /** 
-     * Numbering system rule-based format 
-     * @stable ICU 4.2
-     */
-    UNUM_NUMBERING_SYSTEM,
-    /** 
-     * Rule-based format defined by pattern 
-     * @stable ICU 3.0
-     */
-    UNUM_PATTERN_RULEBASED,
-    /** Default format */
-    UNUM_DEFAULT = UNUM_DECIMAL,
-    /** (Alias for UNUM_PATTERN_DECIMAL) */
-    UNUM_IGNORE = UNUM_PATTERN_DECIMAL
-} UNumberFormatStyle;
-
-/** The possible number format rounding modes. 
- *  @stable ICU 2.0
- */
-typedef enum UNumberFormatRoundingMode {
-    UNUM_ROUND_CEILING,
-    UNUM_ROUND_FLOOR,
-    UNUM_ROUND_DOWN,
-    UNUM_ROUND_UP,
-    /**
-     * Half-even rounding, misspelled name
-     * @deprecated, ICU 3.8
-     */
-    UNUM_FOUND_HALFEVEN,
-    UNUM_ROUND_HALFDOWN,
-    UNUM_ROUND_HALFUP,
-    /**
-     * Half-even rounding
-     * @stable, ICU 3.8
-     */
-    UNUM_ROUND_HALFEVEN = UNUM_FOUND_HALFEVEN
-} UNumberFormatRoundingMode;
-
-/** The possible number format pad positions. 
- *  @stable ICU 2.0
- */
-typedef enum UNumberFormatPadPosition {
-    UNUM_PAD_BEFORE_PREFIX,
-    UNUM_PAD_AFTER_PREFIX,
-    UNUM_PAD_BEFORE_SUFFIX,
-    UNUM_PAD_AFTER_SUFFIX
-} UNumberFormatPadPosition;
-
-/**
- * Create and return a new UNumberFormat for formatting and parsing
- * numbers.  A UNumberFormat may be used to format numbers by calling
- * {@link #unum_format }, and to parse numbers by calling {@link #unum_parse }.
- * The caller must call {@link #unum_close } when done to release resources
- * used by this object.
- * @param style The type of number format to open: one of
- * UNUM_DECIMAL, UNUM_CURRENCY, UNUM_PERCENT, UNUM_SCIENTIFIC, UNUM_SPELLOUT,
- * UNUM_PATTERN_DECIMAL, UNUM_PATTERN_RULEBASED, or UNUM_DEFAULT.
- * If UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED is passed then the
- * number format is opened using the given pattern, which must conform
- * to the syntax described in DecimalFormat or RuleBasedNumberFormat,
- * respectively.
- * @param pattern A pattern specifying the format to use. 
- * This parameter is ignored unless the style is
- * UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED.
- * @param patternLength The number of characters in the pattern, or -1
- * if null-terminated. This parameter is ignored unless the style is
- * UNUM_PATTERN.
- * @param locale A locale identifier to use to determine formatting
- * and parsing conventions, or NULL to use the default locale.
- * @param parseErr A pointer to a UParseError struct to receive the
- * details of any parsing errors, or NULL if no parsing error details
- * are desired.
- * @param status A pointer to an input-output UErrorCode.
- * @return A pointer to a newly created UNumberFormat, or NULL if an
- * error occurred.
- * @see unum_close
- * @see DecimalFormat
- * @stable ICU 2.0
- */
-U_STABLE UNumberFormat* U_EXPORT2 
-unum_open(  UNumberFormatStyle    style,
-            const    UChar*    pattern,
-            int32_t            patternLength,
-            const    char*     locale,
-            UParseError*       parseErr,
-            UErrorCode*        status);
-
-
-/**
-* Close a UNumberFormat.
-* Once closed, a UNumberFormat may no longer be used.
-* @param fmt The formatter to close.
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-unum_close(UNumberFormat* fmt);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUNumberFormatPointer
- * "Smart pointer" class, closes a UNumberFormat via unum_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberFormatPointer, UNumberFormat, unum_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Open a copy of a UNumberFormat.
- * This function performs a deep copy.
- * @param fmt The format to copy
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return A pointer to a UNumberFormat identical to fmt.
- * @stable ICU 2.0
- */
-U_STABLE UNumberFormat* U_EXPORT2 
-unum_clone(const UNumberFormat *fmt,
-       UErrorCode *status);
-
-/**
-* Format an integer using a UNumberFormat.
-* The integer will be formatted according to the UNumberFormat's locale.
-* @param fmt The formatter to use.
-* @param number The number to format.
-* @param result A pointer to a buffer to receive the formatted number.
-* @param resultLength The maximum size of result.
-* @param pos    A pointer to a UFieldPosition.  On input, position->field
-* is read.  On output, position->beginIndex and position->endIndex indicate
-* the beginning and ending indices of field number position->field, if such
-* a field exists.  This parameter may be NULL, in which case no field
-* @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.
-* @see unum_formatInt64
-* @see unum_formatDouble
-* @see unum_parse
-* @see unum_parseInt64
-* @see unum_parseDouble
-* @see UFieldPosition
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_format(    const    UNumberFormat*    fmt,
-        int32_t            number,
-        UChar*            result,
-        int32_t            resultLength,
-        UFieldPosition    *pos,
-        UErrorCode*        status);
-
-/**
-* Format an int64 using a UNumberFormat.
-* The int64 will be formatted according to the UNumberFormat's locale.
-* @param fmt The formatter to use.
-* @param number The number to format.
-* @param result A pointer to a buffer to receive the formatted number.
-* @param resultLength The maximum size of result.
-* @param pos    A pointer to a UFieldPosition.  On input, position->field
-* is read.  On output, position->beginIndex and position->endIndex indicate
-* the beginning and ending indices of field number position->field, if such
-* a field exists.  This parameter may be NULL, in which case no field
-* @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.
-* @see unum_format
-* @see unum_formatDouble
-* @see unum_parse
-* @see unum_parseInt64
-* @see unum_parseDouble
-* @see UFieldPosition
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_formatInt64(const UNumberFormat *fmt,
-        int64_t         number,
-        UChar*          result,
-        int32_t         resultLength,
-        UFieldPosition *pos,
-        UErrorCode*     status);
-
-/**
-* Format a double using a UNumberFormat.
-* The double will be formatted according to the UNumberFormat's locale.
-* @param fmt The formatter to use.
-* @param number The number to format.
-* @param result A pointer to a buffer to receive the formatted number.
-* @param resultLength The maximum size of result.
-* @param pos    A pointer to a UFieldPosition.  On input, position->field
-* is read.  On output, position->beginIndex and position->endIndex indicate
-* the beginning and ending indices of field number position->field, if such
-* a field exists.  This parameter may be NULL, in which case no field
-* @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.
-* @see unum_format
-* @see unum_formatInt64
-* @see unum_parse
-* @see unum_parseInt64
-* @see unum_parseDouble
-* @see UFieldPosition
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_formatDouble(    const    UNumberFormat*  fmt,
-            double          number,
-            UChar*          result,
-            int32_t         resultLength,
-            UFieldPosition  *pos, /* 0 if ignore */
-            UErrorCode*     status);
-
-/**
-* Format a decimal number using a UNumberFormat.
-* The number will be formatted according to the UNumberFormat's locale.
-* The syntax of the input number is a "numeric string"
-* as defined in the Decimal Arithmetic Specification, available at
-* http://speleotrove.com/decimal
-* @param fmt The formatter to use.
-* @param number The number to format.
-* @param length The length of the input number, or -1 if the input is nul-terminated.
-* @param result A pointer to a buffer to receive the formatted number.
-* @param resultLength The maximum size of result.
-* @param pos    A pointer to a UFieldPosition.  On input, position->field
-*               is read.  On output, position->beginIndex and position->endIndex indicate
-*               the beginning and ending indices of field number position->field, if such
-*               a field exists.  This parameter may be NULL, in which case it is ignored.
-* @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.
-* @see unum_format
-* @see unum_formatInt64
-* @see unum_parse
-* @see unum_parseInt64
-* @see unum_parseDouble
-* @see UFieldPosition
-* @stable ICU 4.4 
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_formatDecimal(    const    UNumberFormat*  fmt,
-            const char *    number,
-            int32_t         length,
-            UChar*          result,
-            int32_t         resultLength,
-            UFieldPosition  *pos, /* 0 if ignore */
-            UErrorCode*     status);
-
-/**
- * Format a double currency amount using a UNumberFormat.
- * The double will be formatted according to the UNumberFormat's locale.
- * @param fmt the formatter to use
- * @param number the number to format
- * @param currency the 3-letter null-terminated ISO 4217 currency code
- * @param result a pointer to the buffer to receive the formatted number
- * @param resultLength the maximum number of UChars to write to result
- * @param pos a pointer to a UFieldPosition.  On input,
- * position->field is read.  On output, position->beginIndex and
- * position->endIndex indicate the beginning and ending indices of
- * field number position->field, if such a field exists.  This
- * parameter may be NULL, in which case it is ignored.
- * @param status a pointer to an input-output UErrorCode
- * @return the total buffer size needed; if greater than resultLength,
- * the output was truncated.
- * @see unum_formatDouble
- * @see unum_parseDoubleCurrency
- * @see UFieldPosition
- * @stable ICU 3.0
- */
-U_STABLE int32_t U_EXPORT2 
-unum_formatDoubleCurrency(const UNumberFormat* fmt,
-                          double number,
-                          UChar* currency,
-                          UChar* result,
-                          int32_t resultLength,
-                          UFieldPosition* pos, /* ignored if 0 */
-                          UErrorCode* status);
-
-/**
-* Parse a string into an integer using a UNumberFormat.
-* The string will be parsed according to the UNumberFormat's locale.
-* @param fmt The formatter to use.
-* @param text The text to parse.
-* @param textLength The length of text, or -1 if null-terminated.
-* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
-* to begin parsing.  If not 0, on output the offset at which parsing ended.
-* @param status A pointer to an UErrorCode to receive any errors
-* @return The value of the parsed integer
-* @see unum_parseInt64
-* @see unum_parseDouble
-* @see unum_format
-* @see unum_formatInt64
-* @see unum_formatDouble
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_parse(    const   UNumberFormat*  fmt,
-        const   UChar*          text,
-        int32_t         textLength,
-        int32_t         *parsePos /* 0 = start */,
-        UErrorCode      *status);
-
-/**
-* Parse a string into an int64 using a UNumberFormat.
-* The string will be parsed according to the UNumberFormat's locale.
-* @param fmt The formatter to use.
-* @param text The text to parse.
-* @param textLength The length of text, or -1 if null-terminated.
-* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
-* to begin parsing.  If not 0, on output the offset at which parsing ended.
-* @param status A pointer to an UErrorCode to receive any errors
-* @return The value of the parsed integer
-* @see unum_parse
-* @see unum_parseDouble
-* @see unum_format
-* @see unum_formatInt64
-* @see unum_formatDouble
-* @stable ICU 2.8
-*/
-U_STABLE int64_t U_EXPORT2 
-unum_parseInt64(const UNumberFormat*  fmt,
-        const UChar*  text,
-        int32_t       textLength,
-        int32_t       *parsePos /* 0 = start */,
-        UErrorCode    *status);
-
-/**
-* Parse a string into a double using a UNumberFormat.
-* The string will be parsed according to the UNumberFormat's locale.
-* @param fmt The formatter to use.
-* @param text The text to parse.
-* @param textLength The length of text, or -1 if null-terminated.
-* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
-* to begin parsing.  If not 0, on output the offset at which parsing ended.
-* @param status A pointer to an UErrorCode to receive any errors
-* @return The value of the parsed double
-* @see unum_parse
-* @see unum_parseInt64
-* @see unum_format
-* @see unum_formatInt64
-* @see unum_formatDouble
-* @stable ICU 2.0
-*/
-U_STABLE double U_EXPORT2 
-unum_parseDouble(    const   UNumberFormat*  fmt,
-            const   UChar*          text,
-            int32_t         textLength,
-            int32_t         *parsePos /* 0 = start */,
-            UErrorCode      *status);
-
-
-/**
-* Parse a number from a string into an unformatted numeric string using a UNumberFormat.
-* The input string will be parsed according to the UNumberFormat's locale.
-* The syntax of the output is a "numeric string"
-* as defined in the Decimal Arithmetic Specification, available at
-* http://speleotrove.com/decimal
-* @param fmt The formatter to use.
-* @param text The text to parse.
-* @param textLength The length of text, or -1 if null-terminated.
-* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
-*                 to begin parsing.  If not 0, on output the offset at which parsing ended.
-* @param outBuf A (char *) buffer to receive the parsed number as a string.  The output string
-*               will be nul-terminated if there is sufficient space.
-* @param outBufLength The size of the output buffer.  May be zero, in which case
-*               the outBuf pointer may be NULL, and the function will return the
-*               size of the output string.
-* @param status A pointer to an UErrorCode to receive any errors
-* @return the length of the output string, not including any terminating nul.
-* @see unum_parse
-* @see unum_parseInt64
-* @see unum_format
-* @see unum_formatInt64
-* @see unum_formatDouble
-* @stable ICU 4.4
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_parseDecimal(const   UNumberFormat*  fmt,
-                 const   UChar*          text,
-                         int32_t         textLength,
-                         int32_t         *parsePos /* 0 = start */,
-                         char            *outBuf,
-                         int32_t         outBufLength,
-                         UErrorCode      *status);
-
-/**
- * Parse a string into a double and a currency using a UNumberFormat.
- * The string will be parsed according to the UNumberFormat's locale.
- * @param fmt the formatter to use
- * @param text the text to parse
- * @param textLength the length of text, or -1 if null-terminated
- * @param parsePos a pointer to an offset index into text at which to
- * begin parsing. On output, *parsePos will point after the last
- * parsed character.  This parameter may be 0, in which case parsing
- * begins at offset 0.
- * @param currency a pointer to the buffer to receive the parsed null-
- * terminated currency.  This buffer must have a capacity of at least
- * 4 UChars.
- * @param status a pointer to an input-output UErrorCode
- * @return the parsed double
- * @see unum_parseDouble
- * @see unum_formatDoubleCurrency
- * @stable ICU 3.0
- */
-U_STABLE double U_EXPORT2
-unum_parseDoubleCurrency(const UNumberFormat* fmt,
-                         const UChar* text,
-                         int32_t textLength,
-                         int32_t* parsePos, /* 0 = start */
-                         UChar* currency,
-                         UErrorCode* status);
-
-/**
- * Set the pattern used by a UNumberFormat.  This can only be used
- * on a DecimalFormat, other formats return U_ILLEGAL_ARGUMENT_ERROR
- * in the status.
- * @param format The formatter to set.
- * @param localized TRUE if the pattern is localized, FALSE otherwise.
- * @param pattern The new pattern
- * @param patternLength The length of pattern, or -1 if null-terminated.
- * @param parseError A pointer to UParseError to recieve information
- * about errors occurred during parsing, or NULL if no parse error
- * information is desired.
- * @param status A pointer to an input-output UErrorCode.
- * @see unum_toPattern
- * @see DecimalFormat
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-unum_applyPattern(          UNumberFormat  *format,
-                            UBool          localized,
-                    const   UChar          *pattern,
-                            int32_t         patternLength,
-                            UParseError    *parseError,
-                            UErrorCode     *status
-                                    );
-
-/**
-* Get a locale for which decimal formatting patterns are available.
-* A UNumberFormat in a locale returned by this function will perform the correct
-* formatting and parsing for the locale.  The results of this call are not
-* valid for rule-based number formats.
-* @param localeIndex The index of the desired locale.
-* @return A locale for which number formatting patterns are available, or 0 if none.
-* @see unum_countAvailable
-* @stable ICU 2.0
-*/
-U_STABLE const char* U_EXPORT2 
-unum_getAvailable(int32_t localeIndex);
-
-/**
-* Determine how many locales have decimal formatting patterns available.  The
-* results of this call are not valid for rule-based number formats.
-* This function is useful for determining the loop ending condition for
-* calls to {@link #unum_getAvailable }.
-* @return The number of locales for which decimal formatting patterns are available.
-* @see unum_getAvailable
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_countAvailable(void);
-
-/** The possible UNumberFormat numeric attributes @stable ICU 2.0 */
-typedef enum UNumberFormatAttribute {
-  /** Parse integers only */
-  UNUM_PARSE_INT_ONLY,
-  /** Use grouping separator */
-  UNUM_GROUPING_USED,
-  /** Always show decimal point */
-  UNUM_DECIMAL_ALWAYS_SHOWN,
-  /** Maximum integer digits */
-  UNUM_MAX_INTEGER_DIGITS,
-  /** Minimum integer digits */
-  UNUM_MIN_INTEGER_DIGITS,
-  /** Integer digits */
-  UNUM_INTEGER_DIGITS,
-  /** Maximum fraction digits */
-  UNUM_MAX_FRACTION_DIGITS,
-  /** Minimum fraction digits */
-  UNUM_MIN_FRACTION_DIGITS,
-  /** Fraction digits */
-  UNUM_FRACTION_DIGITS,
-  /** Multiplier */
-  UNUM_MULTIPLIER,
-  /** Grouping size */
-  UNUM_GROUPING_SIZE,
-  /** Rounding Mode */
-  UNUM_ROUNDING_MODE,
-  /** Rounding increment */
-  UNUM_ROUNDING_INCREMENT,
-  /** The width to which the output of <code>format()</code> is padded. */
-  UNUM_FORMAT_WIDTH,
-  /** The position at which padding will take place. */
-  UNUM_PADDING_POSITION,
-  /** Secondary grouping size */
-  UNUM_SECONDARY_GROUPING_SIZE,
-  /** Use significant digits
-   * @stable ICU 3.0 */
-  UNUM_SIGNIFICANT_DIGITS_USED,
-  /** Minimum significant digits
-   * @stable ICU 3.0 */
-  UNUM_MIN_SIGNIFICANT_DIGITS,
-  /** Maximum significant digits
-   * @stable ICU 3.0 */
-  UNUM_MAX_SIGNIFICANT_DIGITS,
-  /** Lenient parse mode used by rule-based formats.
-   * @stable ICU 3.0
-   */
-  UNUM_LENIENT_PARSE
-} UNumberFormatAttribute;
-
-/**
-* Get a numeric attribute associated with a UNumberFormat.
-* An example of a numeric attribute is the number of integer digits a formatter will produce.
-* @param fmt The formatter to query.
-* @param attr The attribute to query; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED,
-* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS,
-* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER,
-* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE.
-* @return The value of attr.
-* @see unum_setAttribute
-* @see unum_getDoubleAttribute
-* @see unum_setDoubleAttribute
-* @see unum_getTextAttribute
-* @see unum_setTextAttribute
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_getAttribute(const UNumberFormat*          fmt,
-          UNumberFormatAttribute  attr);
-
-/**
-* Set a numeric attribute associated with a UNumberFormat.
-* An example of a numeric attribute is the number of integer digits a formatter will produce.  If the
-* formatter does not understand the attribute, the call is ignored.  Rule-based formatters only understand
-* the lenient-parse attribute.
-* @param fmt The formatter to set.
-* @param attr The attribute to set; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED,
-* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS,
-* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER,
-* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE,
-* or UNUM_LENIENT_PARSE.
-* @param newValue The new value of attr.
-* @see unum_getAttribute
-* @see unum_getDoubleAttribute
-* @see unum_setDoubleAttribute
-* @see unum_getTextAttribute
-* @see unum_setTextAttribute
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-unum_setAttribute(    UNumberFormat*          fmt,
-            UNumberFormatAttribute  attr,
-            int32_t                 newValue);
-
-
-/**
-* Get a numeric attribute associated with a UNumberFormat.
-* An example of a numeric attribute is the number of integer digits a formatter will produce.
-* If the formatter does not understand the attribute, -1 is returned.
-* @param fmt The formatter to query.
-* @param attr The attribute to query; e.g. UNUM_ROUNDING_INCREMENT.
-* @return The value of attr.
-* @see unum_getAttribute
-* @see unum_setAttribute
-* @see unum_setDoubleAttribute
-* @see unum_getTextAttribute
-* @see unum_setTextAttribute
-* @stable ICU 2.0
-*/
-U_STABLE double U_EXPORT2 
-unum_getDoubleAttribute(const UNumberFormat*          fmt,
-          UNumberFormatAttribute  attr);
-
-/**
-* Set a numeric attribute associated with a UNumberFormat.
-* An example of a numeric attribute is the number of integer digits a formatter will produce.
-* If the formatter does not understand the attribute, this call is ignored.
-* @param fmt The formatter to set.
-* @param attr The attribute to set; e.g. UNUM_ROUNDING_INCREMENT.
-* @param newValue The new value of attr.
-* @see unum_getAttribute
-* @see unum_setAttribute
-* @see unum_getDoubleAttribute
-* @see unum_getTextAttribute
-* @see unum_setTextAttribute
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-unum_setDoubleAttribute(    UNumberFormat*          fmt,
-            UNumberFormatAttribute  attr,
-            double                 newValue);
-
-/** The possible UNumberFormat text attributes @stable ICU 2.0*/
-typedef enum UNumberFormatTextAttribute {
-  /** Positive prefix */
-  UNUM_POSITIVE_PREFIX,
-  /** Positive suffix */
-  UNUM_POSITIVE_SUFFIX,
-  /** Negative prefix */
-  UNUM_NEGATIVE_PREFIX,
-  /** Negative suffix */
-  UNUM_NEGATIVE_SUFFIX,
-  /** The character used to pad to the format width. */
-  UNUM_PADDING_CHARACTER,
-  /** The ISO currency code */
-  UNUM_CURRENCY_CODE,
-  /**
-   * The default rule set.  This is only available with rule-based formatters.
-   * @stable ICU 3.0
-   */
-  UNUM_DEFAULT_RULESET,
-  /**
-   * The public rule sets.  This is only available with rule-based formatters.
-   * This is a read-only attribute.  The public rulesets are returned as a
-   * single string, with each ruleset name delimited by ';' (semicolon).
-   * @stable ICU 3.0
-   */
-  UNUM_PUBLIC_RULESETS
-} UNumberFormatTextAttribute;
-
-/**
-* Get a text attribute associated with a UNumberFormat.
-* An example of a text attribute is the suffix for positive numbers.  If the formatter
-* does not understand the attributre, U_UNSUPPORTED_ERROR is returned as the status.
-* Rule-based formatters only understand UNUM_DEFAULT_RULESET and UNUM_PUBLIC_RULESETS.
-* @param fmt The formatter to query.
-* @param tag The attribute to query; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX,
-* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE,
-* UNUM_DEFAULT_RULESET, or UNUM_PUBLIC_RULESETS.
-* @param result A pointer to a buffer to receive the attribute.
-* @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.
-* @see unum_setTextAttribute
-* @see unum_getAttribute
-* @see unum_setAttribute
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2 
-unum_getTextAttribute(    const    UNumberFormat*                    fmt,
-            UNumberFormatTextAttribute      tag,
-            UChar*                            result,
-            int32_t                            resultLength,
-            UErrorCode*                        status);
-
-/**
-* Set a text attribute associated with a UNumberFormat.
-* An example of a text attribute is the suffix for positive numbers.  Rule-based formatters
-* only understand UNUM_DEFAULT_RULESET.
-* @param fmt The formatter to set.
-* @param tag The attribute to set; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX,
-* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE,
-* or UNUM_DEFAULT_RULESET.
-* @param newValue The new value of attr.
-* @param newValueLength The length of newValue, or -1 if null-terminated.
-* @param status A pointer to an UErrorCode to receive any errors
-* @see unum_getTextAttribute
-* @see unum_getAttribute
-* @see unum_setAttribute
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2 
-unum_setTextAttribute(    UNumberFormat*                    fmt,
-            UNumberFormatTextAttribute      tag,
-            const    UChar*                            newValue,
-            int32_t                            newValueLength,
-            UErrorCode                        *status);
-
-/**
- * Extract the pattern from a UNumberFormat.  The pattern will follow
- * the DecimalFormat pattern syntax.
- * @param fmt The formatter to query.
- * @param isPatternLocalized TRUE if the pattern should be localized,
- * FALSE otherwise.  This is ignored if the formatter is a rule-based
- * formatter.
- * @param result A pointer to a buffer to receive the pattern.
- * @param resultLength The maximum size of result.
- * @param status A pointer to an input-output UErrorCode.
- * @return The total buffer size needed; if greater than resultLength,
- * the output was truncated.
- * @see unum_applyPattern
- * @see DecimalFormat
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-unum_toPattern(    const    UNumberFormat*          fmt,
-        UBool                  isPatternLocalized,
-        UChar*                  result,
-        int32_t                 resultLength,
-        UErrorCode*             status);
-
-
-/**
- * Constants for specifying a number format symbol.
- * @stable ICU 2.0
- */
-typedef enum UNumberFormatSymbol {
-  /** The decimal separator */
-  UNUM_DECIMAL_SEPARATOR_SYMBOL = 0,
-  /** The grouping separator */
-  UNUM_GROUPING_SEPARATOR_SYMBOL = 1,
-  /** The pattern separator */
-  UNUM_PATTERN_SEPARATOR_SYMBOL = 2,
-  /** The percent sign */
-  UNUM_PERCENT_SYMBOL = 3,
-  /** Zero*/
-  UNUM_ZERO_DIGIT_SYMBOL = 4,
-  /** Character representing a digit in the pattern */
-  UNUM_DIGIT_SYMBOL = 5,
-  /** The minus sign */
-  UNUM_MINUS_SIGN_SYMBOL = 6,
-  /** The plus sign */
-  UNUM_PLUS_SIGN_SYMBOL = 7,
-  /** The currency symbol */
-  UNUM_CURRENCY_SYMBOL = 8,
-  /** The international currency symbol */
-  UNUM_INTL_CURRENCY_SYMBOL = 9,
-  /** The monetary separator */
-  UNUM_MONETARY_SEPARATOR_SYMBOL = 10,
-  /** The exponential symbol */
-  UNUM_EXPONENTIAL_SYMBOL = 11,
-  /** Per mill symbol */
-  UNUM_PERMILL_SYMBOL = 12,
-  /** Escape padding character */
-  UNUM_PAD_ESCAPE_SYMBOL = 13,
-  /** Infinity symbol */
-  UNUM_INFINITY_SYMBOL = 14,
-  /** Nan symbol */
-  UNUM_NAN_SYMBOL = 15,
-  /** Significant digit symbol
-   * @stable ICU 3.0 */
-  UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16,
-  /** The monetary grouping separator 
-   * @stable ICU 3.6
-   */
-  UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17,  
-  /** One
-   * @draft ICU 4.6
-   */
-  UNUM_ONE_DIGIT_SYMBOL = 18,
-  /** Two
-   * @draft ICU 4.6
-   */
-  UNUM_TWO_DIGIT_SYMBOL = 19,
-  /** Three
-   * @draft ICU 4.6
-   */
-  UNUM_THREE_DIGIT_SYMBOL = 20,
-  /** Four
-   * @draft ICU 4.6
-   */
-  UNUM_FOUR_DIGIT_SYMBOL = 21,
-  /** Five
-   * @draft ICU 4.6
-   */
-  UNUM_FIVE_DIGIT_SYMBOL = 22,
-  /** Six
-   * @draft ICU 4.6
-   */
-  UNUM_SIX_DIGIT_SYMBOL = 23,
-  /** Seven
-    * @draft ICU 4.6
-   */
-  UNUM_SEVEN_DIGIT_SYMBOL = 24,
-  /** Eight
-   * @draft ICU 4.6
-   */
-  UNUM_EIGHT_DIGIT_SYMBOL = 25,
-  /** Nine
-   * @draft ICU 4.6
-   */
-  UNUM_NINE_DIGIT_SYMBOL = 26,
-  /** count symbol constants */
-  UNUM_FORMAT_SYMBOL_COUNT = 27
-} UNumberFormatSymbol;
-
-/**
-* Get a symbol associated with a UNumberFormat.
-* A UNumberFormat uses symbols to represent the special locale-dependent
-* characters in a number, for example the percent sign. This API is not
-* supported for rule-based formatters.
-* @param fmt The formatter to query.
-* @param symbol The UNumberFormatSymbol constant for the symbol to get
-* @param buffer The string buffer that will receive the symbol string;
-*               if it is NULL, then only the length of the symbol is returned
-* @param size The size of the string buffer
-* @param status A pointer to an UErrorCode to receive any errors
-* @return The length of the symbol; the buffer is not modified if
-*         <code>length&gt;=size</code>
-* @see unum_setSymbol
-* @stable ICU 2.0
-*/
-U_STABLE int32_t U_EXPORT2
-unum_getSymbol(const UNumberFormat *fmt,
-               UNumberFormatSymbol symbol,
-               UChar *buffer,
-               int32_t size,
-               UErrorCode *status);
-
-/**
-* Set a symbol associated with a UNumberFormat.
-* A UNumberFormat uses symbols to represent the special locale-dependent
-* characters in a number, for example the percent sign.  This API is not
-* supported for rule-based formatters.
-* @param fmt The formatter to set.
-* @param symbol The UNumberFormatSymbol constant for the symbol to set
-* @param value The string to set the symbol to
-* @param length The length of the string, or -1 for a zero-terminated string
-* @param status A pointer to an UErrorCode to receive any errors.
-* @see unum_getSymbol
-* @stable ICU 2.0
-*/
-U_STABLE void U_EXPORT2
-unum_setSymbol(UNumberFormat *fmt,
-               UNumberFormatSymbol symbol,
-               const UChar *value,
-               int32_t length,
-               UErrorCode *status);
-
-
-/**
- * Get the locale for this number format object.
- * You can choose between valid and actual locale.
- * @param fmt The formatter to get the locale from
- * @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
-unum_getLocaleByType(const UNumberFormat *fmt,
-                     ULocDataLocaleType type,
-                     UErrorCode* status); 
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif
diff --git a/source/i18n/unicode/uregex.h b/source/i18n/unicode/uregex.h
deleted file mode 100644
index 0663e7e..0000000
--- a/source/i18n/unicode/uregex.h
+++ /dev/null
@@ -1,1451 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2004-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-**********************************************************************
-*   file name:  uregex.h
-*   encoding:   US-ASCII
-*   indentation:4
-*
-*   created on: 2004mar09
-*   created by: Andy Heninger
-*
-*   ICU Regular Expressions, API for C
-*/
-
-/**
- * \file
- * \brief C API: Regular Expressions
- *
- * <p>This is a C wrapper around the C++ RegexPattern and RegexMatcher classes.</p>
- */
-
-#ifndef UREGEX_H
-#define UREGEX_H
-
-#include "unicode/utext.h"
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_REGULAR_EXPRESSIONS
-
-#include "unicode/localpointer.h"
-#include "unicode/parseerr.h"
-
-struct URegularExpression;
-/**
-  * Structure representing a compiled regular rexpression, plus the results
-  *    of a match operation.
-  * @stable ICU 3.0
-  */
-typedef struct URegularExpression URegularExpression;
-
-
-/**
- * Constants for Regular Expression Match Modes.
- * @stable ICU 2.4
- */
-typedef enum URegexpFlag{
-
-#ifndef U_HIDE_DRAFT_API 
-    /** Forces normalization of pattern and strings. 
-    Not implemented yet, just a placeholder, hence draft. 
-    @draft ICU 2.4 */
-    UREGEX_CANON_EQ         = 128,
-#endif
-    /**  Enable case insensitive matching.  @stable ICU 2.4 */
-    UREGEX_CASE_INSENSITIVE = 2,
-
-    /**  Allow white space and comments within patterns  @stable ICU 2.4 */
-    UREGEX_COMMENTS         = 4,
-
-    /**  If set, '.' matches line terminators,  otherwise '.' matching stops at line end.
-      *  @stable ICU 2.4 */
-    UREGEX_DOTALL           = 32,
-    
-    /**  If set, treat the entire pattern as a literal string.  
-      *  Metacharacters or escape sequences in the input sequence will be given 
-      *  no special meaning. Not implemented yet as of ICU 4.4.
-      *
-      *  The flags CASE_INSENSITIVE and UNICODE_CASE retain their impact
-      *  on matching when used in conjunction with this flag.
-      *  The other flags become superfluous.
-      *  TODO:  say which escapes are still handled; anything Java does
-      *         early (\\u) we should still do.
-      * @stable ICU 4.0
-      */
-    UREGEX_LITERAL = 16,
-
-    /**   Control behavior of "$" and "^"
-      *    If set, recognize line terminators within string,
-      *    otherwise, match only at start and end of input string.
-      *   @stable ICU 2.4 */
-    UREGEX_MULTILINE        = 8,
-    
-    /**   Unix-only line endings.
-      *   When this mode is enabled, only \\u000a is recognized as a line ending
-      *    in the behavior of ., ^, and $.
-      *   @stable ICU 4.0
-      */
-    UREGEX_UNIX_LINES = 1,
-
-    /**  Unicode word boundaries.
-      *     If set, \b uses the Unicode TR 29 definition of word boundaries.
-      *     Warning: Unicode word boundaries are quite different from
-      *     traditional regular expression word boundaries.  See
-      *     http://unicode.org/reports/tr29/#Word_Boundaries
-      *     @stable ICU 2.8
-      */
-    UREGEX_UWORD            = 256,
-
-     /**  Error on Unrecognized backslash escapes.
-       *     If set, fail with an error on patterns that contain
-       *     backslash-escaped ASCII letters without a known specail
-       *     meaning.  If this flag is not set, these
-       *     escaped letters represent themselves.
-       *     @stable ICU 4.0
-       */
-     UREGEX_ERROR_ON_UNKNOWN_ESCAPES = 512
-
-}  URegexpFlag;
-
-/**
-  *  Open (compile) an ICU regular expression.  Compiles the regular expression in
-  *  string form into an internal representation using the specified match mode flags.
-  *  The resulting regular expression handle can then be used to perform various
-  *   matching operations.
-  * 
-  *
-  * @param pattern        The Regular Expression pattern to be compiled. 
-  * @param patternLength  The length of the pattern, or -1 if the pattern is
-  *                       NUL termintated.
-  * @param flags          Flags that alter the default matching behavior for
-  *                       the regular expression, UREGEX_CASE_INSENSITIVE, for
-  *                       example.  For default behavior, set this parameter to zero.
-  *                       See <code>enum URegexpFlag</code>.  All desired flags
-  *                       are bitwise-ORed together.
-  * @param pe             Receives the position (line and column nubers) of any syntax
-  *                       error within the source regular expression string.  If this
-  *                       information is not wanted, pass NULL for this parameter.
-  * @param status         Receives error detected by this function.
-  * @stable ICU 3.0
-  *
-  */
-U_STABLE URegularExpression * U_EXPORT2
-uregex_open( const  UChar          *pattern,
-                    int32_t         patternLength,
-                    uint32_t        flags,
-                    UParseError    *pe,
-                    UErrorCode     *status);
-                    
-/**
-  *  Open (compile) an ICU regular expression.  Compiles the regular expression in
-  *  string form into an internal representation using the specified match mode flags.
-  *  The resulting regular expression handle can then be used to perform various
-  *   matching operations.
-  *  <p>
-  *  The contents of the pattern UText will be extracted and saved. Ownership of the
-  *   UText struct itself remains with the caller. This is to match the behavior of
-  *   uregex_open().
-  *
-  * @param pattern        The Regular Expression pattern to be compiled. 
-  * @param flags          Flags that alter the default matching behavior for
-  *                       the regular expression, UREGEX_CASE_INSENSITIVE, for
-  *                       example.  For default behavior, set this parameter to zero.
-  *                       See <code>enum URegexpFlag</code>.  All desired flags
-  *                       are bitwise-ORed together.
-  * @param pe             Receives the position (line and column nubers) of any syntax
-  *                       error within the source regular expression string.  If this
-  *                       information is not wanted, pass NULL for this parameter.
-  * @param status         Receives error detected by this function.
-  *
-  * @draft ICU 4.6
-  */
-U_DRAFT URegularExpression *  U_EXPORT2
-uregex_openUText(UText          *pattern,
-                 uint32_t        flags,
-                 UParseError    *pe,
-                 UErrorCode     *status);
-    
-/**
-  *  Open (compile) an ICU regular expression.  The resulting regular expression
-  *   handle can then be used to perform various matching operations.
-  *  <p>
-  *   This function is the same as uregex_open, except that the pattern
-  *   is supplied as an 8 bit char * string in the default code page.
-  *
-  * @param pattern        The Regular Expression pattern to be compiled, 
-  *                       NUL termintated.  
-  * @param flags          Flags that alter the default matching behavior for
-  *                       the regular expression, UREGEX_CASE_INSENSITIVE, for
-  *                       example.  For default behavior, set this parameter to zero.
-  *                       See <code>enum URegexpFlag</code>.  All desired flags
-  *                       are bitwise-ORed together.
-  * @param pe             Receives the position (line and column nubers) of any syntax
-  *                       error within the source regular expression string.  If this
-  *                       information is not wanted, pass NULL for this parameter.
-  * @param status         Receives errors detected by this function.
-  * @return               The URegularExpression object representing the compiled
-  *                       pattern.
-  *
-  * @stable ICU 3.0
-  */
-#if !UCONFIG_NO_CONVERSION
-U_STABLE URegularExpression * U_EXPORT2
-uregex_openC( const char           *pattern,
-                    uint32_t        flags,
-                    UParseError    *pe,
-                    UErrorCode     *status);
-#endif
-
-
-
-/**
-  *  Close the regular expression, recovering all resources (memory) it
-  *   was holding.
-  *
-  * @param regexp   The regular expression to be closed.
-  * @stable ICU 3.0
-  */
-U_STABLE void U_EXPORT2 
-uregex_close(URegularExpression *regexp);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalURegularExpressionPointer
- * "Smart pointer" class, closes a URegularExpression via uregex_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalURegularExpressionPointer, URegularExpression, uregex_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Make a copy of a compiled regular expression.  Cloning a regular
- * expression is faster than opening a second instance from the source
- * form of the expression, and requires less memory.
- * <p>
- * Note that the current input string and the position of any matched text
- *  within it are not cloned; only the pattern itself and and the
- *  match mode flags are copied.
- * <p>
- * Cloning can be particularly useful to threaded applications that perform
- * multiple match operations in parallel.  Each concurrent RE
- * operation requires its own instance of a URegularExpression.
- *
- * @param regexp   The compiled regular expression to be cloned.
- * @param status   Receives indication of any errors encountered
- * @return the cloned copy of the compiled regular expression.
- * @stable ICU 3.0
- */
-U_STABLE URegularExpression * U_EXPORT2 
-uregex_clone(const URegularExpression *regexp, UErrorCode *status);
-
-/**
- *  Returns a pointer to the source form of the pattern for this regular expression.
- *  This function will work even if the pattern was originally specified as a UText.
- *
- * @param regexp     The compiled regular expression.
- * @param patLength  This output parameter will be set to the length of the
- *                   pattern string.  A NULL pointer may be used here if the
- *                   pattern length is not needed, as would be the case if
- *                   the pattern is known in advance to be a NUL terminated
- *                   string.
- * @param status     Receives errors detected by this function.
- * @return a pointer to the pattern string.  The storage for the string is
- *                   owned by the regular expression object, and must not be
- *                   altered or deleted by the application.  The returned string
- *                   will remain valid until the regular expression is closed.
- * @stable ICU 3.0
- */
-U_STABLE const UChar * U_EXPORT2 
-uregex_pattern(const URegularExpression *regexp,
-                     int32_t            *patLength,
-                     UErrorCode         *status);
-
-/**
- *  Returns the source text of the pattern for this regular expression.
- *  This function will work even if the pattern was originally specified as a UChar string.
- *
- * @param regexp     The compiled regular expression.
- * @param status     Receives errors detected by this function.
- * @return the pattern text.  The storage for the text is owned by the regular expression
- *                   object, and must not be altered or deleted.
- *
- * @draft ICU 4.6
- */
-U_DRAFT UText * U_EXPORT2 
-uregex_patternUText(const URegularExpression *regexp,
-                          UErrorCode         *status);
-
-
-/**
-  * Get the match mode flags that were specified when compiling this regular expression.
-  * @param status   Receives errors detected by this function.
-  * @param regexp   The compiled regular expression.
-  * @return         The match mode flags
-  * @see URegexpFlag
-  * @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_flags(const  URegularExpression   *regexp,
-                    UErrorCode           *status);
-
-
-/**
-  *  Set the subject text string upon which the regular expression will look for matches.
-  *  This function may be called any number of times, allowing the regular
-  *  expression pattern to be applied to different strings.
-  *  <p>
-  *  Regular expression matching operations work directly on the application's
-  *  string data.  No copy is made.  The subject string data must not be
-  *  altered after calling this function until after all regular expression
-  *  operations involving this string data are completed.  
-  *  <p>
-  *  Zero length strings are permitted.  In this case, no subsequent match
-  *  operation will dereference the text string pointer.
-  *
-  * @param regexp     The compiled regular expression.
-  * @param text       The subject text string.
-  * @param textLength The length of the subject text, or -1 if the string
-  *                   is NUL terminated.
-  * @param status     Receives errors detected by this function.
-  * @stable ICU 3.0
-  */
-U_STABLE void U_EXPORT2 
-uregex_setText(URegularExpression *regexp,
-               const UChar        *text,
-               int32_t             textLength,
-               UErrorCode         *status);
-
-
-/**
-  *  Set the subject text string upon which the regular expression will look for matches.
-  *  This function may be called any number of times, allowing the regular
-  *  expression pattern to be applied to different strings.
-  *  <p>
-  *  Regular expression matching operations work directly on the application's
-  *  string data; only a shallow clone is made.  The subject string data must not be
-  *  altered after calling this function until after all regular expression
-  *  operations involving this string data are completed.  
-  *
-  * @param regexp     The compiled regular expression.
-  * @param text       The subject text string.
-  * @param status     Receives errors detected by this function.
-  *
-  * @draft ICU 4.6
-  */
-U_DRAFT void U_EXPORT2 
-uregex_setUText(URegularExpression *regexp,
-                UText              *text,
-                UErrorCode         *status);
-
-/**
-  *  Get the subject text that is currently associated with this 
-  *   regular expression object.  If the input was supplied using uregex_setText(),
-  *   that pointer will be returned.  Otherwise, the characters in the input will
-  *   be extracted to a buffer and returned.  In either case, ownership remains
-  *   with the regular expression object.
-  *
-  *  This function will work even if the input was originally specified as a UText.
-  *
-  * @param regexp      The compiled regular expression.
-  * @param textLength  The length of the string is returned in this output parameter. 
-  *                    A NULL pointer may be used here if the
-  *                    text length is not needed, as would be the case if
-  *                    the text is known in advance to be a NUL terminated
-  *                    string.
-  * @param status      Receives errors detected by this function.
-  * @return            Pointer to the subject text string currently associated with
-  *                    this regular expression.
-  * @stable ICU 3.0
-  */
-U_STABLE const UChar * U_EXPORT2 
-uregex_getText(URegularExpression *regexp,
-               int32_t            *textLength,
-               UErrorCode         *status);
-               
-               
-/**
-  *  Get the subject text that is currently associated with this 
-  *   regular expression object.
-  *
-  *  This function will work even if the input was originally specified as a UChar string.
-  *
-  * @param regexp      The compiled regular expression.
-  * @param dest        A mutable UText in which to store the current input.
-  *                    If NULL, a new UText will be created as an immutable shallow clone
-  *                    of the actual input string.
-  * @param status      Receives errors detected by this function.
-  * @return            The subject text currently associated with this regular expression.
-  *                    If a pre-allocated UText was provided, it will always be used and returned.
-  *
-  * @draft ICU 4.6
-  */
-U_DRAFT UText * U_EXPORT2 
-uregex_getUText(URegularExpression *regexp,
-                UText              *dest,
-                UErrorCode         *status);
-
-/**
-  *   Attempts to match the input string against the pattern.
-  *   To succeed, the match must extend to the end of the string,
-  *   or cover the complete match region.
-  *
-  *   If startIndex >= zero the match operation starts at the specified
-  *   index and must extend to the end of the input string.  Any region
-  *   that has been specified is reset.
-  *
-  *   If startIndex == -1 the match must cover the input region, or the entire
-  *   input string if no region has been set.  This directly corresponds to
-  *   Matcher.matches() in Java
-  *
-  *    @param  regexp      The compiled regular expression.
-  *    @param  startIndex  The input string (native) index at which to begin matching, or -1
-  *                        to match the input Region.
-  *    @param  status      Receives errors detected by this function.
-  *    @return             TRUE if there is a match
-  *    @stable ICU 3.0
-  */
-U_STABLE UBool U_EXPORT2 
-uregex_matches(URegularExpression *regexp,
-                int32_t            startIndex,
-                UErrorCode        *status);
-
-/**
-  *   64bit version of uregex_matches.
-  *   @draft ICU 4.6
-  */
-U_DRAFT UBool U_EXPORT2 
-uregex_matches64(URegularExpression *regexp,
-                 int64_t            startIndex,
-                 UErrorCode        *status);
-
-/**
-  *   Attempts to match the input string, starting from the specified index, against the pattern.
-  *   The match may be of any length, and is not required to extend to the end
-  *   of the input string.  Contrast with uregex_matches().
-  *
-  *   <p>If startIndex is >= 0 any input region that was set for this
-  *   URegularExpression is reset before the operation begins.
-  *
-  *   <p>If the specified starting index == -1 the match begins at the start of the input 
-  *   region, or at the start of the full string if no region has been specified.
-  *   This corresponds directly with Matcher.lookingAt() in Java.
-  *
-  *   <p>If the match succeeds then more information can be obtained via the
-  *    <code>uregexp_start()</code>, <code>uregexp_end()</code>,
-  *    and <code>uregexp_group()</code> functions.</p>
-  *
-  *    @param   regexp      The compiled regular expression.
-  *    @param   startIndex  The input string (native) index at which to begin matching, or
-  *                         -1 to match the Input Region
-  *    @param   status      A reference to a UErrorCode to receive any errors.
-  *    @return  TRUE if there is a match.
-  *    @stable ICU 3.0
-  */
-U_STABLE UBool U_EXPORT2 
-uregex_lookingAt(URegularExpression *regexp,
-                 int32_t             startIndex,
-                 UErrorCode         *status);
-
-/**
-  *   64bit version of uregex_lookingAt.
-  *   @draft ICU 4.6
-  */
-U_DRAFT UBool U_EXPORT2 
-uregex_lookingAt64(URegularExpression *regexp,
-                   int64_t             startIndex,
-                   UErrorCode         *status);
-
-/**
-  *   Find the first matching substring of the input string that matches the pattern.
-  *   If startIndex is >= zero the search for a match begins at the specified index,
-  *          and any match region is reset.  This corresponds directly with
-  *          Matcher.find(startIndex) in Java.
-  *
-  *   If startIndex == -1 the search begins at the start of the input region,
-  *           or at the start of the full string if no region has been specified.
-  *
-  *   If a match is found, <code>uregex_start(), uregex_end()</code>, and
-  *   <code>uregex_group()</code> will provide more information regarding the match.
-  *
-  *   @param   regexp      The compiled regular expression.
-  *   @param   startIndex  The position (native) in the input string to begin the search, or
-  *                        -1 to search within the Input Region.
-  *   @param   status      A reference to a UErrorCode to receive any errors.
-  *   @return              TRUE if a match is found.
-  *   @stable ICU 3.0
-  */
-U_STABLE UBool U_EXPORT2 
-uregex_find(URegularExpression *regexp,
-            int32_t             startIndex, 
-            UErrorCode         *status);
-
-/**
-  *   64bit version of uregex_find.
-  *   @draft ICU 4.6
-  */
-U_DRAFT UBool U_EXPORT2 
-uregex_find64(URegularExpression *regexp,
-              int64_t             startIndex, 
-              UErrorCode         *status);
-
-/**
-  *  Find the next pattern match in the input string.  Begin searching 
-  *  the input at the location following the end of he previous match, 
-  *  or at the start of the string (or region) if there is no 
-  *  previous match.  If a match is found, <code>uregex_start(), uregex_end()</code>, and
-  *  <code>uregex_group()</code> will provide more information regarding the match.
-  *
-  *  @param   regexp      The compiled regular expression.
-  *  @param   status      A reference to a UErrorCode to receive any errors.
-  *  @return              TRUE if a match is found.
-  *  @see uregex_reset
-  *  @stable ICU 3.0
-  */
-U_STABLE UBool U_EXPORT2 
-uregex_findNext(URegularExpression *regexp,
-                UErrorCode         *status);
-
-/**
-  *   Get the number of capturing groups in this regular expression's pattern.
-  *   @param   regexp      The compiled regular expression.
-  *   @param   status      A reference to a UErrorCode to receive any errors.
-  *   @return the number of capture groups
-  *   @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_groupCount(URegularExpression *regexp,
-                  UErrorCode         *status);
-
-/** Extract the string for the specified matching expression or subexpression.
-  * Group #0 is the complete string of matched text.
-  * Group #1 is the text matched by the first set of capturing parentheses.
-  *
-  *   @param   regexp       The compiled regular expression.
-  *   @param   groupNum     The capture group to extract.  Group 0 is the complete
-  *                         match.  The value of this parameter must be
-  *                         less than or equal to the number of capture groups in
-  *                         the pattern.
-  *   @param   dest         Buffer to receive the matching string data
-  *   @param   destCapacity Capacity of the dest buffer.
-  *   @param   status       A reference to a UErrorCode to receive any errors.
-  *   @return               Length of matching data,
-  *                         or -1 if no applicable match.
-  *   @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_group(URegularExpression *regexp,
-             int32_t             groupNum,
-             UChar              *dest,
-             int32_t             destCapacity,
-             UErrorCode          *status);
-
-
-/** Returns a shallow immutable clone of the entire input string.  The returned UText current native index
-  *   is set to the beginning of the requested capture group.  The capture group length is also
-  *   returned via groupLength.
-  * Group #0 is the complete string of matched text.
-  * Group #1 is the text matched by the first set of capturing parentheses.
-  *
-  *   @param   regexp       The compiled regular expression.
-  *   @param   groupNum     The capture group to extract.  Group 0 is the complete
-  *                         match.  The value of this parameter must be
-  *                         less than or equal to the number of capture groups in
-  *                         the pattern.
-  *   @param   dest         A mutable UText in which to store the current input.
-  *                         If NULL, a new UText will be created as an immutable shallow clone
-  *                         of the entire input string.
-  *   @param   groupLength  The group length of the desired capture group.
-  *   @param   status       A reference to a UErrorCode to receive any errors.
-  *   @return               The subject text currently associated with this regular expression.
-  *                         If a pre-allocated UText was provided, it will always be used and returned.
-
-  *
-  *   @draft ICU 4.6
-  */
-U_DRAFT UText * U_EXPORT2 
-uregex_groupUText(URegularExpression *regexp,
-                  int32_t             groupNum,
-                  UText              *dest,
-                  int64_t            *groupLength,
-                  UErrorCode         *status);
-
-
-/** Extract the string for the specified matching expression or subexpression.
-  * Group #0 is the complete string of matched text.
-  * Group #1 is the text matched by the first set of capturing parentheses.
-  *
-  *   @param   regexp       The compiled regular expression.
-  *   @param   groupNum     The capture group to extract.  Group 0 is the complete
-  *                         match.  The value of this parameter must be
-  *                         less than or equal to the number of capture groups in
-  *                         the pattern.
-  *   @param   dest         Mutable UText to receive the matching string data.
-  *                         If NULL, a new UText will be created (which may not be mutable).
-  *   @param   status       A reference to a UErrorCode to receive any errors.
-  *   @return               The matching string data. If a pre-allocated UText was provided,
-  *                          it will always be used and returned.
-  *
-  *   @internal ICU 4.4 technology preview
-  */
-U_INTERNAL UText * U_EXPORT2 
-uregex_groupUTextDeep(URegularExpression *regexp,
-                  int32_t             groupNum,
-                  UText              *dest,
-                  UErrorCode         *status);
-
-/**
-  *   Returns the index in the input string of the start of the text matched by the
-  *   specified capture group during the previous match operation.  Return -1 if
-  *   the capture group was not part of the last match.
-  *   Group #0 refers to the complete range of matched text.
-  *   Group #1 refers to the text matched by the first set of capturing parentheses.
-  *
-  *    @param   regexp      The compiled regular expression.
-  *    @param   groupNum    The capture group number
-  *    @param   status      A reference to a UErrorCode to receive any errors.
-  *    @return              the starting (native) position in the input of the text matched 
-  *                         by the specified group.
-  *    @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_start(URegularExpression *regexp,
-             int32_t             groupNum,
-             UErrorCode          *status);
-
-/**
-  *   64bit version of uregex_start.
-  *   @draft ICU 4.6
-  */
-U_DRAFT int64_t U_EXPORT2 
-uregex_start64(URegularExpression *regexp,
-               int32_t             groupNum,
-               UErrorCode          *status);
-
-/**
-  *   Returns the index in the input string of the position following the end
-  *   of the text matched by the specified capture group.
-  *   Return -1 if the capture group was not part of the last match.
-  *   Group #0 refers to the complete range of matched text.
-  *   Group #1 refers to the text matched by the first set of capturing parentheses.
-  *
-  *    @param   regexp      The compiled regular expression.
-  *    @param   groupNum    The capture group number
-  *    @param   status      A reference to a UErrorCode to receive any errors.
-  *    @return              the (native) index of the position following the last matched character.
-  *    @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_end(URegularExpression   *regexp,
-           int32_t               groupNum,
-           UErrorCode           *status);
-
-/**
-  *   64bit version of uregex_end.
-  *   @draft ICU 4.6
-  */
-U_DRAFT int64_t U_EXPORT2 
-uregex_end64(URegularExpression *regexp,
-             int32_t               groupNum,
-             UErrorCode           *status);
-
-/**
-  *  Reset any saved state from the previous match.  Has the effect of
-  *  causing uregex_findNext to begin at the specified index, and causing
-  *  uregex_start(), uregex_end() and uregex_group() to return an error 
-  *  indicating that there is no match information available.  Clears any
-  *  match region that may have been set.
-  *
-  *    @param   regexp      The compiled regular expression.
-  *    @param   index       The position (native) in the text at which a
-  *                         uregex_findNext() should begin searching.
-  *    @param   status      A reference to a UErrorCode to receive any errors.
-  *    @stable ICU 3.0
-  */
-U_STABLE void U_EXPORT2 
-uregex_reset(URegularExpression    *regexp,
-             int32_t               index,
-             UErrorCode            *status);
-             
-/**
-  *   64bit version of uregex_reset.
-  *   @draft ICU 4.6
-  */
-U_DRAFT void U_EXPORT2 
-uregex_reset64(URegularExpression  *regexp,
-               int64_t               index,
-               UErrorCode            *status);
-
-/** Sets the limits of the matching region for this URegularExpression.
-  * The region is the part of the input string that will be considered when matching.
-  * Invoking this method resets any saved state from the previous match, 
-  * then sets the region to start at the index specified by the start parameter
-  * and end at the index specified by the end parameter.
-  *
-  * Depending on the transparency and anchoring being used (see useTransparentBounds
-  * and useAnchoringBounds), certain constructs such as anchors may behave differently
-  * at or around the boundaries of the region
-  *
-  * The function will fail if start is greater than limit, or if either index
-  *  is less than zero or greater than the length of the string being matched.
-  *
-  * @param regexp The compiled regular expression.
-  * @param regionStart  The (native) index to begin searches at.
-  * @param regionLimit  The (native) index to end searches at (exclusive).
-  * @param status A pointer to a UErrorCode to receive any errors.
-  * @stable ICU 4.0
-  */
-U_STABLE void U_EXPORT2
-uregex_setRegion(URegularExpression   *regexp,
-                 int32_t               regionStart,
-                 int32_t               regionLimit,
-                 UErrorCode           *status);
-
-/**
-  *   64bit version of uregex_setRegion.
-  *   @draft ICU 4.6
-  */
-U_DRAFT void U_EXPORT2 
-uregex_setRegion64(URegularExpression *regexp,
-                 int64_t               regionStart,
-                 int64_t               regionLimit,
-                 UErrorCode           *status);
-
-/**
-  *   Variation on uregex_setRegion to set the region without resetting the start index
-  *     without resetting the position for subsequent matches.
-  *   @draft ICU 4.6
-  */
-U_DRAFT void U_EXPORT2 
-uregex_setRegionAndStart(URegularExpression *regexp,
-                 int64_t               regionStart,
-                 int64_t               regionLimit,
-                 int64_t               startIndex,
-                 UErrorCode           *status);
-
-/**
-  * Reports the start index of the matching region. Any matches found are limited to
-  * to the region bounded by regionStart (inclusive) and regionEnd (exclusive).
-  *
-  * @param regexp The compiled regular expression.
-  * @param status A pointer to a UErrorCode to receive any errors.
-  * @return The starting (native) index of this matcher's region.
-  * @stable ICU 4.0
-  */
-U_STABLE int32_t U_EXPORT2
-uregex_regionStart(const  URegularExpression   *regexp,
-                          UErrorCode           *status);
-
-/**
-  *   64bit version of uregex_regionStart.
-  *   @draft ICU 4.6
-  */
-U_DRAFT int64_t U_EXPORT2 
-uregex_regionStart64(const  URegularExpression   *regexp,
-                            UErrorCode           *status);
-
-/**
-  * Reports the end index (exclusive) of the matching region for this URegularExpression.
-  * Any matches found are limited to to the region bounded by regionStart (inclusive)
-  * and regionEnd (exclusive).
-  *
-  * @param regexp The compiled regular expression.
-  * @param status A pointer to a UErrorCode to receive any errors.
-  * @return The ending point (native) of this matcher's region.
-  * @stable ICU 4.0
-  */
-U_STABLE int32_t U_EXPORT2
-uregex_regionEnd(const  URegularExpression   *regexp,
-                        UErrorCode           *status);
-
-/**
-  *   64bit version of uregex_regionEnd.
-  *   @draft ICU 4.6
-  */
-U_DRAFT int64_t U_EXPORT2 
-uregex_regionEnd64(const  URegularExpression   *regexp,
-                          UErrorCode           *status);
-
-/**
-  * Queries the transparency of region bounds for this URegularExpression.
-  * See useTransparentBounds for a description of transparent and opaque bounds.
-  * By default, matching boundaries are opaque.
-  *
-  * @param regexp The compiled regular expression.
-  * @param status A pointer to a UErrorCode to receive any errors.
-  * @return TRUE if this matcher is using opaque bounds, false if it is not.
-  * @stable ICU 4.0
-  */
-U_STABLE UBool U_EXPORT2
-uregex_hasTransparentBounds(const  URegularExpression   *regexp,
-                                   UErrorCode           *status);
-
-
-/**
-  * Sets the transparency of region bounds for this URegularExpression.
-  * Invoking this function with an argument of TRUE will set matches to use transparent bounds.
-  * If the boolean argument is FALSE, then opaque bounds will be used.
-  *
-  * Using transparent bounds, the boundaries of the matching region are transparent
-  * to lookahead, lookbehind, and boundary matching constructs. Those constructs can
-  * see text beyond the boundaries of the region while checking for a match.
-  *
-  * With opaque bounds, no text outside of the matching region is visible to lookahead,
-  * lookbehind, and boundary matching constructs.
-  *
-  * By default, opaque bounds are used.
-  *
-  * @param   regexp The compiled regular expression.
-  * @param   b      TRUE for transparent bounds; FALSE for opaque bounds
-  * @param   status A pointer to a UErrorCode to receive any errors.
-  * @stable ICU 4.0
-  **/
-U_STABLE void U_EXPORT2  
-uregex_useTransparentBounds(URegularExpression   *regexp, 
-                            UBool                b,
-                            UErrorCode           *status);
-
-
-/**
-  * Return true if this URegularExpression is using anchoring bounds.
-  * By default, anchoring region bounds are used.
-  *
-  * @param  regexp The compiled regular expression.
-  * @param  status A pointer to a UErrorCode to receive any errors.
-  * @return TRUE if this matcher is using anchoring bounds.
-  * @stable ICU 4.0
-  */
-U_STABLE UBool U_EXPORT2
-uregex_hasAnchoringBounds(const  URegularExpression   *regexp,
-                                 UErrorCode           *status);
-
-
-/**
-  * Set whether this URegularExpression is using Anchoring Bounds for its region.
-  * With anchoring bounds, pattern anchors such as ^ and $ will match at the start
-  * and end of the region.  Without Anchoring Bounds, anchors will only match at
-  * the positions they would in the complete text.
-  *
-  * Anchoring Bounds are the default for regions.
-  *
-  * @param regexp The compiled regular expression.
-  * @param b      TRUE if to enable anchoring bounds; FALSE to disable them.
-  * @param status A pointer to a UErrorCode to receive any errors.
-  * @stable ICU 4.0
-  */
-U_STABLE void U_EXPORT2
-uregex_useAnchoringBounds(URegularExpression   *regexp,
-                          UBool                 b,
-                          UErrorCode           *status);
-
-/**
-  * Return TRUE if the most recent matching operation touched the
-  *  end of the text being processed.  In this case, additional input text could
-  *  change the results of that match.
-  *
-  *  @param regexp The compiled regular expression.
-  *  @param status A pointer to a UErrorCode to receive any errors.
-  *  @return  TRUE if the most recent match hit the end of input
-  *  @stable ICU 4.0
-  */
-U_STABLE UBool U_EXPORT2
-uregex_hitEnd(const  URegularExpression   *regexp,
-                     UErrorCode           *status);
-
-/**
-  * Return TRUE the most recent match succeeded and additional input could cause
-  * it to fail. If this function returns false and a match was found, then more input
-  * might change the match but the match won't be lost. If a match was not found,
-  * then requireEnd has no meaning.
-  *
-  * @param regexp The compiled regular expression.
-  * @param status A pointer to a UErrorCode to receive any errors.
-  * @return TRUE  if more input could cause the most recent match to no longer match.
-  * @stable ICU 4.0
-  */
-U_STABLE UBool U_EXPORT2   
-uregex_requireEnd(const  URegularExpression   *regexp,
-                         UErrorCode           *status);
-
-
-
-
-
-/**
-  *    Replaces every substring of the input that matches the pattern
-  *    with the given replacement string.  This is a convenience function that
-  *    provides a complete find-and-replace-all operation.
-  *
-  *    This method scans the input string looking for matches of the pattern. 
-  *    Input that is not part of any match is copied unchanged to the
-  *    destination buffer.  Matched regions are replaced in the output
-  *    buffer by the replacement string.   The replacement string may contain
-  *    references to capture groups; these take the form of $1, $2, etc.
-  *
-  *    @param   regexp             The compiled regular expression.
-  *    @param   replacementText    A string containing the replacement text.
-  *    @param   replacementLength  The length of the replacement string, or
-  *                                -1 if it is NUL terminated.
-  *    @param   destBuf            A (UChar *) buffer that will receive the result.
-  *    @param   destCapacity       The capacity of the desitnation buffer.
-  *    @param   status             A reference to a UErrorCode to receive any errors.
-  *    @return                     The length of the string resulting from the find
-  *                                and replace operation.  In the event that the
-  *                                destination capacity is inadequate, the return value
-  *                                is still the full length of the untruncated string.
-  *    @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_replaceAll(URegularExpression    *regexp,
-                  const UChar           *replacementText,
-                  int32_t                replacementLength,
-                  UChar                 *destBuf,
-                  int32_t                destCapacity,
-                  UErrorCode            *status);
-
-/**
-  *    Replaces every substring of the input that matches the pattern
-  *    with the given replacement string.  This is a convenience function that
-  *    provides a complete find-and-replace-all operation.
-  *
-  *    This method scans the input string looking for matches of the pattern. 
-  *    Input that is not part of any match is copied unchanged to the
-  *    destination buffer.  Matched regions are replaced in the output
-  *    buffer by the replacement string.   The replacement string may contain
-  *    references to capture groups; these take the form of $1, $2, etc.
-  *
-  *    @param   regexp         The compiled regular expression.
-  *    @param   replacement    A string containing the replacement text.
-  *    @param   dest           A mutable UText that will receive the result.
-  *                             If NULL, a new UText will be created (which may not be mutable).
-  *    @param   status         A reference to a UErrorCode to receive any errors.
-  *    @return                 A UText containing the results of the find and replace.
-  *                             If a pre-allocated UText was provided, it will always be used and returned.
-  *
-  *    @draft ICU 4.6
-  */
-U_DRAFT UText * U_EXPORT2 
-uregex_replaceAllUText(URegularExpression *regexp,
-                       UText              *replacement,
-                       UText              *dest,
-                       UErrorCode         *status);
-
-/**
-  *    Replaces the first substring of the input that matches the pattern
-  *    with the given replacement string.  This is a convenience function that
-  *    provides a complete find-and-replace operation.
-  *
-  *    This method scans the input string looking for a match of the pattern. 
-  *    All input that is not part of the match is copied unchanged to the
-  *    destination buffer.  The matched region is replaced in the output
-  *    buffer by the replacement string.   The replacement string may contain
-  *    references to capture groups; these take the form of $1, $2, etc.
-  *
-  *    @param   regexp             The compiled regular expression.
-  *    @param   replacementText    A string containing the replacement text.
-  *    @param   replacementLength  The length of the replacement string, or
-  *                                -1 if it is NUL terminated.
-  *    @param   destBuf            A (UChar *) buffer that will receive the result.
-  *    @param   destCapacity       The capacity of the desitnation buffer.
-  *    @param   status             a reference to a UErrorCode to receive any errors.
-  *    @return                     The length of the string resulting from the find
-  *                                and replace operation.  In the event that the
-  *                                destination capacity is inadequate, the return value
-  *                                is still the full length of the untruncated string.
-  *    @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_replaceFirst(URegularExpression  *regexp,
-                    const UChar         *replacementText,
-                    int32_t              replacementLength,
-                    UChar               *destBuf,
-                    int32_t              destCapacity,
-                    UErrorCode          *status);
-
-/**
-  *    Replaces the first substring of the input that matches the pattern
-  *    with the given replacement string.  This is a convenience function that
-  *    provides a complete find-and-replace operation.
-  *
-  *    This method scans the input string looking for a match of the pattern. 
-  *    All input that is not part of the match is copied unchanged to the
-  *    destination buffer.  The matched region is replaced in the output
-  *    buffer by the replacement string.   The replacement string may contain
-  *    references to capture groups; these take the form of $1, $2, etc.
-  *
-  *    @param   regexp         The compiled regular expression.
-  *    @param   replacement    A string containing the replacement text.
-  *    @param   dest           A mutable UText that will receive the result.
-  *                             If NULL, a new UText will be created (which may not be mutable).
-  *    @param   status         A reference to a UErrorCode to receive any errors.
-  *    @return                 A UText containing the results of the find and replace.
-  *                             If a pre-allocated UText was provided, it will always be used and returned.
-  *
-  *    @draft ICU 4.6
-  */
-U_DRAFT UText * U_EXPORT2 
-uregex_replaceFirstUText(URegularExpression *regexp,
-                         UText              *replacement,
-                         UText              *dest,
-                         UErrorCode         *status);
-
-
-/**
-  *   Implements a replace operation intended to be used as part of an
-  *   incremental find-and-replace.
-  *
-  *   <p>The input string, starting from the end of the previous match and ending at
-  *   the start of the current match, is appended to the destination string.  Then the
-  *   replacement string is appended to the output string,
-  *   including handling any substitutions of captured text.</p>
-  *
-  *   <p>A note on preflight computation of buffersize and error handling:
-  *   Calls to uregex_appendReplacement() and uregex_appendTail() are
-  *   designed to be chained, one after another, with the destination
-  *   buffer pointer and buffer capacity updated after each in preparation
-  *   to for the next.  If the destination buffer is exhausted partway through such a
-  *   sequence, a U_BUFFER_OVERFLOW_ERROR status will be returned.  Normal
-  *   ICU conventions are for a function to perform no action if it is
-  *   called with an error status, but for this one case, uregex_appendRepacement()
-  *   will operate normally so that buffer size computations will complete
-  *   correctly.
-  *
-  *   <p>For simple, prepackaged, non-incremental find-and-replace
-  *      operations, see replaceFirst() or replaceAll().</p>
-  *
-  *   @param   regexp      The regular expression object.  
-  *   @param   replacementText The string that will replace the matched portion of the
-  *                        input string as it is copied to the destination buffer.
-  *                        The replacement text may contain references ($1, for
-  *                        example) to capture groups from the match.
-  *   @param   replacementLength  The length of the replacement text string,
-  *                        or -1 if the string is NUL terminated.
-  *   @param   destBuf     The buffer into which the results of the
-  *                        find-and-replace are placed.  On return, this pointer
-  *                        will be updated to refer to the beginning of the
-  *                        unused portion of buffer, leaving it in position for
-  *                        a subsequent call to this function.
-  *   @param   destCapacity The size of the output buffer,  On return, this
-  *                        parameter will be updated to reflect the space remaining
-  *                        unused in the output buffer.
-  *   @param   status      A reference to a UErrorCode to receive any errors. 
-  *   @return              The length of the result string.  In the event that
-  *                        destCapacity is inadequate, the full length of the
-  *                        untruncated output string is returned.
-  *
-  *   @stable ICU 3.0
-  *
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_appendReplacement(URegularExpression    *regexp,
-                         const UChar           *replacementText,
-                         int32_t                replacementLength,
-                         UChar                **destBuf,
-                         int32_t               *destCapacity,
-                         UErrorCode            *status);
-
-
-/**
-  *   Implements a replace operation intended to be used as part of an
-  *   incremental find-and-replace.
-  *
-  *   <p>The input string, starting from the end of the previous match and ending at
-  *   the start of the current match, is appended to the destination string.  Then the
-  *   replacement string is appended to the output string,
-  *   including handling any substitutions of captured text.</p>
-  *
-  *   <p>For simple, prepackaged, non-incremental find-and-replace
-  *      operations, see replaceFirst() or replaceAll().</p>
-  *
-  *   @param   regexp      The regular expression object.  
-  *   @param   replacementText The string that will replace the matched portion of the
-  *                        input string as it is copied to the destination buffer.
-  *                        The replacement text may contain references ($1, for
-  *                        example) to capture groups from the match.
-  *   @param   dest        A mutable UText that will receive the result. Must not be NULL.
-  *   @param   status      A reference to a UErrorCode to receive any errors. 
-  *
-  *   @draft ICU 4.6
-  */
-U_DRAFT void U_EXPORT2 
-uregex_appendReplacementUText(URegularExpression    *regexp,
-                              UText                 *replacementText,
-                              UText                 *dest,
-                              UErrorCode            *status);
-
-
-/**
-  * As the final step in a find-and-replace operation, append the remainder
-  * of the input string, starting at the position following the last match,
-  * to the destination string. <code>uregex_appendTail()</code> is intended 
-  *  to be invoked after one or more invocations of the
-  *  <code>uregex_appendReplacement()</code> function.
-  *
-  *   @param   regexp      The regular expression object.  This is needed to 
-  *                        obtain the input string and with the position
-  *                        of the last match within it.
-  *   @param   destBuf     The buffer in which the results of the
-  *                        find-and-replace are placed.  On return, the pointer
-  *                        will be updated to refer to the beginning of the
-  *                        unused portion of buffer.
-  *   @param   destCapacity The size of the output buffer,  On return, this
-  *                        value will be updated to reflect the space remaining
-  *                        unused in the output buffer.
-  *   @param   status      A reference to a UErrorCode to receive any errors. 
-  *   @return              The length of the result string.  In the event that
-  *                        destCapacity is inadequate, the full length of the
-  *                        untruncated output string is returned.
-  *
-  *   @stable ICU 3.0
-  */
-U_STABLE int32_t U_EXPORT2 
-uregex_appendTail(URegularExpression    *regexp,
-                  UChar                **destBuf,
-                  int32_t               *destCapacity,
-                  UErrorCode            *status);
-                  
-
-/**
-  * As the final step in a find-and-replace operation, append the remainder
-  * of the input string, starting at the position following the last match,
-  * to the destination string. <code>uregex_appendTailUText()</code> is intended 
-  *  to be invoked after one or more invocations of the
-  *  <code>uregex_appendReplacementUText()</code> function.
-  *
-  *   @param   regexp      The regular expression object.  This is needed to 
-  *                        obtain the input string and with the position
-  *                        of the last match within it.
-  *   @param   dest        A mutable UText that will receive the result. Must not be NULL.
-  *   @return              The destination UText.
-  *
-  *   @draft ICU 4.6
-  */
-U_DRAFT UText * U_EXPORT2 
-uregex_appendTailUText(URegularExpression    *regexp,
-                       UText                 *dest,
-                       UErrorCode            *status);
-
-
-
- /**
-   * Split a string into fields.  Somewhat like split() from Perl.
-   *  The pattern matches identify delimiters that separate the input
-   *  into fields.  The input data between the matches becomes the
-   *  fields themselves.
-   * <p>
-   *  Each of the fields is copied from the input string to the destination
-   *  buffer, and NUL terminated.  The position of each field within
-   *  the destination buffer is returned in the destFields array.
-   *
-   *  Note:  another choice for the design of this function would be to not
-   *         copy the resulting fields at all, but to return indexes and
-   *         lengths within the source text.  
-   *           Advantages would be
-   *             o  Faster.  No Copying.
-   *             o  Nothing extra needed when field data may contain embedded NUL chars.
-   *             o  Less memory needed if working on large data.
-   *           Disadvantages
-   *             o  Less consistent with C++ split, which copies into an
-   *                array of UnicodeStrings.
-   *             o  No NUL termination, extracted fields would be less convenient
-   *                to use in most cases.
-   *             o  Possible problems in the future, when support Unicode Normalization
-   *                could cause the fields to not correspond exactly to
-   *                a range of the source text.
-   * 
-   *    @param   regexp      The compiled regular expression.
-   *    @param   destBuf     A (UChar *) buffer to receive the fields that
-   *                         are extracted from the input string. These
-   *                         field pointers will refer to positions within the
-   *                         destination buffer supplied by the caller.  Any
-   *                         extra positions within the destFields array will be
-   *                         set to NULL.
-   *    @param   destCapacity The capacity of the destBuf.
-   *    @param   requiredCapacity  The actual capacity required of the destBuf.
-   *                         If destCapacity is too small, requiredCapacity will return 
-   *                         the total capacity required to hold all of the output, and
-   *                         a U_BUFFER_OVERFLOW_ERROR will be returned.
-   *    @param   destFields  An array to be filled with the position of each
-   *                         of the extracted fields within destBuf.
-   *    @param   destFieldsCapacity  The number of elements in the destFields array.
-   *                If the number of fields found is less than destFieldsCapacity,
-   *                the extra destFields elements are set to zero.
-   *                If destFieldsCapacity is too small, the trailing part of the
-   *                input, including any field delimiters, is treated as if it
-   *                were the last field - it is copied to the destBuf, and
-   *                its position is in the destBuf is stored in the last element
-   *                of destFields.  This behavior mimics that of Perl.  It is not
-   *                an error condition, and no error status is returned when all destField
-   *                positions are used.
-   * @param status  A reference to a UErrorCode to receive any errors.
-   * @return        The number of fields into which the input string was split.
-   * @stable ICU 3.0
-   */
-U_STABLE int32_t U_EXPORT2 
-uregex_split(   URegularExpression      *regexp,
-                  UChar                 *destBuf,
-                  int32_t                destCapacity,
-                  int32_t               *requiredCapacity,
-                  UChar                 *destFields[],
-                  int32_t                destFieldsCapacity,
-                  UErrorCode            *status);
-
-
-  /**
-   * Split a string into fields.  Somewhat like split() from Perl.
-   * The pattern matches identify delimiters that separate the input
-   *  into fields.  The input data between the matches becomes the
-   *  fields themselves.
-   * <p>
-   * The behavior of this function is not very closely aligned with uregex_split();
-   * instead, it is based on (and implemented directly on top of) the C++ split method.
-   *
-   * @param regexp  The compiled regular expression.
-   * @param destFields    An array of mutable UText structs to receive the results of the split.
-   *                If a field is NULL, a new UText is allocated to contain the results for
-   *                that field. This new UText is not guaranteed to be mutable.
-   * @param destFieldsCapacity  The number of elements in the destination array.
-   *                If the number of fields found is less than destCapacity, the
-   *                extra strings in the destination array are not altered.
-   *                If the number of destination strings is less than the number
-   *                of fields, the trailing part of the input string, including any
-   *                field delimiters, is placed in the last destination string.
-   *                This behavior mimics that of Perl.  It is not  an error condition, and no
-   *                error status is returned when all destField positions are used.
-   * @param status  A reference to a UErrorCode to receive any errors.
-   * @return        The number of fields into which the input string was split.
-   *
-   * @draft ICU 4.6
-   */
-U_DRAFT int32_t U_EXPORT2 
-uregex_splitUText(URegularExpression    *regexp,
-                  UText                 *destFields[],
-                  int32_t                destFieldsCapacity,
-                  UErrorCode            *status);
-
-
-
-
-/**
- * Set a processing time limit for match operations with this URegularExpression.
- *
- * Some patterns, when matching certain strings, can run in exponential time.
- * For practical purposes, the match operation may appear to be in an
- * infinite loop.
- * When a limit is set a match operation will fail with an error if the
- * limit is exceeded.
- * <p>
- * The units of the limit are steps of the match engine.
- * Correspondence with actual processor time will depend on the speed
- * of the processor and the details of the specific pattern, but will
- * typically be on the order of milliseconds.
- * <p>
- * By default, the matching time is not limited.
- * <p>
- *
- * @param   regexp      The compiled regular expression.
- * @param   limit       The limit value, or 0 for no limit.
- * @param   status      A reference to a UErrorCode to receive any errors.
- * @stable ICU 4.0
- */
-U_STABLE void U_EXPORT2
-uregex_setTimeLimit(URegularExpression      *regexp,
-                    int32_t                  limit,
-                    UErrorCode              *status);
-
-/**
- * Get the time limit for for matches with this URegularExpression.
- * A return value of zero indicates that there is no limit.
- *
- * @param   regexp      The compiled regular expression.
- * @param   status      A reference to a UErrorCode to receive any errors.
- * @return the maximum allowed time for a match, in units of processing steps.
- * @stable ICU 4.0
- */
-U_STABLE int32_t U_EXPORT2
-uregex_getTimeLimit(const URegularExpression      *regexp,
-                          UErrorCode              *status);
-
-/**
- * Set the amount of heap storage avaliable for use by the match backtracking stack.
- * <p>
- * ICU uses a backtracking regular expression engine, with the backtrack stack
- * maintained on the heap.  This function sets the limit to the amount of memory
- * that can be used  for this purpose.  A backtracking stack overflow will
- * result in an error from the match operation that caused it.
- * <p>
- * A limit is desirable because a malicious or poorly designed pattern can use
- * excessive memory, potentially crashing the process.  A limit is enabled
- * by default.
- * <p>
- * @param   regexp      The compiled regular expression.
- * @param   limit       The maximum size, in bytes, of the matching backtrack stack.
- *                      A value of -1 means no limit.
- *                      The limit must be greater than zero, or -1.
- * @param   status      A reference to a UErrorCode to receive any errors.
- *
- * @stable ICU 4.0
- */
-U_STABLE void U_EXPORT2
-uregex_setStackLimit(URegularExpression      *regexp,
-                     int32_t                  limit,
-                     UErrorCode              *status);
-
-/**
- * Get the size of the heap storage available for use by the back tracking stack.
- *
- * @return  the maximum backtracking stack size, in bytes, or zero if the
- *          stack size is unlimited.
- * @stable ICU 4.0
- */
-U_STABLE int32_t U_EXPORT2
-uregex_getStackLimit(const URegularExpression      *regexp,
-                           UErrorCode              *status);
-
-
-/**
- * Function pointer for a regular expression matching callback function.
- * When set, a callback function will be called periodically during matching
- * operations.  If the call back function returns FALSE, the matching
- * operation will be terminated early.
- *
- * Note:  the callback function must not call other functions on this
- *        URegularExpression.
- *
- * @param context  context pointer.  The callback function will be invoked
- *                 with the context specified at the time that
- *                 uregex_setMatchCallback() is called.
- * @param steps    the accumulated processing time, in match steps, 
- *                 for this matching operation.
- * @return         TRUE to continue the matching operation.
- *                 FALSE to terminate the matching operation.
- * @stable ICU 4.0
- */
-U_CDECL_BEGIN
-typedef UBool U_CALLCONV URegexMatchCallback (
-                   const void *context,
-                   int32_t     steps);
-U_CDECL_END
-
-/**
- * Set a callback function for this URegularExpression.
- * During matching operations the function will be called periodically,
- * giving the application the opportunity to terminate a long-running
- * match.
- *
- * @param   regexp      The compiled regular expression.
- * @param   callback    A pointer to the user-supplied callback function.
- * @param   context     User context pointer.  The value supplied at the
- *                      time the callback function is set will be saved
- *                      and passed to the callback each time that it is called.
- * @param   status      A reference to a UErrorCode to receive any errors.
- * @stable ICU 4.0
- */
-U_STABLE void U_EXPORT2
-uregex_setMatchCallback(URegularExpression      *regexp,
-                        URegexMatchCallback     *callback,
-                        const void              *context,
-                        UErrorCode              *status);
-
-
-/**
- *  Get the callback function for this URegularExpression.
- *
- * @param   regexp      The compiled regular expression.
- * @param   callback    Out paramater, receives a pointer to the user-supplied 
- *                      callback function.
- * @param   context     Out parameter, receives the user context pointer that
- *                      was set when uregex_setMatchCallback() was called.
- * @param   status      A reference to a UErrorCode to receive any errors.
- * @stable ICU 4.0
- */
-U_STABLE void U_EXPORT2
-uregex_getMatchCallback(const URegularExpression    *regexp,
-                        URegexMatchCallback        **callback,
-                        const void                 **context,
-                        UErrorCode                  *status);
-
-
-/**
- * Function pointer for a regular expression find callback function.
- * 
- * When set, a callback function will be called during a find operation
- * and for operations that depend on find, such as findNext, split and some replace
- * operations like replaceFirst.
- * The callback will usually be called after each attempt at a match, but this is not a
- * guarantee that the callback will be invoked at each character.  For finds where the
- * match engine is invoked at each character, this may be close to true, but less likely
- * for more optimized loops where the pattern is known to only start, and the match
- * engine invoked, at certain characters.
- * When invoked, this callback will specify the index at which a match operation is about
- * to be attempted, giving the application the opportunity to terminate a long-running
- * find operation.
- * 
- * If the call back function returns FALSE, the find operation will be terminated early.
- *
- * Note:  the callback function must not call other functions on this
- *        URegularExpression
- *
- * @param context  context pointer.  The callback function will be invoked
- *                 with the context specified at the time that
- *                 uregex_setFindProgressCallback() is called.
- * @param matchIndex  the next index at which a match attempt will be attempted for this
- *                 find operation.  If this callback interrupts the search, this is the
- *                 index at which a find/findNext operation may be re-initiated.
- * @return         TRUE to continue the matching operation.
- *                 FALSE to terminate the matching operation.
- * @draft ICU 4.6
- */
-U_CDECL_BEGIN
-typedef UBool U_CALLCONV URegexFindProgressCallback (
-                   const void *context,
-                   int64_t     matchIndex);
-U_CDECL_END
-
-/**
- *  Set the find progress callback function for this URegularExpression.
- *
- * @param   regexp      The compiled regular expression.
- * @param   callback    A pointer to the user-supplied callback function.
- * @param   context     User context pointer.  The value supplied at the
- *                      time the callback function is set will be saved
- *                      and passed to the callback each time that it is called.
- * @param   status      A reference to a UErrorCode to receive any errors.
- * @draft ICU 4.6
- */
-U_DRAFT void U_EXPORT2
-uregex_setFindProgressCallback(URegularExpression              *regexp,
-                                URegexFindProgressCallback      *callback,
-                                const void                      *context,
-                                UErrorCode                      *status);
-
-
-/**
- *  Get the find progress callback function for this URegularExpression.
- *
- * @param   regexp      The compiled regular expression.
- * @param   callback    Out paramater, receives a pointer to the user-supplied 
- *                      callback function.
- * @param   context     Out parameter, receives the user context pointer that
- *                      was set when uregex_setFindProgressCallback() was called.
- * @param   status      A reference to a UErrorCode to receive any errors.
- * @draft ICU 4.6
- */
-U_DRAFT void U_EXPORT2
-uregex_getFindProgressCallback(const URegularExpression          *regexp,
-                                URegexFindProgressCallback        **callback,
-                                const void                        **context,
-                                UErrorCode                        *status);
-
-#endif   /*  !UCONFIG_NO_REGULAR_EXPRESSIONS  */
-#endif   /*  UREGEX_H  */
diff --git a/source/i18n/unicode/usearch.h b/source/i18n/unicode/usearch.h
deleted file mode 100644
index 2f3d563..0000000
--- a/source/i18n/unicode/usearch.h
+++ /dev/null
@@ -1,829 +0,0 @@
-/*
-**********************************************************************
-*   Copyright (C) 2001-2010 IBM and others. All rights reserved.
-**********************************************************************
-*   Date        Name        Description
-*  06/28/2001   synwee      Creation.
-**********************************************************************
-*/
-#ifndef USEARCH_H
-#define USEARCH_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
-
-#include "unicode/localpointer.h"
-#include "unicode/ucol.h"
-#include "unicode/ucoleitr.h"
-#include "unicode/ubrk.h"
-
-/**
- * \file
- * \brief C API: StringSearch
- *
- * C Apis for an engine that provides language-sensitive text searching based 
- * on the comparison rules defined in a <tt>UCollator</tt> data struct,
- * see <tt>ucol.h</tt>. This ensures that language eccentricity can be 
- * handled, e.g. for the German collator, characters &szlig; and SS will be matched 
- * if case is chosen to be ignored. 
- * See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
- * "ICU Collation Design Document"</a> for more information.
- * <p> 
- * The algorithm implemented is a modified form of the Boyer Moore's search.
- * For more information  see 
- * <a href="http://icu-project.org/docs/papers/efficient_text_searching_in_java.html">
- * "Efficient Text Searching in Java"</a>, published in <i>Java Report</i> 
- * in February, 1999, for further information on the algorithm.
- * <p>
- * There are 2 match options for selection:<br>
- * Let S' be the sub-string of a text string S between the offsets start and 
- * end <start, end>.
- * <br>
- * A pattern string P matches a text string S at the offsets <start, end> 
- * if
- * <pre> 
- * option 1. Some canonical equivalent of P matches some canonical equivalent 
- *           of S'
- * option 2. P matches S' and if P starts or ends with a combining mark, 
- *           there exists no non-ignorable combining mark before or after S' 
- *           in S respectively. 
- * </pre>
- * Option 2. will be the default.
- * <p>
- * This search has APIs similar to that of other text iteration mechanisms 
- * such as the break iterators in <tt>ubrk.h</tt>. Using these 
- * APIs, it is easy to scan through text looking for all occurances of 
- * a given pattern. This search iterator allows changing of direction by 
- * calling a <tt>reset</tt> followed by a <tt>next</tt> or <tt>previous</tt>. 
- * Though a direction change can occur without calling <tt>reset</tt> first,  
- * this operation comes with some speed penalty.
- * Generally, match results in the forward direction will match the result 
- * matches in the backwards direction in the reverse order
- * <p>
- * <tt>usearch.h</tt> provides APIs to specify the starting position 
- * within the text string to be searched, e.g. <tt>usearch_setOffset</tt>,
- * <tt>usearch_preceding</tt> and <tt>usearch_following</tt>. Since the 
- * starting position will be set as it is specified, please take note that 
- * there are some dangerous positions which the search may render incorrect 
- * results:
- * <ul>
- * <li> The midst of a substring that requires normalization.
- * <li> If the following match is to be found, the position should not be the
- *      second character which requires to be swapped with the preceding 
- *      character. Vice versa, if the preceding match is to be found, 
- *      position to search from should not be the first character which 
- *      requires to be swapped with the next character. E.g certain Thai and
- *      Lao characters require swapping.
- * <li> If a following pattern match is to be found, any position within a 
- *      contracting sequence except the first will fail. Vice versa if a 
- *      preceding pattern match is to be found, a invalid starting point 
- *      would be any character within a contracting sequence except the last.
- * </ul>
- * <p>
- * A breakiterator can be used if only matches at logical breaks are desired.
- * Using a breakiterator will only give you results that exactly matches the
- * boundaries given by the breakiterator. For instance the pattern "e" will
- * not be found in the string "\u00e9" if a character break iterator is used.
- * <p>
- * Options are provided to handle overlapping matches. 
- * E.g. In English, overlapping matches produces the result 0 and 2 
- * for the pattern "abab" in the text "ababab", where else mutually 
- * exclusive matches only produce the result of 0.
- * <p>
- * Though collator attributes will be taken into consideration while 
- * performing matches, there are no APIs here for setting and getting the 
- * attributes. These attributes can be set by getting the collator
- * from <tt>usearch_getCollator</tt> and using the APIs in <tt>ucol.h</tt>.
- * Lastly to update String Search to the new collator attributes, 
- * usearch_reset() has to be called.
- * <p> 
- * Restriction: <br>
- * Currently there are no composite characters that consists of a
- * character with combining class > 0 before a character with combining 
- * class == 0. However, if such a character exists in the future, the 
- * search mechanism does not guarantee the results for option 1.
- * 
- * <p>
- * Example of use:<br>
- * <pre><code>
- * char *tgtstr = "The quick brown fox jumped over the lazy fox";
- * char *patstr = "fox";
- * UChar target[64];
- * UChar pattern[16];
- * UErrorCode status = U_ZERO_ERROR;
- * u_uastrcpy(target, tgtstr);
- * u_uastrcpy(pattern, patstr);
- *
- * UStringSearch *search = usearch_open(pattern, -1, target, -1, "en_US", 
- *                                  NULL, &status);
- * if (U_SUCCESS(status)) {
- *     for (int pos = usearch_first(search, &status); 
- *          pos != USEARCH_DONE; 
- *          pos = usearch_next(search, &status))
- *     {
- *         printf("Found match at %d pos, length is %d\n", pos, 
- *                                        usearch_getMatchLength(search));
- *     }
- * }
- *
- * usearch_close(search);
- * </code></pre>
- * @stable ICU 2.4
- */
-
-/**
-* DONE is returned by previous() and next() after all valid matches have 
-* been returned, and by first() and last() if there are no matches at all.
-* @stable ICU 2.4
-*/
-#define USEARCH_DONE -1
-
-/**
-* Data structure for searching
-* @stable ICU 2.4
-*/
-struct UStringSearch;
-/**
-* Data structure for searching
-* @stable ICU 2.4
-*/
-typedef struct UStringSearch UStringSearch;
-
-/**
-* @stable ICU 2.4
-*/
-typedef enum {
-    /** Option for overlapping matches */
-    USEARCH_OVERLAP,
-    /** 
-     * Option for canonical matches. option 1 in header documentation.
-     * The default value will be USEARCH_OFF
-     */
-    USEARCH_CANONICAL_MATCH,
-    /** 
-     * Option to control how collation elements are compared.
-     * The default value will be USEARCH_STANDARD_ELEMENT_COMPARISON.
-     * @stable ICU 4.4
-     */
-    USEARCH_ELEMENT_COMPARISON,
-
-    USEARCH_ATTRIBUTE_COUNT
-} USearchAttribute;
-
-/**
-* @stable ICU 2.4
-*/
-typedef enum {
-    /** Default value for any USearchAttribute */
-    USEARCH_DEFAULT = -1,
-    /** Value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH */
-    USEARCH_OFF, 
-    /** Value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH */
-    USEARCH_ON,
-    /** 
-     * Value (default) for USEARCH_ELEMENT_COMPARISON;
-     * standard collation element comparison at the specified collator
-     * strength.
-     * @stable ICU 4.4
-     */
-    USEARCH_STANDARD_ELEMENT_COMPARISON,
-    /** 
-     * Value for USEARCH_ELEMENT_COMPARISON;
-     * collation element comparison is modified to effectively provide
-     * behavior between the specified strength and strength - 1. Collation
-     * elements in the pattern that have the base weight for the specified
-     * strength are treated as "wildcards" that match an element with any
-     * other weight at that collation level in the searched text. For
-     * example, with a secondary-strength English collator, a plain 'e' in
-     * the pattern will match a plain e or an e with any diacritic in the
-     * searched text, but an e with diacritic in the pattern will only
-     * match an e with the same diacritic in the searched text.
-     * @stable ICU 4.4
-     */
-    USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD,
-    /** 
-     * Value for USEARCH_ELEMENT_COMPARISON.
-     * collation element comparison is modified to effectively provide
-     * behavior between the specified strength and strength - 1. Collation
-     * elements in either the pattern or the searched text that have the
-     * base weight for the specified strength are treated as "wildcards"
-     * that match an element with any other weight at that collation level.
-     * For example, with a secondary-strength English collator, a plain 'e'
-     * in the pattern will match a plain e or an e with any diacritic in the
-     * searched text, but an e with diacritic in the pattern will only
-     * match an e with the same diacritic or a plain e in the searched text.
-     * @stable ICU 4.4
-     */
-    USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD,
-
-    USEARCH_ATTRIBUTE_VALUE_COUNT
-} USearchAttributeValue;
-
-/* open and close ------------------------------------------------------ */
-
-/**
-* Creating a search iterator data struct using the argument locale language
-* rule set. A collator will be created in the process, which will be owned by
-* this search and will be deleted in <tt>usearch_close</tt>.
-* @param pattern for matching
-* @param patternlength length of the pattern, -1 for null-termination
-* @param text text string
-* @param textlength length of the text string, -1 for null-termination
-* @param locale name of locale for the rules to be used
-* @param breakiter A BreakIterator that will be used to restrict the points
-*                  at which matches are detected. If a match is found, but 
-*                  the match's start or end index is not a boundary as 
-*                  determined by the <tt>BreakIterator</tt>, the match will 
-*                  be rejected and another will be searched for. 
-*                  If this parameter is <tt>NULL</tt>, no break detection is 
-*                  attempted.
-* @param status for errors if it occurs. If pattern or text is NULL, or if
-*               patternlength or textlength is 0 then an 
-*               U_ILLEGAL_ARGUMENT_ERROR is returned.
-* @return search iterator data structure, or NULL if there is an error.
-* @stable ICU 2.4
-*/
-U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern, 
-                                              int32_t         patternlength, 
-                                        const UChar          *text, 
-                                              int32_t         textlength,
-                                        const char           *locale,
-                                              UBreakIterator *breakiter,
-                                              UErrorCode     *status);
-
-/**
-* Creating a search iterator data struct using the argument collator language
-* rule set. Note, user retains the ownership of this collator, thus the 
-* responsibility of deletion lies with the user.
-* NOTE: string search cannot be instantiated from a collator that has 
-* collate digits as numbers (CODAN) turned on.
-* @param pattern for matching
-* @param patternlength length of the pattern, -1 for null-termination
-* @param text text string
-* @param textlength length of the text string, -1 for null-termination
-* @param collator used for the language rules
-* @param breakiter A BreakIterator that will be used to restrict the points
-*                  at which matches are detected. If a match is found, but 
-*                  the match's start or end index is not a boundary as 
-*                  determined by the <tt>BreakIterator</tt>, the match will 
-*                  be rejected and another will be searched for. 
-*                  If this parameter is <tt>NULL</tt>, no break detection is 
-*                  attempted.
-* @param status for errors if it occurs. If collator, pattern or text is NULL, 
-*               or if patternlength or textlength is 0 then an 
-*               U_ILLEGAL_ARGUMENT_ERROR is returned.
-* @return search iterator data structure, or NULL if there is an error.
-* @stable ICU 2.4
-*/
-U_STABLE UStringSearch * U_EXPORT2 usearch_openFromCollator(
-                                         const UChar *pattern, 
-                                               int32_t         patternlength,
-                                         const UChar          *text, 
-                                               int32_t         textlength,
-                                         const UCollator      *collator,
-                                               UBreakIterator *breakiter,
-                                               UErrorCode     *status);
-
-/**
-* Destroying and cleaning up the search iterator data struct.
-* If a collator is created in <tt>usearch_open</tt>, it will be destroyed here.
-* @param searchiter data struct to clean up
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_close(UStringSearch *searchiter);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUStringSearchPointer
- * "Smart pointer" class, closes a UStringSearch via usearch_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUStringSearchPointer, UStringSearch, usearch_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/* get and set methods -------------------------------------------------- */
-
-/**
-* Sets the current position in the text string which the next search will 
-* start from. Clears previous states. 
-* This method takes the argument index and sets the position in the text 
-* string accordingly without checking if the index is pointing to a 
-* valid starting point to begin searching. 
-* Search positions that may render incorrect results are highlighted in the
-* header comments
-* @param strsrch search iterator data struct
-* @param position position to start next search from. If position is less
-*          than or greater than the text range for searching, 
-*          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-* @param status error status if any.
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch, 
-                                        int32_t    position,
-                                        UErrorCode    *status);
-
-/**
-* Return the current index in the string text being searched.
-* If the iteration has gone past the end of the text (or past the beginning 
-* for a backwards search), <tt>USEARCH_DONE</tt> is returned.
-* @param strsrch search iterator data struct
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
-    
-/**
-* Sets the text searching attributes located in the enum USearchAttribute
-* with values from the enum USearchAttributeValue.
-* <tt>USEARCH_DEFAULT</tt> can be used for all attributes for resetting.
-* @param strsrch search iterator data struct
-* @param attribute text attribute to be set
-* @param value text attribute value
-* @param status for errors if it occurs
-* @see #usearch_getAttribute
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch         *strsrch, 
-                                           USearchAttribute       attribute,
-                                           USearchAttributeValue  value,
-                                           UErrorCode            *status);
-
-/**    
-* Gets the text searching attributes.
-* @param strsrch search iterator data struct
-* @param attribute text attribute to be retrieve
-* @return text attribute value
-* @see #usearch_setAttribute
-* @stable ICU 2.4
-*/
-U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute(
-                                         const UStringSearch    *strsrch,
-                                               USearchAttribute  attribute);
-
-/**
-* Returns the index to the match in the text string that was searched.
-* This call returns a valid result only after a successful call to 
-* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>, 
-* or <tt>usearch_last</tt>.
-* Just after construction, or after a searching method returns 
-* <tt>USEARCH_DONE</tt>, this method will return <tt>USEARCH_DONE</tt>.
-* <p>
-* Use <tt>usearch_getMatchedLength</tt> to get the matched string length.
-* @param strsrch search iterator data struct
-* @return index to a substring within the text string that is being 
-*         searched.
-* @see #usearch_first
-* @see #usearch_next
-* @see #usearch_previous
-* @see #usearch_last
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_getMatchedStart(
-                                               const UStringSearch *strsrch);
-    
-/**
-* Returns the length of text in the string which matches the search pattern. 
-* This call returns a valid result only after a successful call to 
-* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>, 
-* or <tt>usearch_last</tt>.
-* Just after construction, or after a searching method returns 
-* <tt>USEARCH_DONE</tt>, this method will return 0.
-* @param strsrch search iterator data struct
-* @return The length of the match in the string text, or 0 if there is no 
-*         match currently.
-* @see #usearch_first
-* @see #usearch_next
-* @see #usearch_previous
-* @see #usearch_last
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_getMatchedLength(
-                                               const UStringSearch *strsrch);
-
-/**
-* Returns the text that was matched by the most recent call to 
-* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>, 
-* or <tt>usearch_last</tt>.
-* If the iterator is not pointing at a valid match (e.g. just after 
-* construction or after <tt>USEARCH_DONE</tt> has been returned, returns
-* an empty string. If result is not large enough to store the matched text,
-* result will be filled with the partial text and an U_BUFFER_OVERFLOW_ERROR 
-* will be returned in status. result will be null-terminated whenever 
-* possible. If the buffer fits the matched text exactly, a null-termination 
-* is not possible, then a U_STRING_NOT_TERMINATED_ERROR set in status.
-* Pre-flighting can be either done with length = 0 or the API 
-* <tt>usearch_getMatchLength</tt>.
-* @param strsrch search iterator data struct
-* @param result UChar buffer to store the matched string
-* @param resultCapacity length of the result buffer
-* @param status error returned if result is not large enough
-* @return exact length of the matched text, not counting the null-termination
-* @see #usearch_first
-* @see #usearch_next
-* @see #usearch_previous
-* @see #usearch_last
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch, 
-                                            UChar         *result, 
-                                            int32_t        resultCapacity, 
-                                            UErrorCode    *status);
-
-#if !UCONFIG_NO_BREAK_ITERATION
-
-/**
-* Set the BreakIterator that will be used to restrict the points at which 
-* matches are detected.
-* @param strsrch search iterator data struct
-* @param breakiter A BreakIterator that will be used to restrict the points
-*                  at which matches are detected. If a match is found, but 
-*                  the match's start or end index is not a boundary as 
-*                  determined by the <tt>BreakIterator</tt>, the match will 
-*                  be rejected and another will be searched for. 
-*                  If this parameter is <tt>NULL</tt>, no break detection is 
-*                  attempted.
-* @param status for errors if it occurs
-* @see #usearch_getBreakIterator
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch  *strsrch, 
-                                               UBreakIterator *breakiter,
-                                               UErrorCode     *status);
-
-/**
-* Returns the BreakIterator that is used to restrict the points at which 
-* matches are detected. This will be the same object that was passed to the 
-* constructor or to <tt>usearch_setBreakIterator</tt>. Note that 
-* <tt>NULL</tt> 
-* is a legal value; it means that break detection should not be attempted.
-* @param strsrch search iterator data struct
-* @return break iterator used
-* @see #usearch_setBreakIterator
-* @stable ICU 2.4
-*/
-U_STABLE const UBreakIterator * U_EXPORT2 usearch_getBreakIterator(
-                                              const UStringSearch *strsrch);
-    
-#endif
-    
-/**
-* Set the string text to be searched. Text iteration will hence begin at the 
-* start of the text string. This method is useful if you want to re-use an 
-* iterator to search for the same pattern within a different body of text.
-* @param strsrch search iterator data struct
-* @param text new string to look for match
-* @param textlength length of the new string, -1 for null-termination
-* @param status for errors if it occurs. If text is NULL, or textlength is 0 
-*               then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change
-*               done to strsrch.
-* @see #usearch_getText
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_setText(      UStringSearch *strsrch, 
-                                      const UChar         *text,
-                                            int32_t        textlength,
-                                            UErrorCode    *status);
-
-/**
-* Return the string text to be searched.
-* @param strsrch search iterator data struct
-* @param length returned string text length
-* @return string text 
-* @see #usearch_setText
-* @stable ICU 2.4
-*/
-U_STABLE const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch, 
-                                               int32_t       *length);
-
-/**
-* Gets the collator used for the language rules. 
-* <p>
-* Deleting the returned <tt>UCollator</tt> before calling 
-* <tt>usearch_close</tt> would cause the string search to fail.
-* <tt>usearch_close</tt> will delete the collator if this search owns it.
-* @param strsrch search iterator data struct
-* @return collator
-* @stable ICU 2.4
-*/
-U_STABLE UCollator * U_EXPORT2 usearch_getCollator(
-                                               const UStringSearch *strsrch);
-
-/**
-* Sets the collator used for the language rules. User retains the ownership 
-* of this collator, thus the responsibility of deletion lies with the user.
-* This method causes internal data such as Boyer-Moore shift tables to  
-* be recalculated, but the iterator's position is unchanged.
-* @param strsrch search iterator data struct
-* @param collator to be used
-* @param status for errors if it occurs
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_setCollator(      UStringSearch *strsrch, 
-                                          const UCollator     *collator,
-                                                UErrorCode    *status);
-
-/**
-* Sets the pattern used for matching.
-* Internal data like the Boyer Moore table will be recalculated, but the 
-* iterator's position is unchanged.
-* @param strsrch search iterator data struct
-* @param pattern string
-* @param patternlength pattern length, -1 for null-terminated string
-* @param status for errors if it occurs. If text is NULL, or textlength is 0 
-*               then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change
-*               done to strsrch.
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_setPattern(      UStringSearch *strsrch, 
-                                         const UChar         *pattern,
-                                               int32_t        patternlength,
-                                               UErrorCode    *status);
-
-/**
-* Gets the search pattern
-* @param strsrch search iterator data struct
-* @param length return length of the pattern, -1 indicates that the pattern 
-*               is null-terminated
-* @return pattern string
-* @stable ICU 2.4
-*/
-U_STABLE const UChar * U_EXPORT2 usearch_getPattern(
-                                               const UStringSearch *strsrch, 
-                                                     int32_t       *length);
-
-/* methods ------------------------------------------------------------- */
-
-/**
-* Returns the first index at which the string text matches the search 
-* pattern.  
-* The iterator is adjusted so that its current index (as returned by 
-* <tt>usearch_getOffset</tt>) is the match position if one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>.
-* @param strsrch search iterator data struct
-* @param status for errors if it occurs
-* @return The character index of the first match, or 
-* <tt>USEARCH_DONE</tt> if there are no matches.
-* @see #usearch_getOffset
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch, 
-                                           UErrorCode    *status);
-
-/**
-* Returns the first index greater than <tt>position</tt> at which the string 
-* text 
-* matches the search pattern. The iterator is adjusted so that its current 
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if 
-* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
-* <p>
-* Search positions that may render incorrect results are highlighted in the
-* header comments. If position is less than or greater than the text range 
-* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-* @param strsrch search iterator data struct
-* @param position to start the search at
-* @param status for errors if it occurs
-* @return The character index of the first match following <tt>pos</tt>,
-*         or <tt>USEARCH_DONE</tt> if there are no matches.
-* @see #usearch_getOffset
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch, 
-                                               int32_t    position, 
-                                               UErrorCode    *status);
-    
-/**
-* Returns the last index in the target text at which it matches the search 
-* pattern. The iterator is adjusted so that its current 
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if 
-* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>.
-* @param strsrch search iterator data struct
-* @param status for errors if it occurs
-* @return The index of the first match, or <tt>USEARCH_DONE</tt> if there 
-*         are no matches.
-* @see #usearch_getOffset
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch, 
-                                          UErrorCode    *status);
-
-/**
-* Returns the first index less than <tt>position</tt> at which the string text 
-* matches the search pattern. The iterator is adjusted so that its current 
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if 
-* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
-* <p>
-* Search positions that may render incorrect results are highlighted in the
-* header comments. If position is less than or greater than the text range 
-* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned
-* @param strsrch search iterator data struct
-* @param position index position the search is to begin at
-* @param status for errors if it occurs
-* @return The character index of the first match preceding <tt>pos</tt>,
-*         or <tt>USEARCH_DONE</tt> if there are no matches.
-* @see #usearch_getOffset
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch, 
-                                               int32_t    position, 
-                                               UErrorCode    *status);
-    
-/**
-* Returns the index of the next point at which the string text matches the
-* search pattern, starting from the current position.
-* The iterator is adjusted so that its current 
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if 
-* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
-* @param strsrch search iterator data struct
-* @param status for errors if it occurs
-* @return The index of the next match after the current position, or 
-*         <tt>USEARCH_DONE</tt> if there are no more matches.
-* @see #usearch_first
-* @see #usearch_getOffset
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch, 
-                                          UErrorCode    *status);
-
-/**
-* Returns the index of the previous point at which the string text matches
-* the search pattern, starting at the current position.
-* The iterator is adjusted so that its current 
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if 
-* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
-* @param strsrch search iterator data struct
-* @param status for errors if it occurs
-* @return The index of the previous match before the current position,
-*         or <tt>USEARCH_DONE</tt> if there are no more matches.
-* @see #usearch_last
-* @see #usearch_getOffset
-* @see #USEARCH_DONE
-* @stable ICU 2.4
-*/
-U_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch, 
-                                              UErrorCode    *status);
-    
-/** 
-* Reset the iteration.
-* Search will begin at the start of the text string if a forward iteration 
-* is initiated before a backwards iteration. Otherwise if a backwards 
-* iteration is initiated before a forwards iteration, the search will begin
-* at the end of the text string.
-* @param strsrch search iterator data struct
-* @see #usearch_first
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch);
-
-/**
-  *  Simple forward search for the pattern, starting at a specified index,
-  *     and using using a default set search options.
-  *
-  *  This is an experimental function, and is not an official part of the
-  *      ICU API.
-  *
-  *  The collator options, such as UCOL_STRENGTH and UCOL_NORMALIZTION, are honored.
-  *
-  *  The UStringSearch options USEARCH_CANONICAL_MATCH, USEARCH_OVERLAP and
-  *  any Break Iterator are ignored.
-  *
-  *  Matches obey the following constraints:
-  *
-  *      Characters at the start or end positions of a match that are ignorable
-  *      for collation are not included as part of the match, unless they
-  *      are part of a combining sequence, as described below.
-  *
-  *      A match will not include a partial combining sequence.  Combining
-  *      character sequences  are considered to be  inseperable units,
-  *      and either match the pattern completely, or are considered to not match
-  *      at all.  Thus, for example, an A followed a combining accent mark will 
-  *      not be found when searching for a plain (unaccented) A.   (unless
-  *      the collation strength has been set to ignore all accents).
-  *
-  *      When beginning a search, the initial starting position, startIdx,
-  *      is assumed to be an acceptable match boundary with respect to
-  *      combining characters.  A combining sequence that spans across the
-  *      starting point will not supress a match beginning at startIdx.
-  *
-  *      Characters that expand to multiple collation elements
-  *      (German sharp-S becoming 'ss', or the composed forms of accented
-  *      characters, for example) also must match completely.
-  *      Searching for a single 's' in a string containing only a sharp-s will 
-  *      find no match.
-  *
-  *
-  *  @param strsrch    the UStringSearch struct, which references both
-  *                    the text to be searched  and the pattern being sought.
-  *  @param startIdx   The index into the text to begin the search.
-  *  @param matchStart An out parameter, the starting index of the matched text.
-  *                    This parameter may be NULL.
-  *                    A value of -1 will be returned if no match was found.
-  *  @param matchLimit Out parameter, the index of the first position following the matched text.
-  *                    The matchLimit will be at a suitable position for beginning a subsequent search
-  *                    in the input text.
-  *                    This parameter may be NULL.
-  *                    A value of -1 will be returned if no match was found.
-  *          
-  *  @param status     Report any errors.  Note that no match found is not an error.
-  *  @return           TRUE if a match was found, FALSE otherwise.
-  *
-  *  @internal
-  */
-U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
-                                          int32_t        startIdx,
-                                          int32_t        *matchStart,
-                                          int32_t        *matchLimit,
-                                          UErrorCode     *status);
-
-/**
-  *  Simple backwards search for the pattern, starting at a specified index,
-  *     and using using a default set search options.
-  *
-  *  This is an experimental function, and is not an official part of the
-  *      ICU API.
-  *
-  *  The collator options, such as UCOL_STRENGTH and UCOL_NORMALIZTION, are honored.
-  *
-  *  The UStringSearch options USEARCH_CANONICAL_MATCH, USEARCH_OVERLAP and
-  *  any Break Iterator are ignored.
-  *
-  *  Matches obey the following constraints:
-  *
-  *      Characters at the start or end positions of a match that are ignorable
-  *      for collation are not included as part of the match, unless they
-  *      are part of a combining sequence, as described below.
-  *
-  *      A match will not include a partial combining sequence.  Combining
-  *      character sequences  are considered to be  inseperable units,
-  *      and either match the pattern completely, or are considered to not match
-  *      at all.  Thus, for example, an A followed a combining accent mark will 
-  *      not be found when searching for a plain (unaccented) A.   (unless
-  *      the collation strength has been set to ignore all accents).
-  *
-  *      When beginning a search, the initial starting position, startIdx,
-  *      is assumed to be an acceptable match boundary with respect to
-  *      combining characters.  A combining sequence that spans across the
-  *      starting point will not supress a match beginning at startIdx.
-  *
-  *      Characters that expand to multiple collation elements
-  *      (German sharp-S becoming 'ss', or the composed forms of accented
-  *      characters, for example) also must match completely.
-  *      Searching for a single 's' in a string containing only a sharp-s will 
-  *      find no match.
-  *
-  *
-  *  @param strsrch    the UStringSearch struct, which references both
-  *                    the text to be searched  and the pattern being sought.
-  *  @param startIdx   The index into the text to begin the search.
-  *  @param matchStart An out parameter, the starting index of the matched text.
-  *                    This parameter may be NULL.
-  *                    A value of -1 will be returned if no match was found.
-  *  @param matchLimit Out parameter, the index of the first position following the matched text.
-  *                    The matchLimit will be at a suitable position for beginning a subsequent search
-  *                    in the input text.
-  *                    This parameter may be NULL.
-  *                    A value of -1 will be returned if no match was found.
-  *          
-  *  @param status     Report any errors.  Note that no match found is not an error.
-  *  @return           TRUE if a match was found, FALSE otherwise.
-  *
-  *  @internal
-  */
-U_INTERNAL UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
-                                                   int32_t        startIdx,
-                                                   int32_t        *matchStart,
-                                                   int32_t        *matchLimit,
-                                                   UErrorCode     *status);
-
-#endif /* #if !UCONFIG_NO_COLLATION  && !UCONFIG_NO_BREAK_ITERATION */
-
-#endif
diff --git a/source/i18n/unicode/uspoof.h b/source/i18n/unicode/uspoof.h
deleted file mode 100644
index 7a218ca..0000000
--- a/source/i18n/unicode/uspoof.h
+++ /dev/null
@@ -1,887 +0,0 @@
-/*
-***************************************************************************
-* Copyright (C) 2008-2010, International Business Machines Corporation
-* and others. All Rights Reserved.
-***************************************************************************
-*   file name:  uspoof.h
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2008Feb13
-*   created by: Andy Heninger
-*
-*   Unicode Spoof Detection
-*/
-
-#ifndef USPOOF_H
-#define USPOOF_H
-
-#include "unicode/utypes.h"
-#include "unicode/uset.h"
-#include "unicode/parseerr.h"
-#include "unicode/localpointer.h"
-
-#if !UCONFIG_NO_NORMALIZATION
-
-
-#if U_SHOW_CPLUSPLUS_API
-#include "unicode/unistr.h"
-#include "unicode/uniset.h"
-
-U_NAMESPACE_USE
-#endif
-
-
-/**
- * \file
- * \brief Unicode Security and Spoofing Detection, C API.
- *
- * These functions are intended to check strings, typically
- * identifiers of some type, such as URLs, for the presence of
- * characters that are likely to be visually confusing - 
- * for cases where the displayed form of an identifier may
- * not be what it appears to be.
- *
- * Unicode Technical Report #36, http://unicode.org/reports/tr36, and
- * Unicode Technical Standard #39, http://unicode.org/reports/tr39
- * "Unicode security considerations", give more background on 
- * security an spoofing issues with Unicode identifiers.
- * The tests and checks provided by this module implement the recommendations
- * from those Unicode documents.
- *
- * The tests available on identifiers fall into two general categories:
- *   -#  Single identifier tests.  Check whether an identifier is
- *       potentially confusable with any other string, or is suspicious
- *       for other reasons.
- *   -#  Two identifier tests.  Check whether two specific identifiers are confusable.
- *       This does not consider whether either of strings is potentially
- *       confusable with any string other than the exact one specified.
- *
- * The steps to perform confusability testing are
- *   -#  Open a USpoofChecker.
- *   -#  Configure the USPoofChecker for the desired set of tests.  The tests that will
- *       be performed are specified by a set of USpoofChecks flags.
- *   -#  Perform the checks using the pre-configured USpoofChecker.  The results indicate
- *       which (if any) of the selected tests have identified possible problems with the identifier.
- *       Results are reported as a set of USpoofChecks flags;  this mirrors the form in which
- *       the set of tests to perform was originally specified to the USpoofChecker.
- *
- * A USpoofChecker may be used repeatedly to perform checks on any number of identifiers.
- *
- * Thread Safety: The test functions for checking a single identifier, or for testing 
- * whether two identifiers are possible confusable, are thread safe.  
- * They may called concurrently, from multiple threads, using the same USpoofChecker instance.
- *
- * More generally, the standard ICU thread safety rules apply:  functions that take a
- * const USpoofChecker parameter are thread safe.  Those that take a non-const 
- * USpoofChecier are not thread safe.
- *
- *
- * Descriptions of the available checks.
- *
- * When testing whether pairs of identifiers are confusable, with the uspoof_areConfusable()
- * family of functions, the relevant tests are
- *
- *   -# USPOOF_SINGLE_SCRIPT_CONFUSABLE:  All of the characters from the two identifiers are
- *      from a single script, and the two identifiers are visually confusable.
- *   -# USPOOF_MIXED_SCRIPT_CONFUSABLE:  At least one of the identifiers contains characters
- *      from more than one script, and the two identifiers are visually confusable.
- *   -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: Each of the two identifiers is of a single script, but
- *      the two identifiers are from different scripts, and they are visually confusable.
- *
- * The safest approach is to enable all three of these checks as a group.
- *
- * USPOOF_ANY_CASE is a modifier for the above tests.  If the identifiers being checked can
- * be of mixed case and are used in a case-sensitive manner, this option should be specified.
- *
- * If the identifiers being checked are used in a case-insensitive manner, and if they are
- * displayed to users in lower-case form only, the USPOOF_ANY_CASE option should not be
- * specified.  Confusabality issues involving upper case letters will not be reported.
- *
- * When performing tests on a single identifier, with the uspoof_check() family of functions,
- * the relevant tests are:
- *
- *    -# USPOOF_MIXED_SCRIPT_CONFUSABLE: the identifier contains characters from multiple
- *       scripts, and there exists an identifier of a single script that is visually confusable.
- *    -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: the identifier consists of characters from a single
- *       script, and there exists a visually confusable identifier.
- *       The visually confusable identifier also consists of characters from a single script.
- *       but not the same script as the identifier being checked.
- *    -# USPOOF_ANY_CASE: modifies the mixed script and whole script confusables tests.  If
- *       specified, the checks will consider confusable characters of any case.  If this flag is not
- *       set, the test is performed assuming case folded identifiers.
- *    -# USPOOF_SINGLE_SCRIPT: check that the identifier contains only characters from a
- *       single script.  (Characters from the 'common' and 'inherited' scripts are ignored.)
- *       This is not a test for confusable identifiers
- *    -# USPOOF_INVISIBLE: check an identifier for the presence of invisible characters,
- *       such as zero-width spaces, or character sequences that are
- *       likely not to display, such as multiple occurrences of the same
- *       non-spacing mark.  This check does not test the input string as a whole
- *       for conformance to any particular syntax for identifiers.
- *    -# USPOOF_CHAR_LIMIT: check that an identifier contains only characters from a specified set
- *       of acceptable characters.  See uspoof_setAllowedChars() and
- *       uspoof_setAllowedLocales().
- *
- *  Note on Scripts:
- *     Characters from the Unicode Scripts "Common" and "Inherited" are ignored when considering
- *     the script of an identifier. Common characters include digits and symbols that
- *     are normally used with text from more than one script.
- *
- *  Identifier Skeletons:  A skeleton is a transformation of an identifier, such that
- *  all identifiers that are confusable with each other have the same skeleton.
- *  Using skeletons, it is possible to build a dictionary data structure for
- *  a set of identifiers, and then quickly test whether a new identifier is
- *  confusable with an identifier already in the set.  The uspoof_getSkeleton()
- *  family of functions will produce the skeleton from an identifier.
- *
- *  Note that skeletons are not guaranteed to be stable between versions 
- *  of Unicode or ICU, so an applications should not rely on creating a permanent,
- *  or difficult to update, database of skeletons.  Instabilities result from
- *  identifying new pairs or sequences of characters that are visually
- *  confusable, and thus must be mapped to the same skeleton character(s).
- *
- */
-
-struct USpoofChecker;
-typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker */
-
-/**
- * Enum for the kinds of checks that USpoofChecker can perform.
- * These enum values are used both to select the set of checks that
- * will be performed, and to report results from the check function.
- *
- * @stable ICU 4.2
- */
-typedef enum USpoofChecks {
-    /**   Single script confusable test.
-      *   When testing whether two identifiers are confusable, report that they are if
-      *   both are from the same script and they are visually confusable.
-      *   Note: this test is not applicable to a check of a single identifier.
-      */
-    USPOOF_SINGLE_SCRIPT_CONFUSABLE =   1,
-
-    /** Mixed script confusable test.
-     *  When checking a single identifier, report a problem if
-     *    the identifier contains multiple scripts, and
-     *    is confusable with some other identifier in a single script
-     *  When testing whether two identifiers are confusable, report that they are if
-     *    the two IDs are visually confusable, 
-     *    and at least one contains characters from more than one script.
-     */
-    USPOOF_MIXED_SCRIPT_CONFUSABLE  =   2,
-
-    /** Whole script confusable test.
-     *  When checking a single identifier, report a problem if
-     *    The identifier is of a single script, and
-     *    there exists a confusable identifier in another script.
-     *  When testing whether two identifiers are confusable, report that they are if
-     *    each is of a single script, 
-     *    the scripts of the two identifiers are different, and
-     *    the identifiers are visually confusable.
-     */
-    USPOOF_WHOLE_SCRIPT_CONFUSABLE  =   4,
-    
-    /** Any Case Modifier for confusable identifier tests.
-        If specified, consider all characters, of any case, when looking for confusables.
-        If USPOOF_ANY_CASE is not specified, identifiers being checked are assumed to have been
-        case folded.  Upper case confusable characters will not be checked.
-        Selects between Lower Case Confusable and
-        Any Case Confusable.   */
-    USPOOF_ANY_CASE                 =   8,
-
-    /** Check that an identifier contains only characters from a
-      * single script (plus chars from the common and inherited scripts.)
-      * Applies to checks of a single identifier check only.
-      */
-    USPOOF_SINGLE_SCRIPT            =  16,
-    
-    /** Check an identifier for the presence of invisible characters,
-      * such as zero-width spaces, or character sequences that are
-      * likely not to display, such as multiple occurrences of the same
-      * non-spacing mark.  This check does not test the input string as a whole
-      * for conformance to any particular syntax for identifiers.
-      */
-    USPOOF_INVISIBLE                =  32,
-
-    /** Check that an identifier contains only characters from a specified set
-      * of acceptable characters.  See uspoof_setAllowedChars() and
-      * uspoof_setAllowedLocales().
-      */
-    USPOOF_CHAR_LIMIT               =  64,
-
-    USPOOF_ALL_CHECKS               = 0x7f
-    } USpoofChecks;
-    
-    
-/**
- *  Create a Unicode Spoof Checker, configured to perform all 
- *  checks except for USPOOF_LOCALE_LIMIT and USPOOF_CHAR_LIMIT.
- *  Note that additional checks may be added in the future,
- *  resulting in the changes to the default checking behavior.
- *
- *  @param status  The error code, set if this function encounters a problem.
- *  @return        the newly created Spoof Checker
- *  @stable ICU 4.2
- */
-U_STABLE USpoofChecker * U_EXPORT2
-uspoof_open(UErrorCode *status);
-
-
-/**
- * Open a Spoof checker from its serialized from, stored in 32-bit-aligned memory.
- * Inverse of uspoof_serialize().
- * The memory containing the serialized data must remain valid and unchanged
- * as long as the spoof checker, or any cloned copies of the spoof checker,
- * are in use.  Ownership of the memory remains with the caller.
- * The spoof checker (and any clones) must be closed prior to deleting the
- * serialized data.
- *
- * @param data a pointer to 32-bit-aligned memory containing the serialized form of spoof data
- * @param length the number of bytes available at data;
- *               can be more than necessary
- * @param pActualLength receives the actual number of bytes at data taken up by the data;
- *                      can be NULL
- * @param pErrorCode ICU error code
- * @return the spoof checker.
- *
- * @see uspoof_open
- * @see uspoof_serialize
- * @stable ICU 4.2
- */
-U_STABLE USpoofChecker * U_EXPORT2
-uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLength,
-                          UErrorCode *pErrorCode);
-
-/**
-  * Open a Spoof Checker from the source form of the spoof data.
-  * The Three inputs correspond to the Unicode data files confusables.txt
-  * confusablesWholeScript.txt and xidmdifications.txt as described in
-  * Unicode UAX 39.  The syntax of the source data is as described in UAX 39 for
-  * these files, and the content of these files is acceptable input.
-  *
-  * The character encoding of the (char *) input text is UTF-8.
-  *
-  * @param confusables a pointer to the confusable characters definitions,
-  *                    as found in file confusables.txt from unicode.org.
-  * @param confusablesLen The length of the confusables text, or -1 if the
-  *                    input string is zero terminated.
-  * @param confusablesWholeScript
-  *                    a pointer to the whole script confusables definitions,
-  *                    as found in the file confusablesWholeScript.txt from unicode.org.
-  * @param confusablesWholeScriptLen The length of the whole script confusables text, or
-  *                    -1 if the input string is zero terminated.
-  * @param errType     In the event of an error in the input, indicates
-  *                    which of the input files contains the error.
-  *                    The value is one of USPOOF_SINGLE_SCRIPT_CONFUSABLE or
-  *                    USPOOF_WHOLE_SCRIPT_CONFUSABLE, or
-  *                    zero if no errors are found.
-  * @param pe          In the event of an error in the input, receives the position
-  *                    in the input text (line, offset) of the error.
-  * @param status      an in/out ICU UErrorCode.  Among the possible errors is
-  *                    U_PARSE_ERROR, which is used to report syntax errors
-  *                    in the input.
-  * @return            A spoof checker that uses the rules from the input files.
-  * @stable ICU 4.2
-  */
-U_STABLE USpoofChecker * U_EXPORT2
-uspoof_openFromSource(const char *confusables,  int32_t confusablesLen,
-                      const char *confusablesWholeScript, int32_t confusablesWholeScriptLen,
-                      int32_t *errType, UParseError *pe, UErrorCode *status);
-
-
-/**
-  * Close a Spoof Checker, freeing any memory that was being held by
-  *   its implementation.
-  * @stable ICU 4.2
-  */
-U_STABLE void U_EXPORT2
-uspoof_close(USpoofChecker *sc);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUSpoofCheckerPointer
- * "Smart pointer" class, closes a USpoofChecker via uspoof_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckerPointer, USpoofChecker, uspoof_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Clone a Spoof Checker.  The clone will be set to perform the same checks
- *   as the original source.
- *
- * @param sc       The source USpoofChecker
- * @param status   The error code, set if this function encounters a problem.
- * @return
- * @stable ICU 4.2
- */
-U_STABLE USpoofChecker * U_EXPORT2
-uspoof_clone(const USpoofChecker *sc, UErrorCode *status);
-
-
-/**
- * Specify the set of checks that will be performed by the check
- * functions of this Spoof Checker.
- *
- * @param sc       The USpoofChecker
- * @param checks         The set of checks that this spoof checker will perform.
- *                 The value is a bit set, obtained by OR-ing together
- *                 values from enum USpoofChecks.
- * @param status   The error code, set if this function encounters a problem.
- * @stable ICU 4.2
- *
- */
-U_STABLE void U_EXPORT2
-uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status);
-
-/**
- * Get the set of checks that this Spoof Checker has been configured to perform.
- * 
- * @param sc       The USpoofChecker
- * @param status   The error code, set if this function encounters a problem.
- * @return         The set of checks that this spoof checker will perform.
- *                 The value is a bit set, obtained by OR-ing together
- *                 values from enum USpoofChecks.
- * @stable ICU 4.2
- *
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status);
-
-/**
- * Limit characters that are acceptable in identifiers being checked to those 
- * normally used with the languages associated with the specified locales.
- * Any previously specified list of locales is replaced by the new settings.
- *
- * A set of languages is determined from the locale(s), and
- * from those a set of acceptable Unicode scripts is determined.
- * Characters from this set of scripts, along with characters from
- * the "common" and "inherited" Unicode Script categories
- * will be permitted.
- *
- * Supplying an empty string removes all restrictions;
- * characters from any script will be allowed.
- *
- * The USPOOF_CHAR_LIMIT test is automatically enabled for this
- * USpoofChecker when calling this function with a non-empty list
- * of locales.
- *
- * The Unicode Set of characters that will be allowed is accessible
- * via the uspoof_getAllowedChars() function.  uspoof_setAllowedLocales()
- * will <i>replace</i> any previously applied set of allowed characters.
- *
- * Adjustments, such as additions or deletions of certain classes of characters,
- * can be made to the result of uspoof_setAllowedLocales() by
- * fetching the resulting set with uspoof_getAllowedChars(),
- * manipulating it with the Unicode Set API, then resetting the
- * spoof detectors limits with uspoof_setAllowedChars()
- *
- * @param sc           The USpoofChecker 
- * @param localesList  A list list of locales, from which the language
- *                     and associated script are extracted.  The locales
- *                     are comma-separated if there is more than one.
- *                     White space may not appear within an individual locale,
- *                     but is ignored otherwise.
- *                     The locales are syntactically like those from the
- *                     HTTP Accept-Language header.
- *                     If the localesList is empty, no restrictions will be placed on
- *                     the allowed characters.
- *
- * @param status       The error code, set if this function encounters a problem.
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-uspoof_setAllowedLocales(USpoofChecker *sc, const char *localesList, UErrorCode *status);
-
-/**
- * Get a list of locales for the scripts that are acceptable in strings
- *  to be checked.  If no limitations on scripts have been specified,
- *  an empty string will be returned.
- *
- *  uspoof_setAllowedChars() will reset the list of allowed to be empty.
- *
- *  The format of the returned list is the same as that supplied to 
- *  uspoof_setAllowedLocales(), but returned list may not be identical 
- *  to the originally specified string; the string may be reformatted, 
- *  and information other than languages from
- *  the originally specified locales may be omitted.
- *
- * @param sc           The USpoofChecker 
- * @param status       The error code, set if this function encounters a problem.
- * @return             A string containing a list of  locales corresponding
- *                     to the acceptable scripts, formatted like an
- *                     HTTP Accept Language value.
- *  
- * @stable ICU 4.2
- */
-U_STABLE const char * U_EXPORT2
-uspoof_getAllowedLocales(USpoofChecker *sc, UErrorCode *status);
-
-
-/**
- * Limit the acceptable characters to those specified by a Unicode Set.
- *   Any previously specified character limit is
- *   is replaced by the new settings.  This includes limits on
- *   characters that were set with the uspoof_setAllowedLocales() function.
- *
- * The USPOOF_CHAR_LIMIT test is automatically enabled for this
- * USpoofChecker by this function.
- *
- * @param sc       The USpoofChecker 
- * @param chars    A Unicode Set containing the list of
- *                 characters that are permitted.  Ownership of the set
- *                 remains with the caller.  The incoming set is cloned by
- *                 this function, so there are no restrictions on modifying
- *                 or deleting the USet after calling this function.
- * @param status   The error code, set if this function encounters a problem.
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-uspoof_setAllowedChars(USpoofChecker *sc, const USet *chars, UErrorCode *status);
-
-
-/**
- * Get a USet for the characters permitted in an identifier.
- * This corresponds to the limits imposed by the Set Allowed Characters
- * functions. Limitations imposed by other checks will not be
- * reflected in the set returned by this function.
- *
- * The returned set will be frozen, meaning that it cannot be modified
- * by the caller.
- *
- * Ownership of the returned set remains with the Spoof Detector.  The
- * returned set will become invalid if the spoof detector is closed,
- * or if a new set of allowed characters is specified.
- *
- *
- * @param sc       The USpoofChecker 
- * @param status   The error code, set if this function encounters a problem.
- * @return         A USet containing the characters that are permitted by
- *                 the USPOOF_CHAR_LIMIT test.
- * @stable ICU 4.2
- */
-U_STABLE const USet * U_EXPORT2
-uspoof_getAllowedChars(const USpoofChecker *sc, UErrorCode *status);
-
-
-#if U_SHOW_CPLUSPLUS_API
-/**
- * Limit the acceptable characters to those specified by a Unicode Set.
- *   Any previously specified character limit is
- *   is replaced by the new settings.    This includes limits on
- *   characters that were set with the uspoof_setAllowedLocales() function.
- *
- * The USPOOF_CHAR_LIMIT test is automatically enabled for this
- * USoofChecker by this function.
- *
- * @param sc       The USpoofChecker 
- * @param chars    A Unicode Set containing the list of
- *                 characters that are permitted.  Ownership of the set
- *                 remains with the caller.  The incoming set is cloned by
- *                 this function, so there are no restrictions on modifying
- *                 or deleting the USet after calling this function.
- * @param status   The error code, set if this function encounters a problem.
- * @stable ICU 4.2
- */
-U_STABLE void U_EXPORT2
-uspoof_setAllowedUnicodeSet(USpoofChecker *sc, const UnicodeSet *chars, UErrorCode *status);
-
-
-/**
- * Get a UnicodeSet for the characters permitted in an identifier.
- * This corresponds to the limits imposed by the Set Allowed Characters / 
- * UnicodeSet functions. Limitations imposed by other checks will not be
- * reflected in the set returned by this function.
- *
- * The returned set will be frozen, meaning that it cannot be modified
- * by the caller.
- *
- * Ownership of the returned set remains with the Spoof Detector.  The
- * returned set will become invalid if the spoof detector is closed,
- * or if a new set of allowed characters is specified.
- *
- *
- * @param sc       The USpoofChecker 
- * @param status   The error code, set if this function encounters a problem.
- * @return         A UnicodeSet containing the characters that are permitted by
- *                 the USPOOF_CHAR_LIMIT test.
- * @stable ICU 4.2
- */
-U_STABLE const UnicodeSet * U_EXPORT2
-uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status);
-#endif
-
-
-/**
- * Check the specified string for possible security issues.
- * The text to be checked will typically be an identifier of some sort.
- * The set of checks to be performed is specified with uspoof_setChecks().
- * 
- * @param sc      The USpoofChecker 
- * @param text    The string to be checked for possible security issues,
- *                in UTF-16 format.
- * @param length  the length of the string to be checked, expressed in
- *                16 bit UTF-16 code units, or -1 if the string is 
- *                zero terminated.
- * @param position      An out parameter that receives the index of the
- *                first string position that fails the allowed character
- *                limitation checks.
- *                This parameter may be null if the position information
- *                is not needed.
- *                If the string passes the requested checks the
- *                parameter value will not be set.
- * @param status  The error code, set if an error occurred while attempting to
- *                perform the check.
- *                Spoofing or security issues detected with the input string are
- *                not reported here, but through the function's return value.
- * @return        An integer value with bits set for any potential security
- *                or spoofing issues detected.  The bits are defined by
- *                enum USpoofChecks.  Zero is returned if no issues
- *                are found with the input string.
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_check(const USpoofChecker *sc,
-                         const UChar *text, int32_t length, 
-                         int32_t *position,
-                         UErrorCode *status);
-
-
-/**
- * Check the specified string for possible security issues.
- * The text to be checked will typically be an identifier of some sort.
- * The set of checks to be performed is specified with uspoof_setChecks().
- * 
- * @param sc      The USpoofChecker 
- * @param text    A UTF-8 string to be checked for possible security issues.
- * @param length  the length of the string to be checked, or -1 if the string is 
- *                zero terminated.
- * @param position      An out parameter that receives the index of the
- *                first string position that fails the allowed character
- *                limitation checks.
- *                This parameter may be null if the position information
- *                is not needed.
- *                If the string passes the requested checks the
- *                parameter value will not be set.
- * @param status  The error code, set if an error occurred while attempting to
- *                perform the check.
- *                Spoofing or security issues detected with the input string are
- *                not reported here, but through the function's return value.
- *                If the input contains invalid UTF-8 sequences,
- *                a status of U_INVALID_CHAR_FOUND will be returned.
- * @return        An integer value with bits set for any potential security
- *                or spoofing issues detected.  The bits are defined by
- *                enum USpoofChecks.  Zero is returned if no issues
- *                are found with the input string.
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_checkUTF8(const USpoofChecker *sc,
-                 const char *text, int32_t length,
-                 int32_t *position,
-                 UErrorCode *status);
-
-
-#if U_SHOW_CPLUSPLUS_API
-/**
- * Check the specified string for possible security issues.
- * The text to be checked will typically be an identifier of some sort.
- * The set of checks to be performed is specified with uspoof_setChecks().
- * 
- * @param sc      The USpoofChecker 
- * @param text    A UnicodeString to be checked for possible security issues.
- * @position      An out parameter that receives the index of the
- *                first string position that fails the allowed character
- *                limitation checks.
- *                This parameter may be null if the position information
- *                is not needed.
- *                If the string passes the requested checks the
- *                parameter value will not be set.
- * @param status  The error code, set if an error occurred while attempting to
- *                perform the check.
- *                Spoofing or security issues detected with the input string are
- *                not reported here, but through the function's return value.
-
- * @return        An integer value with bits set for any potential security
- *                or spoofing issues detected.  The bits are defined by
- *                enum USpoofChecks.  Zero is returned if no issues
- *                are found with the input string.
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_checkUnicodeString(const USpoofChecker *sc,
-                          const U_NAMESPACE_QUALIFIER UnicodeString &text, 
-                          int32_t *position,
-                          UErrorCode *status);
-
-#endif
-
-
-/**
- * Check the whether two specified strings are visually confusable.
- * The types of confusability to be tested - single script, mixed script,
- * or whole script - are determined by the check options set for the
- * USpoofChecker.
- *
- * The tests to be performed are controlled by the flags
- *   USPOOF_SINGLE_SCRIPT_CONFUSABLE 
- *   USPOOF_MIXED_SCRIPT_CONFUSABLE  
- *   USPOOF_WHOLE_SCRIPT_CONFUSABLE
- * At least one of these tests must be selected.
- * 
- * USPOOF_ANY_CASE is a modifier for the tests.  Select it if the identifiers
- *   may be of mixed case.
- * If identifiers are case folded for comparison and
- * display to the user, do not select the USPOOF_ANY_CASE option.
- *
- *
- * @param sc      The USpoofChecker
- * @param s1      The first of the two strings to be compared for 
- *                confusability.  The strings are in UTF-16 format.
- * @param length1 the length of the first string, expressed in
- *                16 bit UTF-16 code units, or -1 if the string is 
- *                zero terminated.
- * @param s2      The second of the two strings to be compared for 
- *                confusability.  The strings are in UTF-16 format.
- * @param length2 The length of the second string, expressed in
- *                16 bit UTF-16 code units, or -1 if the string is 
- *                zero terminated.
- * @param status  The error code, set if an error occurred while attempting to
- *                perform the check.
- *                Confusability of the strings is not reported here,
- *                but through this function's return value.
- * @return        An integer value with bit(s) set corresponding to
- *                the type of confusability found, as defined by
- *                enum USpoofChecks.  Zero is returned if the strings
- *                are not confusable.
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_areConfusable(const USpoofChecker *sc,
-                     const UChar *s1, int32_t length1,
-                     const UChar *s2, int32_t length2,
-                     UErrorCode *status);
-
-
-
-/**
- * Check the whether two specified strings are visually confusable.
- * The types of confusability to be tested - single script, mixed script,
- * or whole script - are determined by the check options set for the
- * USpoofChecker.
- *
- * @param sc      The USpoofChecker
- * @param s1      The first of the two strings to be compared for 
- *                confusability.  The strings are in UTF-8 format.
- * @param length1 the length of the first string, in bytes, or -1 
- *                if the string is zero terminated.
- * @param s2      The second of the two strings to be compared for 
- *                confusability.  The strings are in UTF-18 format.
- * @param length2 The length of the second string in bytes, or -1 
- *                if the string is zero terminated.
- * @param status  The error code, set if an error occurred while attempting to
- *                perform the check.
- *                Confusability of the strings is not reported here,
- *                but through this function's return value.
- * @return        An integer value with bit(s) set corresponding to
- *                the type of confusability found, as defined by
- *                enum USpoofChecks.  Zero is returned if the strings
- *                are not confusable.
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_areConfusableUTF8(const USpoofChecker *sc,
-                         const char *s1, int32_t length1,
-                         const char *s2, int32_t length2,
-                         UErrorCode *status);
-
-
-
-
-#if U_SHOW_CPLUSPLUS_API
-/**
- * Check the whether two specified strings are visually confusable.
- * The types of confusability to be tested - single script, mixed script,
- * or whole script - are determined by the check options set for the
- * USpoofChecker.
- *
- * @param sc      The USpoofChecker
- * @param s1      The first of the two strings to be compared for 
- *                confusability.  The strings are in UTF-8 format.
- * @param s2      The second of the two strings to be compared for 
- *                confusability.  The strings are in UTF-18 format.
- * @param status  The error code, set if an error occurred while attempting to
- *                perform the check.
- *                Confusability of the strings is not reported here,
- *                but through this function's return value.
- * @return        An integer value with bit(s) set corresponding to
- *                the type of confusability found, as defined by
- *                enum USpoofChecks.  Zero is returned if the strings
- *                are not confusable.
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_areConfusableUnicodeString(const USpoofChecker *sc,
-                                  const U_NAMESPACE_QUALIFIER UnicodeString &s1,
-                                  const U_NAMESPACE_QUALIFIER UnicodeString &s2,
-                                  UErrorCode *status);
-#endif
-
-
-/**
-  *  Get the "skeleton" for an identifier string.
-  *  Skeletons are a transformation of the input string;
-  *  Two strings are confusable if their skeletons are identical.
-  *  See Unicode UAX 39 for additional information.
-  *
-  *  Using skeletons directly makes it possible to quickly check
-  *  whether an identifier is confusable with any of some large
-  *  set of existing identifiers, by creating an efficiently
-  *  searchable collection of the skeletons.
-  *
-  * @param sc      The USpoofChecker
-  * @param type    The type of skeleton, corresponding to which
-  *                of the Unicode confusable data tables to use.
-  *                The default is Mixed-Script, Lowercase.
-  *                Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and
-  *                USPOOF_ANY_CASE_CONFUSABLE.  The two flags may be ORed.
-  * @param s       The input string whose skeleton will be computed.
-  * @param length  The length of the input string, expressed in 16 bit
-  *                UTF-16 code units, or -1 if the string is zero terminated.
-  * @param dest    The output buffer, to receive the skeleton string.
-  * @param destCapacity  The length of the output buffer, in 16 bit units.
-  *                The destCapacity may be zero, in which case the function will
-  *                return the actual length of the skeleton.
-  * @param status  The error code, set if an error occurred while attempting to
-  *                perform the check.
-  * @return        The length of the skeleton string.  The returned length
-  *                is always that of the complete skeleton, even when the
-  *                supplied buffer is too small (or of zero length)
-  *                
-  * @stable ICU 4.2
-  */
-U_STABLE int32_t U_EXPORT2
-uspoof_getSkeleton(const USpoofChecker *sc,
-                   uint32_t type,
-                   const UChar *s,  int32_t length,
-                   UChar *dest, int32_t destCapacity,
-                   UErrorCode *status);
-    
-/**
-  *  Get the "skeleton" for an identifier string.
-  *  Skeletons are a transformation of the input string;
-  *  Two strings are confusable if their skeletons are identical.
-  *  See Unicode UAX 39 for additional information.
-  *
-  *  Using skeletons directly makes it possible to quickly check
-  *  whether an identifier is confusable with any of some large
-  *  set of existing identifiers, by creating an efficiently
-  *  searchable collection of the skeletons.
-  *
-  * @param sc      The USpoofChecker 
-  * @param type    The type of skeleton, corresponding to which
-  *                of the Unicode confusable data tables to use.
-  *                The default is Mixed-Script, Lowercase.
-  *                Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and
-  *                USPOOF_ANY_CASE.  The two flags may be ORed.
-  * @param s       The UTF-8 format input string whose skeleton will be computed.
-  * @param length  The length of the input string, in bytes,
-  *                or -1 if the string is zero terminated.
-  * @param dest    The output buffer, to receive the skeleton string.
-  * @param destCapacity  The length of the output buffer, in bytes.
-  *                The destCapacity may be zero, in which case the function will
-  *                return the actual length of the skeleton.
-  * @param status  The error code, set if an error occurred while attempting to
-  *                perform the check.  Possible Errors include U_INVALID_CHAR_FOUND
-  *                   for invalid UTF-8 sequences, and
-  *                   U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small
-  *                   to hold the complete skeleton.
-  * @return        The length of the skeleton string, in bytes.  The returned length
-  *                is always that of the complete skeleton, even when the
-  *                supplied buffer is too small (or of zero length)
-  *                
-  * @stable ICU 4.2
-  */   
-U_STABLE int32_t U_EXPORT2
-uspoof_getSkeletonUTF8(const USpoofChecker *sc,
-                       uint32_t type,
-                       const char *s,  int32_t length,
-                       char *dest, int32_t destCapacity,
-                       UErrorCode *status);
-    
-#if U_SHOW_CPLUSPLUS_API
-/**
-  *  Get the "skeleton" for an identifier string.
-  *  Skeletons are a transformation of the input string;
-  *  Two strings are confusable if their skeletons are identical.
-  *  See Unicode UAX 39 for additional information.
-  *
-  *  Using skeletons directly makes it possible to quickly check
-  *  whether an identifier is confusable with any of some large
-  *  set of existing identifiers, by creating an efficiently
-  *  searchable collection of the skeletons.
-  *
-  * @param sc      The USpoofChecker.
-  * @param type    The type of skeleton, corresponding to which
-  *                of the Unicode confusable data tables to use.
-  *                The default is Mixed-Script, Lowercase.
-  *                Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and
-  *                USPOOF_ANY_CASE_CONFUSABLE.  The two flags may be ORed.
-  * @param s       The input string whose skeleton will be computed.
-  * @param dest    The output string, to receive the skeleton string.
-  * @param destCapacity  The length of the output buffer, in bytes.
-  *                The destCapacity may be zero, in which case the function will
-  *                return the actual length of the skeleton.
-  * @param status  The error code, set if an error occurred while attempting to
-  *                perform the check.
-  * @return        A reference to the destination (skeleton) string.
-  *                
-  * @stable ICU 4.2
-  */   
-U_STABLE UnicodeString & U_EXPORT2
-uspoof_getSkeletonUnicodeString(const USpoofChecker *sc,
-                                uint32_t type,
-                                const UnicodeString &s,
-                                UnicodeString &dest,
-                                UErrorCode *status);
-#endif   /* U_SHOW_CPLUSPLUS_API */
-
-
-/**
- * Serialize the data for a spoof detector into a chunk of memory.
- * The flattened spoof detection tables can later be used to efficiently
- * instantiate a new Spoof Detector.
- *
- * @param sc   the Spoof Detector whose data is to be serialized.
- * @param data a pointer to 32-bit-aligned memory to be filled with the data,
- *             can be NULL if capacity==0
- * @param capacity the number of bytes available at data,
- *                 or 0 for preflighting
- * @param status an in/out ICU UErrorCode; possible errors include:
- * - U_BUFFER_OVERFLOW_ERROR if the data storage block is too small for serialization
- * - U_ILLEGAL_ARGUMENT_ERROR  the data or capacity parameters are bad
- * @return the number of bytes written or needed for the spoof data
- *
- * @see utrie2_openFromSerialized()
- * @stable ICU 4.2
- */
-U_STABLE int32_t U_EXPORT2
-uspoof_serialize(USpoofChecker *sc,
-                 void *data, int32_t capacity,
-                 UErrorCode *status);
-
-
-#endif
-
-#endif   /* USPOOF_H */
diff --git a/source/i18n/unicode/utmscale.h b/source/i18n/unicode/utmscale.h
deleted file mode 100644
index 472d776..0000000
--- a/source/i18n/unicode/utmscale.h
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2004 - 2008, International Business Machines Corporation and
-* others. All Rights Reserved.
-*******************************************************************************
-*/
-
-#ifndef UTMSCALE_H
-#define UTMSCALE_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-/** 
- * \file
- * \brief C API: Universal Time Scale
- *
- * There are quite a few different conventions for binary datetime, depending on different
- * platforms and protocols. Some of these have severe drawbacks. For example, people using
- * Unix time (seconds since Jan 1, 1970) think that they are safe until near the year 2038.
- * But cases can and do arise where arithmetic manipulations causes serious problems. Consider
- * the computation of the average of two datetimes, for example: if one calculates them with
- * <code>averageTime = (time1 + time2)/2</code>, there will be overflow even with dates
- * around the present. Moreover, even if these problems don't occur, there is the issue of
- * conversion back and forth between different systems.
- *
- * <p>
- * Binary datetimes differ in a number of ways: the datatype, the unit,
- * and the epoch (origin). We'll refer to these as time scales. For example:
- *
- * <table border="1" cellspacing="0" cellpadding="4">
- *  <caption>Table 1: Binary Time Scales</caption>
- *  <tr>
- *    <th align="left">Source</th>
- *    <th align="left">Datatype</th>
- *    <th align="left">Unit</th>
- *    <th align="left">Epoch</th>
- *  </tr>
- *
- *  <tr>
- *    <td>UDTS_JAVA_TIME</td>
- *    <td>int64_t</td>
- *    <td>milliseconds</td>
- *    <td>Jan 1, 1970</td>
- *  </tr>
- *  <tr>
- *
- *    <td>UDTS_UNIX_TIME</td>
- *    <td>int32_t or int64_t</td>
- *    <td>seconds</td>
- *    <td>Jan 1, 1970</td>
- *  </tr>
- *  <tr>
- *    <td>UDTS_ICU4C_TIME</td>
- *
- *    <td>double</td>
- *    <td>milliseconds</td>
- *    <td>Jan 1, 1970</td>
- *  </tr>
- *  <tr>
- *    <td>UDTS_WINDOWS_FILE_TIME</td>
- *    <td>int64_t</td>
- *
- *    <td>ticks (100 nanoseconds)</td>
- *    <td>Jan 1, 1601</td>
- *  </tr>
- *  <tr>
- *    <td>UDTS_DOTNET_DATE_TIME</td>
- *    <td>int64_t</td>
- *    <td>ticks (100 nanoseconds)</td>
- *
- *    <td>Jan 1, 0001</td>
- *  </tr>
- *  <tr>
- *    <td>UDTS_MAC_OLD_TIME</td>
- *    <td>int32_t or int64_t</td>
- *    <td>seconds</td>
- *    <td>Jan 1, 1904</td>
- *
- *  </tr>
- *  <tr>
- *    <td>UDTS_MAC_TIME</td>
- *    <td>double</td>
- *    <td>seconds</td>
- *    <td>Jan 1, 2001</td>
- *  </tr>
- *
- *  <tr>
- *    <td>UDTS_EXCEL_TIME</td>
- *    <td>?</td>
- *    <td>days</td>
- *    <td>Dec 31, 1899</td>
- *  </tr>
- *  <tr>
- *
- *    <td>UDTS_DB2_TIME</td>
- *    <td>?</td>
- *    <td>days</td>
- *    <td>Dec 31, 1899</td>
- *  </tr>
- *
- *  <tr>
- *    <td>UDTS_UNIX_MICROSECONDS_TIME</td>
- *    <td>int64_t</td>
- *    <td>microseconds</td>
- *    <td>Jan 1, 1970</td>
- *  </tr>
- * </table>
- *
- * <p>
- * All of the epochs start at 00:00 am (the earliest possible time on the day in question),
- * and are assumed to be UTC.
- *
- * <p>
- * The ranges for different datatypes are given in the following table (all values in years).
- * The range of years includes the entire range expressible with positive and negative
- * values of the datatype. The range of years for double is the range that would be allowed
- * without losing precision to the corresponding unit.
- *
- * <table border="1" cellspacing="0" cellpadding="4">
- *  <tr>
- *    <th align="left">Units</th>
- *    <th align="left">int64_t</th>
- *    <th align="left">double</th>
- *    <th align="left">int32_t</th>
- *  </tr>
- *
- *  <tr>
- *    <td>1 sec</td>
- *    <td align="right">5.84542x10<sup>11</sup></td>
- *    <td align="right">285,420,920.94</td>
- *    <td align="right">136.10</td>
- *  </tr>
- *  <tr>
- *
- *    <td>1 millisecond</td>
- *    <td align="right">584,542,046.09</td>
- *    <td align="right">285,420.92</td>
- *    <td align="right">0.14</td>
- *  </tr>
- *  <tr>
- *    <td>1 microsecond</td>
- *
- *    <td align="right">584,542.05</td>
- *    <td align="right">285.42</td>
- *    <td align="right">0.00</td>
- *  </tr>
- *  <tr>
- *    <td>100 nanoseconds (tick)</td>
- *    <td align="right">58,454.20</td>
- *    <td align="right">28.54</td>
- *    <td align="right">0.00</td>
- *  </tr>
- *  <tr>
- *    <td>1 nanosecond</td>
- *    <td align="right">584.5420461</td>
- *    <td align="right">0.2854</td>
- *    <td align="right">0.00</td>
- *  </tr>
- * </table>
- *
- * <p>
- * These functions implement a universal time scale which can be used as a 'pivot',
- * and provide conversion functions to and from all other major time scales.
- * This datetimes to be converted to the pivot time, safely manipulated,
- * and converted back to any other datetime time scale.
- *
- *<p>
- * So what to use for this pivot? Java time has plenty of range, but cannot represent
- * .NET <code>System.DateTime</code> values without severe loss of precision. ICU4C time addresses this by using a
- * <code>double</code> that is otherwise equivalent to the Java time. However, there are disadvantages
- * with <code>doubles</code>. They provide for much more graceful degradation in arithmetic operations.
- * But they only have 53 bits of accuracy, which means that they will lose precision when
- * converting back and forth to ticks. What would really be nice would be a
- * <code>long double</code> (80 bits -- 64 bit mantissa), but that is not supported on most systems.
- *
- *<p>
- * The Unix extended time uses a structure with two components: time in seconds and a
- * fractional field (microseconds). However, this is clumsy, slow, and
- * prone to error (you always have to keep track of overflow and underflow in the
- * fractional field). <code>BigDecimal</code> would allow for arbitrary precision and arbitrary range,
- * but we do not want to use this as the normal type, because it is slow and does not
- * have a fixed size.
- *
- *<p>
- * Because of these issues, we ended up concluding that the .NET framework's
- * <code>System.DateTime</code> would be the best pivot. However, we use the full range
- * allowed by the datatype, allowing for datetimes back to 29,000 BC and up to 29,000 AD.
- * This time scale is very fine grained, does not lose precision, and covers a range that
- * will meet almost all requirements. It will not handle the range that Java times do,
- * but frankly, being able to handle dates before 29,000 BC or after 29,000 AD is of very limited interest.
- *
- */
-
-/**
- * <code>UDateTimeScale</code> values are used to specify the time scale used for
- * conversion into or out if the universal time scale.
- *
- * @stable ICU 3.2
- */
-typedef enum UDateTimeScale {
-    /**
-     * Used in the JDK. Data is a Java <code>long</code> (<code>int64_t</code>). Value
-     * is milliseconds since January 1, 1970.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_JAVA_TIME = 0,
-
-    /**
-     * Used on Unix systems. Data is <code>int32_t</code> or <code>int64_t</code>. Value
-     * is seconds since January 1, 1970.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_UNIX_TIME,
-    
-    /**
-     * Used in IUC4C. Data is a <code>double</code>. Value
-     * is milliseconds since January 1, 1970.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_ICU4C_TIME,
-    
-    /**
-     * Used in Windows for file times. Data is an <code>int64_t</code>. Value
-     * is ticks (1 tick == 100 nanoseconds) since January 1, 1601.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_WINDOWS_FILE_TIME,
-    
-    /**
-     * Used in the .NET framework's <code>System.DateTime</code> structure. Data is an <code>int64_t</code>. Value
-     * is ticks (1 tick == 100 nanoseconds) since January 1, 0001.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_DOTNET_DATE_TIME,
-    
-    /**
-     * Used in older Macintosh systems. Data is <code>int32_t</code> or <code>int64_t</code>. Value
-     * is seconds since January 1, 1904.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_MAC_OLD_TIME,
-    
-    /**
-     * Used in newer Macintosh systems. Data is a <code>double</code>. Value
-     * is seconds since January 1, 2001.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_MAC_TIME,
-    
-    /**
-     * Used in Excel. Data is an <code>?unknown?</code>. Value
-     * is days since December 31, 1899.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_EXCEL_TIME,
-    
-    /**
-     * Used in DB2. Data is an <code>?unknown?</code>. Value
-     * is days since December 31, 1899.
-     *
-     * @stable ICU 3.2
-     */
-    UDTS_DB2_TIME,
-
-    /**
-     * Data is a <code>long</code>. Value is microseconds since January 1, 1970.
-     * Similar to Unix time (linear value from 1970) and struct timeval
-     * (microseconds resolution).
-     *
-     * @stable ICU 3.8
-     */
-    UDTS_UNIX_MICROSECONDS_TIME,
-
-    /**
-     * The first unused time scale value. The limit of this enum
-     */
-    UDTS_MAX_SCALE
-} UDateTimeScale;
-
-/**
- * <code>UTimeScaleValue</code> values are used to specify the time scale values
- * to <code>utmscale_getTimeScaleValue</code>.
- *
- * @see utmscale_getTimeScaleValue
- *
- * @stable ICU 3.2
- */
-typedef enum UTimeScaleValue {
-    /**
-     * The constant used to select the units vale
-     * for a time scale.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @stable ICU 3.2
-     */
-    UTSV_UNITS_VALUE = 0,
-
-    /**
-     * The constant used to select the epoch offset value
-     * for a time scale.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @stable ICU 3.2
-     */
-    UTSV_EPOCH_OFFSET_VALUE=1,
-
-    /**
-     * The constant used to select the minimum from value
-     * for a time scale.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @stable ICU 3.2
-     */
-    UTSV_FROM_MIN_VALUE=2,
-
-    /**
-     * The constant used to select the maximum from value
-     * for a time scale.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @stable ICU 3.2
-     */
-    UTSV_FROM_MAX_VALUE=3,
-
-    /**
-     * The constant used to select the minimum to value
-     * for a time scale.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @stable ICU 3.2
-     */
-    UTSV_TO_MIN_VALUE=4,
-
-    /**
-     * The constant used to select the maximum to value
-     * for a time scale.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @stable ICU 3.2
-     */
-    UTSV_TO_MAX_VALUE=5,
-
-#ifndef U_HIDE_INTERNAL_API
-    /**
-     * The constant used to select the epoch plus one value
-     * for a time scale.
-     * 
-     * NOTE: This is an internal value. DO NOT USE IT. May not
-     * actually be equal to the epoch offset value plus one.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @internal ICU 3.2
-     */
-    UTSV_EPOCH_OFFSET_PLUS_1_VALUE=6,
-
-    /**
-     * The constant used to select the epoch plus one value
-     * for a time scale.
-     * 
-     * NOTE: This is an internal value. DO NOT USE IT. May not
-     * actually be equal to the epoch offset value plus one.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @internal ICU 3.2
-     */
-    UTSV_EPOCH_OFFSET_MINUS_1_VALUE=7,
-
-    /**
-     * The constant used to select the units round value
-     * for a time scale.
-     * 
-     * NOTE: This is an internal value. DO NOT USE IT.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @internal ICU 3.2
-     */
-    UTSV_UNITS_ROUND_VALUE=8,
-
-    /**
-     * The constant used to select the minimum safe rounding value
-     * for a time scale.
-     * 
-     * NOTE: This is an internal value. DO NOT USE IT.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @internal ICU 3.2
-     */
-    UTSV_MIN_ROUND_VALUE=9,
-
-    /**
-     * The constant used to select the maximum safe rounding value
-     * for a time scale.
-     * 
-     * NOTE: This is an internal value. DO NOT USE IT.
-     * 
-     * @see utmscale_getTimeScaleValue
-     *
-     * @internal ICU 3.2
-     */
-    UTSV_MAX_ROUND_VALUE=10,
-
-#endif /* U_HIDE_INTERNAL_API */
-
-    /**
-     * The number of time scale values, in other words limit of this enum.
-     * 
-     * @see utmscale_getTimeScaleValue
-     */
-    UTSV_MAX_SCALE_VALUE=11
-
-} UTimeScaleValue;
-
-/**
- * Get a value associated with a particular time scale.
- * 
- * @param timeScale The time scale
- * @param value A constant representing the value to get
- * @param status The status code. Set to <code>U_ILLEGAL_ARGUMENT_ERROR</code> if arguments are invalid.
- * @return - the value.
- * 
- * @stable ICU 3.2
- */
-U_STABLE int64_t U_EXPORT2
-    utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status);
-
-/* Conversion to 'universal time scale' */
-
-/**
- * Convert a <code>int64_t</code> datetime from the given time scale to the universal time scale.
- *
- * @param otherTime The <code>int64_t</code> datetime
- * @param timeScale The time scale to convert from
- * @param status The status code. Set to <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the conversion is out of range.
- * 
- * @return The datetime converted to the universal time scale
- *
- * @stable ICU 3.2
- */
-U_STABLE int64_t U_EXPORT2
-    utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status);
-
-/* Conversion from 'universal time scale' */
-
-/**
- * Convert a datetime from the universal time scale to a <code>int64_t</code> in the given time scale.
- *
- * @param universalTime The datetime in the universal time scale
- * @param timeScale The time scale to convert to
- * @param status The status code. Set to <code>U_ILLEGAL_ARGUMENT_ERROR</code> if the conversion is out of range.
- * 
- * @return The datetime converted to the given time scale
- *
- * @stable ICU 3.2
- */
-U_STABLE int64_t U_EXPORT2
-    utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status);
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif
-
diff --git a/source/i18n/unicode/utrans.h b/source/i18n/unicode/utrans.h
deleted file mode 100644
index 5ef035f..0000000
--- a/source/i18n/unicode/utrans.h
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
-*******************************************************************************
-*   Copyright (C) 1997-2010, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*******************************************************************************
-*   Date        Name        Description
-*   06/21/00    aliu        Creation.
-*******************************************************************************
-*/
-
-#ifndef UTRANS_H
-#define UTRANS_H
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_TRANSLITERATION
-
-#include "unicode/localpointer.h"
-#include "unicode/urep.h"
-#include "unicode/parseerr.h"
-#include "unicode/uenum.h"
-
-/********************************************************************
- * General Notes
- ********************************************************************
- */
-/**
- * \file
- * \brief C API: Transliterator
- *
- * <h2> Transliteration </h2>
- * The data structures and functions described in this header provide
- * transliteration services.  Transliteration services are implemented
- * as C++ classes.  The comments and documentation in this header
- * assume the reader is familiar with the C++ headers translit.h and
- * associated documentation.
- *
- * A significant but incomplete subset of the C++ transliteration
- * services are available to C code through this header.  In order to
- * access more complex transliteration services, refer to the C++
- * headers and documentation.
- *
- * There are two sets of functions for working with transliterator IDs:
- *
- * An old, deprecated set uses char * IDs, which works for true and pure
- * identifiers that these APIs were designed for,
- * for example "Cyrillic-Latin".
- * It does not work when the ID contains filters ("[:Script=Cyrl:]")
- * or even a complete set of rules because then the ID string contains more
- * than just "invariant" characters (see utypes.h).
- *
- * A new set of functions replaces the old ones and uses UChar * IDs,
- * paralleling the UnicodeString IDs in the C++ API. (New in ICU 2.8.)
- */
-
-/********************************************************************
- * Data Structures
- ********************************************************************/
-
-/**
- * An opaque transliterator for use in C.  Open with utrans_openxxx()
- * and close with utrans_close() when done.  Equivalent to the C++ class
- * Transliterator and its subclasses.
- * @see Transliterator
- * @stable ICU 2.0
- */
-typedef void* UTransliterator;
-
-/**
- * Direction constant indicating the direction in a transliterator,
- * e.g., the forward or reverse rules of a RuleBasedTransliterator.
- * Specified when a transliterator is opened.  An "A-B" transliterator
- * transliterates A to B when operating in the forward direction, and
- * B to A when operating in the reverse direction.
- * @stable ICU 2.0
- */
-typedef enum UTransDirection {
-    
-    /**
-     * UTRANS_FORWARD means from &lt;source&gt; to &lt;target&gt; for a
-     * transliterator with ID &lt;source&gt;-&lt;target&gt;.  For a transliterator
-     * opened using a rule, it means forward direction rules, e.g.,
-     * "A > B".
-     */
-    UTRANS_FORWARD,
-
-    /**
-     * UTRANS_REVERSE means from &lt;target&gt; to &lt;source&gt; for a
-     * transliterator with ID &lt;source&gt;-&lt;target&gt;.  For a transliterator
-     * opened using a rule, it means reverse direction rules, e.g.,
-     * "A < B".
-     */
-    UTRANS_REVERSE
-
-} UTransDirection;
-
-/**
- * Position structure for utrans_transIncremental() incremental
- * transliteration.  This structure defines two substrings of the text
- * being transliterated.  The first region, [contextStart,
- * contextLimit), defines what characters the transliterator will read
- * as context.  The second region, [start, limit), defines what
- * characters will actually be transliterated.  The second region
- * should be a subset of the first.
- *
- * <p>After a transliteration operation, some of the indices in this
- * structure will be modified.  See the field descriptions for
- * details.
- *
- * <p>contextStart <= start <= limit <= contextLimit
- *
- * <p>Note: All index values in this structure must be at code point
- * boundaries.  That is, none of them may occur between two code units
- * of a surrogate pair.  If any index does split a surrogate pair,
- * results are unspecified.
- *
- * @stable ICU 2.0
- */
-typedef struct UTransPosition {
-
-    /**
-     * Beginning index, inclusive, of the context to be considered for
-     * a transliteration operation.  The transliterator will ignore
-     * anything before this index.  INPUT/OUTPUT parameter: This parameter
-     * is updated by a transliteration operation to reflect the maximum
-     * amount of antecontext needed by a transliterator.
-     * @stable ICU 2.4
-     */
-    int32_t contextStart;
-    
-    /**
-     * Ending index, exclusive, of the context to be considered for a
-     * transliteration operation.  The transliterator will ignore
-     * anything at or after this index.  INPUT/OUTPUT parameter: This
-     * parameter is updated to reflect changes in the length of the
-     * text, but points to the same logical position in the text.
-     * @stable ICU 2.4
-     */
-    int32_t contextLimit;
-    
-    /**
-     * Beginning index, inclusive, of the text to be transliteratd.
-     * INPUT/OUTPUT parameter: This parameter is advanced past
-     * characters that have already been transliterated by a
-     * transliteration operation.
-     * @stable ICU 2.4
-     */
-    int32_t start;
-    
-    /**
-     * Ending index, exclusive, of the text to be transliteratd.
-     * INPUT/OUTPUT parameter: This parameter is updated to reflect
-     * changes in the length of the text, but points to the same
-     * logical position in the text.
-     * @stable ICU 2.4
-     */
-    int32_t limit;
-
-} UTransPosition;
-
-/********************************************************************
- * General API
- ********************************************************************/
-
-/**
- * Open a custom transliterator, given a custom rules string 
- * OR 
- * a system transliterator, given its ID.  
- * Any non-NULL result from this function should later be closed with
- * utrans_close().
- *
- * @param id a valid transliterator ID
- * @param idLength the length of the ID string, or -1 if NUL-terminated
- * @param dir the desired direction
- * @param rules the transliterator rules.  See the C++ header rbt.h for
- *              rules syntax. If NULL then a system transliterator matching
- *              the ID is returned.
- * @param rulesLength the length of the rules, or -1 if the rules
- *                    are NUL-terminated.
- * @param parseError a pointer to a UParseError struct to receive the details
- *                   of any parsing errors. This parameter may be NULL if no
- *                   parsing error details are desired.
- * @param pErrorCode a pointer to the UErrorCode
- * @return a transliterator pointer that may be passed to other
- *         utrans_xxx() functions, or NULL if the open call fails.
- * @stable ICU 2.8
- */
-U_STABLE UTransliterator* U_EXPORT2
-utrans_openU(const UChar *id,
-             int32_t idLength,
-             UTransDirection dir,
-             const UChar *rules,
-             int32_t rulesLength,
-             UParseError *parseError,
-             UErrorCode *pErrorCode);
-
-/**
- * Open an inverse of an existing transliterator.  For this to work,
- * the inverse must be registered with the system.  For example, if
- * the Transliterator "A-B" is opened, and then its inverse is opened,
- * the result is the Transliterator "B-A", if such a transliterator is
- * registered with the system.  Otherwise the result is NULL and a
- * failing UErrorCode is set.  Any non-NULL result from this function
- * should later be closed with utrans_close().
- *
- * @param trans the transliterator to open the inverse of.
- * @param status a pointer to the UErrorCode
- * @return a pointer to a newly-opened transliterator that is the
- * inverse of trans, or NULL if the open call fails.
- * @stable ICU 2.0
- */
-U_STABLE UTransliterator* U_EXPORT2 
-utrans_openInverse(const UTransliterator* trans,
-                   UErrorCode* status);
-
-/**
- * Create a copy of a transliterator.  Any non-NULL result from this
- * function should later be closed with utrans_close().
- *
- * @param trans the transliterator to be copied.
- * @param status a pointer to the UErrorCode
- * @return a transliterator pointer that may be passed to other
- * utrans_xxx() functions, or NULL if the clone call fails.
- * @stable ICU 2.0
- */
-U_STABLE UTransliterator* U_EXPORT2 
-utrans_clone(const UTransliterator* trans,
-             UErrorCode* status);
-
-/**
- * Close a transliterator.  Any non-NULL pointer returned by
- * utrans_openXxx() or utrans_clone() should eventually be closed.
- * @param trans the transliterator to be closed.
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_close(UTransliterator* trans);
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUTransliteratorPointer
- * "Smart pointer" class, closes a UTransliterator via utrans_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUTransliteratorPointer, UTransliterator, utrans_close);
-
-U_NAMESPACE_END
-
-#endif
-
-/**
- * Return the programmatic identifier for this transliterator.
- * If this identifier is passed to utrans_openU(), it will open
- * a transliterator equivalent to this one, if the ID has been
- * registered.
- *
- * @param trans the transliterator to return the ID of.
- * @param resultLength pointer to an output variable receiving the length
- *        of the ID string; can be NULL
- * @return the NUL-terminated ID string. This pointer remains
- * valid until utrans_close() is called on this transliterator.
- *
- * @stable ICU 2.8
- */
-U_STABLE const UChar * U_EXPORT2
-utrans_getUnicodeID(const UTransliterator *trans,
-                    int32_t *resultLength);
-
-/**
- * Register an open transliterator with the system.  When
- * utrans_open() is called with an ID string that is equal to that
- * returned by utrans_getID(adoptedTrans,...), then
- * utrans_clone(adoptedTrans,...) is returned.
- *
- * <p>NOTE: After this call the system owns the adoptedTrans and will
- * close it.  The user must not call utrans_close() on adoptedTrans.
- *
- * @param adoptedTrans a transliterator, typically the result of
- * utrans_openRules(), to be registered with the system.
- * @param status a pointer to the UErrorCode
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_register(UTransliterator* adoptedTrans,
-                UErrorCode* status);
-
-/**
- * Unregister a transliterator from the system.  After this call the
- * system will no longer recognize the given ID when passed to
- * utrans_open(). If the ID is invalid then nothing is done.
- *
- * @param id an ID to unregister
- * @param idLength the length of id, or -1 if id is zero-terminated
- * @stable ICU 2.8
- */
-U_STABLE void U_EXPORT2
-utrans_unregisterID(const UChar* id, int32_t idLength);
-
-/**
- * Set the filter used by a transliterator.  A filter can be used to
- * make the transliterator pass certain characters through untouched.
- * The filter is expressed using a UnicodeSet pattern.  If the
- * filterPattern is NULL or the empty string, then the transliterator
- * will be reset to use no filter.
- *
- * @param trans the transliterator
- * @param filterPattern a pattern string, in the form accepted by
- * UnicodeSet, specifying which characters to apply the
- * transliteration to.  May be NULL or the empty string to indicate no
- * filter.
- * @param filterPatternLen the length of filterPattern, or -1 if
- * filterPattern is zero-terminated
- * @param status a pointer to the UErrorCode
- * @see UnicodeSet
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_setFilter(UTransliterator* trans,
-                 const UChar* filterPattern,
-                 int32_t filterPatternLen,
-                 UErrorCode* status);
-
-/**
- * Return the number of system transliterators.
- * It is recommended to use utrans_openIDs() instead.
- *
- * @return the number of system transliterators.
- * @stable ICU 2.0
- */
-U_STABLE int32_t U_EXPORT2 
-utrans_countAvailableIDs(void);
-
-/**
- * Return a UEnumeration for the available transliterators.
- *
- * @param pErrorCode Pointer to the UErrorCode in/out parameter.
- * @return UEnumeration for the available transliterators.
- *         Close with uenum_close().
- *
- * @stable ICU 2.8
- */
-U_STABLE UEnumeration * U_EXPORT2
-utrans_openIDs(UErrorCode *pErrorCode);
-
-/********************************************************************
- * Transliteration API
- ********************************************************************/
-
-/**
- * Transliterate a segment of a UReplaceable string.  The string is
- * passed in as a UReplaceable pointer rep and a UReplaceableCallbacks
- * function pointer struct repFunc.  Functions in the repFunc struct
- * will be called in order to modify the rep string.
- *
- * @param trans the transliterator
- * @param rep a pointer to the string.  This will be passed to the
- * repFunc functions.
- * @param repFunc a set of function pointers that will be used to
- * modify the string pointed to by rep.
- * @param start the beginning index, inclusive; <code>0 <= start <=
- * limit</code>.
- * @param limit pointer to the ending index, exclusive; <code>start <=
- * limit <= repFunc->length(rep)</code>.  Upon return, *limit will
- * contain the new limit index.  The text previously occupying
- * <code>[start, limit)</code> has been transliterated, possibly to a
- * string of a different length, at <code>[start,
- * </code><em>new-limit</em><code>)</code>, where <em>new-limit</em>
- * is the return value.
- * @param status a pointer to the UErrorCode
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_trans(const UTransliterator* trans,
-             UReplaceable* rep,
-             UReplaceableCallbacks* repFunc,
-             int32_t start,
-             int32_t* limit,
-             UErrorCode* status);
-
-/**
- * Transliterate the portion of the UReplaceable text buffer that can
- * be transliterated unambiguosly.  This method is typically called
- * after new text has been inserted, e.g. as a result of a keyboard
- * event.  The transliterator will try to transliterate characters of
- * <code>rep</code> between <code>index.cursor</code> and
- * <code>index.limit</code>.  Characters before
- * <code>index.cursor</code> will not be changed.
- *
- * <p>Upon return, values in <code>index</code> will be updated.
- * <code>index.start</code> will be advanced to the first
- * character that future calls to this method will read.
- * <code>index.cursor</code> and <code>index.limit</code> will
- * be adjusted to delimit the range of text that future calls to
- * this method may change.
- *
- * <p>Typical usage of this method begins with an initial call
- * with <code>index.start</code> and <code>index.limit</code>
- * set to indicate the portion of <code>text</code> to be
- * transliterated, and <code>index.cursor == index.start</code>.
- * Thereafter, <code>index</code> can be used without
- * modification in future calls, provided that all changes to
- * <code>text</code> are made via this method.
- *
- * <p>This method assumes that future calls may be made that will
- * insert new text into the buffer.  As a result, it only performs
- * unambiguous transliterations.  After the last call to this method,
- * there may be untransliterated text that is waiting for more input
- * to resolve an ambiguity.  In order to perform these pending
- * transliterations, clients should call utrans_trans() with a start
- * of index.start and a limit of index.end after the last call to this
- * method has been made.
- *
- * @param trans the transliterator
- * @param rep a pointer to the string.  This will be passed to the
- * repFunc functions.
- * @param repFunc a set of function pointers that will be used to
- * modify the string pointed to by rep.
- * @param pos a struct containing the start and limit indices of the
- * text to be read and the text to be transliterated
- * @param status a pointer to the UErrorCode
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_transIncremental(const UTransliterator* trans,
-                        UReplaceable* rep,
-                        UReplaceableCallbacks* repFunc,
-                        UTransPosition* pos,
-                        UErrorCode* status);
-
-/**
- * Transliterate a segment of a UChar* string.  The string is passed
- * in in a UChar* buffer.  The string is modified in place.  If the
- * result is longer than textCapacity, it is truncated.  The actual
- * length of the result is returned in *textLength, if textLength is
- * non-NULL. *textLength may be greater than textCapacity, but only
- * textCapacity UChars will be written to *text, including the zero
- * terminator.
- *
- * @param trans the transliterator
- * @param text a pointer to a buffer containing the text to be
- * transliterated on input and the result text on output.
- * @param textLength a pointer to the length of the string in text.
- * If the length is -1 then the string is assumed to be
- * zero-terminated.  Upon return, the new length is stored in
- * *textLength.  If textLength is NULL then the string is assumed to
- * be zero-terminated.
- * @param textCapacity a pointer to the length of the text buffer.
- * Upon return, 
- * @param start the beginning index, inclusive; <code>0 <= start <=
- * limit</code>.
- * @param limit pointer to the ending index, exclusive; <code>start <=
- * limit <= repFunc->length(rep)</code>.  Upon return, *limit will
- * contain the new limit index.  The text previously occupying
- * <code>[start, limit)</code> has been transliterated, possibly to a
- * string of a different length, at <code>[start,
- * </code><em>new-limit</em><code>)</code>, where <em>new-limit</em>
- * is the return value.
- * @param status a pointer to the UErrorCode
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_transUChars(const UTransliterator* trans,
-                   UChar* text,
-                   int32_t* textLength,
-                   int32_t textCapacity,
-                   int32_t start,
-                   int32_t* limit,
-                   UErrorCode* status);
-
-/**
- * Transliterate the portion of the UChar* text buffer that can be
- * transliterated unambiguosly.  See utrans_transIncremental().  The
- * string is passed in in a UChar* buffer.  The string is modified in
- * place.  If the result is longer than textCapacity, it is truncated.
- * The actual length of the result is returned in *textLength, if
- * textLength is non-NULL. *textLength may be greater than
- * textCapacity, but only textCapacity UChars will be written to
- * *text, including the zero terminator.  See utrans_transIncremental()
- * for usage details.
- *
- * @param trans the transliterator
- * @param text a pointer to a buffer containing the text to be
- * transliterated on input and the result text on output.
- * @param textLength a pointer to the length of the string in text.
- * If the length is -1 then the string is assumed to be
- * zero-terminated.  Upon return, the new length is stored in
- * *textLength.  If textLength is NULL then the string is assumed to
- * be zero-terminated.
- * @param textCapacity the length of the text buffer
- * @param pos a struct containing the start and limit indices of the
- * text to be read and the text to be transliterated
- * @param status a pointer to the UErrorCode
- * @see utrans_transIncremental
- * @stable ICU 2.0
- */
-U_STABLE void U_EXPORT2 
-utrans_transIncrementalUChars(const UTransliterator* trans,
-                              UChar* text,
-                              int32_t* textLength,
-                              int32_t textCapacity,
-                              UTransPosition* pos,
-                              UErrorCode* status);
-
-/* deprecated API ----------------------------------------------------------- */
-
-/* see utrans.h documentation for why these functions are deprecated */
-
-/**
- * Deprecated, use utrans_openU() instead.
- * Open a custom transliterator, given a custom rules string 
- * OR 
- * a system transliterator, given its ID.  
- * Any non-NULL result from this function should later be closed with
- * utrans_close().
- *
- * @param id a valid ID, as returned by utrans_getAvailableID()
- * @param dir the desired direction
- * @param rules the transliterator rules.  See the C++ header rbt.h
- * for rules syntax. If NULL then a system transliterator matching 
- * the ID is returned.
- * @param rulesLength the length of the rules, or -1 if the rules
- * are zero-terminated.
- * @param parseError a pointer to a UParseError struct to receive the
- * details of any parsing errors. This parameter may be NULL if no
- * parsing error details are desired.
- * @param status a pointer to the UErrorCode
- * @return a transliterator pointer that may be passed to other
- * utrans_xxx() functions, or NULL if the open call fails.
- * @deprecated ICU 2.8 Use utrans_openU() instead, see utrans.h
- */
-U_DEPRECATED UTransliterator* U_EXPORT2 
-utrans_open(const char* id,
-            UTransDirection dir,
-            const UChar* rules,         /* may be Null */
-            int32_t rulesLength,        /* -1 if null-terminated */ 
-            UParseError* parseError,    /* may be Null */
-            UErrorCode* status);
-
-/**
- * Deprecated, use utrans_getUnicodeID() instead.
- * Return the programmatic identifier for this transliterator.
- * If this identifier is passed to utrans_open(), it will open
- * a transliterator equivalent to this one, if the ID has been
- * registered.
- * @param trans the transliterator to return the ID of.
- * @param buf the buffer in which to receive the ID.  This may be
- * NULL, in which case no characters are copied.
- * @param bufCapacity the capacity of the buffer.  Ignored if buf is
- * NULL.
- * @return the actual length of the ID, not including
- * zero-termination.  This may be greater than bufCapacity.
- * @deprecated ICU 2.8 Use utrans_getUnicodeID() instead, see utrans.h
- */
-U_DEPRECATED int32_t U_EXPORT2 
-utrans_getID(const UTransliterator* trans,
-             char* buf,
-             int32_t bufCapacity);
-
-/**
- * Deprecated, use utrans_unregisterID() instead.
- * Unregister a transliterator from the system.  After this call the
- * system will no longer recognize the given ID when passed to
- * utrans_open().  If the id is invalid then nothing is done.
- *
- * @param id a zero-terminated ID
- * @deprecated ICU 2.8 Use utrans_unregisterID() instead, see utrans.h
- */
-U_DEPRECATED void U_EXPORT2 
-utrans_unregister(const char* id);
-
-/**
- * Deprecated, use utrans_openIDs() instead.
- * Return the ID of the index-th system transliterator.  The result
- * is placed in the given buffer.  If the given buffer is too small,
- * the initial substring is copied to buf.  The result in buf is
- * always zero-terminated.
- *
- * @param index the number of the transliterator to return.  Must
- * satisfy 0 <= index < utrans_countAvailableIDs().  If index is out
- * of range then it is treated as if it were 0.
- * @param buf the buffer in which to receive the ID.  This may be
- * NULL, in which case no characters are copied.
- * @param bufCapacity the capacity of the buffer.  Ignored if buf is
- * NULL.
- * @return the actual length of the index-th ID, not including
- * zero-termination.  This may be greater than bufCapacity.
- * @deprecated ICU 2.8 Use utrans_openIDs() instead, see utrans.h
- */
-U_DEPRECATED int32_t U_EXPORT2 
-utrans_getAvailableID(int32_t index,
-                      char* buf,
-                      int32_t bufCapacity);
-
-#endif /* #if !UCONFIG_NO_TRANSLITERATION */
-
-#endif
diff --git a/source/i18n/unicode/vtzone.h b/source/i18n/unicode/vtzone.h
deleted file mode 100644
index 724da7e..0000000
--- a/source/i18n/unicode/vtzone.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2010, 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. Or, you can create a
- * <code>VTimeZone</code> from any other ICU <code>BasicTimeZone</code>.
- * <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 3.8
- */
-class U_I18N_API VTimeZone : public BasicTimeZone {
-public:
-    /**
-     * Copy constructor.
-     * @param source    The <code>VTimeZone</code> object to be copied.
-     * @stable ICU 3.8
-     */
-    VTimeZone(const VTimeZone& source);
-
-    /**
-     * Destructor.
-     * @stable ICU 3.8
-     */
-    virtual ~VTimeZone();
-
-    /**
-     * Assignment operator.
-     * @param right The object to be copied.
-     * @stable ICU 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
-
-    /**
-     * Create a <code>VTimeZone</code> instance using a basic time zone.
-     * @param basicTZ The basic time zone instance
-     * @param status Output param to filled in with a success or an error.
-     * @return A <code>VTimeZone</code> object initialized by the basic time zone.
-     * @draft ICU 4.6
-     */
-    static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
-                                                       UErrorCode &status);
-
-    /**
-     * 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 3.8
-     */
-    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 3.8
-     */
-    UBool getTZURL(UnicodeString& url) const;
-
-    /**
-     * Sets the RFC2445 TZURL property value.
-     * @param url The TZURL property value.
-     * @stable ICU 3.8
-     */
-    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 3.8
-     */
-    UBool getLastModified(UDate& lastModified) const;
-
-    /**
-     * Sets the RFC2445 LAST-MODIFIED property value.
-     * @param lastModified The LAST-MODIFIED date.
-     * @stable ICU 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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 3.8
-     */
-    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& zonename,
-                              int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
-                              UErrorCode& status) const;
-    void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
-                             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& zonename,
-                             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& zonename,
-                                     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& zonename,
-                                     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& zonename,
-                        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 3.8
-     */
-    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 3.8
-     */
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // VTZONE_H
-//eof