text: /*
  **********************************************************************
  *   Copyright (C) 2008, International Business Machines
  *   Corporation and others.  All Rights Reserved.
  **********************************************************************
  *   Date        Name        Description
  *   05/11/2008  Andy Heninger  Ported from Java
  **********************************************************************
  */
  #ifndef BRKTRANS_H
  #define BRKTRANS_H
  
  #include "unicode/utypes.h"
  
  #if !UCONFIG_NO_TRANSLITERATION && !UCONFIG_NO_BREAK_ITERATION
  
  #include "unicode/translit.h"
  
  
  U_NAMESPACE_BEGIN
  
  class UVector32;
  
  /**
   * A transliterator that pInserts the specified characters at word breaks.
   * To restrict it to particular characters, use a filter.
   * TODO: this is an internal class, and only temporary. 
   * Remove it once we have \b notation in Transliterator.
   */
  class BreakTransliterator : public Transliterator {
  public:
  
      BreakTransliterator(const UnicodeString &ID, 
                          UnicodeFilter *adoptedFilter,
                          BreakIterator *bi, 
                          const UnicodeString &insertion);
      /**
       * Constructs a transliterator.
       * @param adoptedFilter    the filter for this transliterator.
       */
      BreakTransliterator(UnicodeFilter* adoptedFilter = 0);
  
      /**
       * Destructor.
       */
      virtual ~BreakTransliterator();
  
      /**
       * Copy constructor.
       */
      BreakTransliterator(const BreakTransliterator&);
  
      /**
       * Transliterator API.
       * @return    A copy of the object.
       */
      virtual Transliterator* clone(void) const;
  
      virtual const UnicodeString &getInsertion() const;
  
      virtual void setInsertsion(const UnicodeString &insertion);
  
      /**
        *  Return the break iterator used by this transliterator.
        *  Caution, this is the live break iterator; it must not be used while
        *     there is any possibility that this transliterator is using it.
        */
      virtual BreakIterator *getBreakIterator();
  
  
      /**
       * ICU "poor man's RTTI", returns a UClassID for the actual class.
       */
      virtual UClassID getDynamicClassID() const;
  
      /**
       * ICU "poor man's RTTI", returns a UClassID for this class.
       */
      U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
  
   protected:
  
      /**
       * Implements {@link Transliterator#handleTransliterate}.
       * @param text          the buffer holding transliterated and
       *                      untransliterated text
       * @param offset        the start and limit of the text, the position
       *                      of the cursor, and the start and limit of transliteration.
       * @param incremental   if true, assume more text may be coming after
       *                      pos.contextLimit. Otherwise, assume the text is complete.
       */
      virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
                                       UBool isIncremental) const;
  
   private:
       BreakIterator     *bi;
       UnicodeString      fInsertion;
       UVector32         *boundaries;
       UnicodeString      sText;  // text from handleTransliterate().
  
       static UnicodeString replaceableAsString(Replaceable &r);
  
      /**
       * Assignment operator.
       */
      BreakTransliterator& operator=(const BreakTransliterator&);
  };
  
  U_NAMESPACE_END
  
  #endif /* #if !UCONFIG_NO_TRANSLITERATION */
  
  #endif
  