1c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/*
2c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru**********************************************************************
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   Copyright (C) 2008-2009, International Business Machines
4c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
5c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru**********************************************************************
6c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru*   Date        Name        Description
7c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru*   05/11/2008  Andy Heninger  Ported from Java
8c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru**********************************************************************
9c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru*/
10c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#ifndef BRKTRANS_H
11c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#define BRKTRANS_H
12c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
13c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "unicode/utypes.h"
14c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
15c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_TRANSLITERATION && !UCONFIG_NO_BREAK_ITERATION
16c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
17c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "unicode/translit.h"
18c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
19c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
20c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruU_NAMESPACE_BEGIN
21c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
22c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruclass UVector32;
23c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
24c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/**
25c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * A transliterator that pInserts the specified characters at word breaks.
26c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * To restrict it to particular characters, use a filter.
27c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * TODO: this is an internal class, and only temporary.
28c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Remove it once we have \b notation in Transliterator.
29c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */
30c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruclass BreakTransliterator : public Transliterator {
31c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querupublic:
32c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
33c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    BreakTransliterator(const UnicodeString &ID,
34c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                        UnicodeFilter *adoptedFilter,
35c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                        BreakIterator *bi,
36c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                        const UnicodeString &insertion);
37c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
38c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Constructs a transliterator.
39c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * @param adoptedFilter    the filter for this transliterator.
40c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
41c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    BreakTransliterator(UnicodeFilter* adoptedFilter = 0);
42c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
43c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
44c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Destructor.
45c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
46c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    virtual ~BreakTransliterator();
47c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
48c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
49c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Copy constructor.
50c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
51c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    BreakTransliterator(const BreakTransliterator&);
52c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
53c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
54c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Transliterator API.
55c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * @return    A copy of the object.
56c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
57c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    virtual Transliterator* clone(void) const;
58c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
59c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    virtual const UnicodeString &getInsertion() const;
60c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual void setInsertion(const UnicodeString &insertion);
62c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
63c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
64c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru      *  Return the break iterator used by this transliterator.
65c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru      *  Caution, this is the live break iterator; it must not be used while
66c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru      *     there is any possibility that this transliterator is using it.
67c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru      */
68c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    virtual BreakIterator *getBreakIterator();
69c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
70c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
71c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
72c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for the actual class.
73c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
74c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    virtual UClassID getDynamicClassID() const;
75c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
76c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
77c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for this class.
78c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
79c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
80c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
81c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru protected:
82c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
83c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
84c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Implements {@link Transliterator#handleTransliterate}.
85c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * @param text          the buffer holding transliterated and
86c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     *                      untransliterated text
87c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * @param offset        the start and limit of the text, the position
88c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     *                      of the cursor, and the start and limit of transliteration.
89c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * @param incremental   if true, assume more text may be coming after
90c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     *                      pos.contextLimit. Otherwise, assume the text is complete.
91c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
92c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
93c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                                     UBool isIncremental) const;
94c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
95c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru private:
96c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     BreakIterator     *bi;
97c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     UnicodeString      fInsertion;
98c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     UVector32         *boundaries;
99c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     UnicodeString      sText;  // text from handleTransliterate().
100c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
101c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     static UnicodeString replaceableAsString(Replaceable &r);
102c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
103c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /**
104c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Assignment operator.
105c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
106c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    BreakTransliterator& operator=(const BreakTransliterator&);
107c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru};
108c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
109c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruU_NAMESPACE_END
110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
111c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */
112c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
113c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
114