1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius*   Copyright (C) 1997-2011, International Business Machines
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   06/21/00    aliu        Creation.
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef UTRANS_H
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define UTRANS_H
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_TRANSLITERATION
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/localpointer.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/urep.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parseerr.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uenum.h"
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General Notes
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C API: Transliterator
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <h2> Transliteration </h2>
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The data structures and functions described in this header provide
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliteration services.  Transliteration services are implemented
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as C++ classes.  The comments and documentation in this header
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * assume the reader is familiar with the C++ headers translit.h and
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * associated documentation.
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A significant but incomplete subset of the C++ transliteration
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * services are available to C code through this header.  In order to
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * access more complex transliteration services, refer to the C++
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * headers and documentation.
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * There are two sets of functions for working with transliterator IDs:
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * An old, deprecated set uses char * IDs, which works for true and pure
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * identifiers that these APIs were designed for,
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for example "Cyrillic-Latin".
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It does not work when the ID contains filters ("[:Script=Cyrl:]")
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * or even a complete set of rules because then the ID string contains more
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * than just "invariant" characters (see utypes.h).
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A new set of functions replaces the old ones and uses UChar * IDs,
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * paralleling the UnicodeString IDs in the C++ API. (New in ICU 2.8.)
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Data Structures
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * An opaque transliterator for use in C.  Open with utrans_openxxx()
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and close with utrans_close() when done.  Equivalent to the C++ class
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Transliterator and its subclasses.
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see Transliterator
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef void* UTransliterator;
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Direction constant indicating the direction in a transliterator,
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * e.g., the forward or reverse rules of a RuleBasedTransliterator.
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Specified when a transliterator is opened.  An "A-B" transliterator
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliterates A to B when operating in the forward direction, and
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * B to A when operating in the reverse direction.
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UTransDirection {
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * UTRANS_FORWARD means from &lt;source&gt; to &lt;target&gt; for a
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * transliterator with ID &lt;source&gt;-&lt;target&gt;.  For a transliterator
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * opened using a rule, it means forward direction rules, e.g.,
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * "A > B".
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UTRANS_FORWARD,
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * UTRANS_REVERSE means from &lt;target&gt; to &lt;source&gt; for a
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * transliterator with ID &lt;source&gt;-&lt;target&gt;.  For a transliterator
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * opened using a rule, it means reverse direction rules, e.g.,
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * "A < B".
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UTRANS_REVERSE
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UTransDirection;
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Position structure for utrans_transIncremental() incremental
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliteration.  This structure defines two substrings of the text
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * being transliterated.  The first region, [contextStart,
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * contextLimit), defines what characters the transliterator will read
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as context.  The second region, [start, limit), defines what
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * characters will actually be transliterated.  The second region
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * should be a subset of the first.
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>After a transliteration operation, some of the indices in this
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * structure will be modified.  See the field descriptions for
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * details.
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>contextStart <= start <= limit <= contextLimit
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>Note: All index values in this structure must be at code point
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * boundaries.  That is, none of them may occur between two code units
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of a surrogate pair.  If any index does split a surrogate pair,
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * results are unspecified.
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UTransPosition {
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Beginning index, inclusive, of the context to be considered for
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * a transliteration operation.  The transliterator will ignore
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * anything before this index.  INPUT/OUTPUT parameter: This parameter
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * is updated by a transliteration operation to reflect the maximum
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * amount of antecontext needed by a transliterator.
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.4
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t contextStart;
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Ending index, exclusive, of the context to be considered for a
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * transliteration operation.  The transliterator will ignore
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * anything at or after this index.  INPUT/OUTPUT parameter: This
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * parameter is updated to reflect changes in the length of the
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * text, but points to the same logical position in the text.
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.4
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t contextLimit;
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Beginning index, inclusive, of the text to be transliteratd.
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * INPUT/OUTPUT parameter: This parameter is advanced past
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * characters that have already been transliterated by a
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * transliteration operation.
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.4
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t start;
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Ending index, exclusive, of the text to be transliteratd.
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * INPUT/OUTPUT parameter: This parameter is updated to reflect
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * changes in the length of the text, but points to the same
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * logical position in the text.
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.4
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t limit;
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UTransPosition;
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General API
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Open a custom transliterator, given a custom rules string
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * OR
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a system transliterator, given its ID.
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Any non-NULL result from this function should later be closed with
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_close().
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param id a valid transliterator ID
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param idLength the length of the ID string, or -1 if NUL-terminated
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dir the desired direction
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rules the transliterator rules.  See the C++ header rbt.h for
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *              rules syntax. If NULL then a system transliterator matching
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *              the ID is returned.
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rulesLength the length of the rules, or -1 if the rules
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                    are NUL-terminated.
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param parseError a pointer to a UParseError struct to receive the details
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                   of any parsing errors. This parameter may be NULL if no
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                   parsing error details are desired.
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pErrorCode a pointer to the UErrorCode
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return a transliterator pointer that may be passed to other
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *         utrans_xxx() functions, or NULL if the open call fails.
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE UTransliterator* U_EXPORT2
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_openU(const UChar *id,
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             int32_t idLength,
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UTransDirection dir,
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             const UChar *rules,
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             int32_t rulesLength,
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UParseError *parseError,
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UErrorCode *pErrorCode);
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Open an inverse of an existing transliterator.  For this to work,
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the inverse must be registered with the system.  For example, if
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the Transliterator "A-B" is opened, and then its inverse is opened,
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the result is the Transliterator "B-A", if such a transliterator is
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * registered with the system.  Otherwise the result is NULL and a
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * failing UErrorCode is set.  Any non-NULL result from this function
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * should later be closed with utrans_close().
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator to open the inverse of.
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return a pointer to a newly-opened transliterator that is the
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * inverse of trans, or NULL if the open call fails.
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE UTransliterator* U_EXPORT2
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_openInverse(const UTransliterator* trans,
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   UErrorCode* status);
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Create a copy of a transliterator.  Any non-NULL result from this
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * function should later be closed with utrans_close().
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator to be copied.
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return a transliterator pointer that may be passed to other
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_xxx() functions, or NULL if the clone call fails.
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE UTransliterator* U_EXPORT2
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_clone(const UTransliterator* trans,
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UErrorCode* status);
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Close a transliterator.  Any non-NULL pointer returned by
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_openXxx() or utrans_clone() should eventually be closed.
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator to be closed.
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_close(UTransliterator* trans);
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if U_SHOW_CPLUSPLUS_API
24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
24150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN
24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \class LocalUTransliteratorPointer
24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * "Smart pointer" class, closes a UTransliterator via utrans_close().
24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For most methods see the LocalPointerBase base class.
24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *
24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @see LocalPointerBase
24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @see LocalPointer
25027f654740f2a26ad62a5c155af9199af9e69b889claireho * @stable ICU 4.4
25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
25250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_DEFINE_LOCAL_OPEN_POINTER(LocalUTransliteratorPointer, UTransliterator, utrans_close);
25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
25450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END
25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the programmatic identifier for this transliterator.
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If this identifier is passed to utrans_openU(), it will open
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a transliterator equivalent to this one, if the ID has been
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * registered.
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator to return the ID of.
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param resultLength pointer to an output variable receiving the length
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *        of the ID string; can be NULL
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the NUL-terminated ID string. This pointer remains
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * valid until utrans_close() is called on this transliterator.
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE const UChar * U_EXPORT2
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_getUnicodeID(const UTransliterator *trans,
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    int32_t *resultLength);
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Register an open transliterator with the system.  When
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_open() is called with an ID string that is equal to that
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returned by utrans_getID(adoptedTrans,...), then
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_clone(adoptedTrans,...) is returned.
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>NOTE: After this call the system owns the adoptedTrans and will
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * close it.  The user must not call utrans_close() on adoptedTrans.
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param adoptedTrans a transliterator, typically the result of
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_openRules(), to be registered with the system.
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_register(UTransliterator* adoptedTrans,
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UErrorCode* status);
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Unregister a transliterator from the system.  After this call the
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * system will no longer recognize the given ID when passed to
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_open(). If the ID is invalid then nothing is done.
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param id an ID to unregister
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param idLength the length of id, or -1 if id is zero-terminated
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_unregisterID(const UChar* id, int32_t idLength);
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the filter used by a transliterator.  A filter can be used to
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * make the transliterator pass certain characters through untouched.
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The filter is expressed using a UnicodeSet pattern.  If the
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * filterPattern is NULL or the empty string, then the transliterator
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * will be reset to use no filter.
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param filterPattern a pattern string, in the form accepted by
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UnicodeSet, specifying which characters to apply the
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliteration to.  May be NULL or the empty string to indicate no
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * filter.
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param filterPatternLen the length of filterPattern, or -1 if
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * filterPattern is zero-terminated
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see UnicodeSet
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_setFilter(UTransliterator* trans,
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 const UChar* filterPattern,
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 int32_t filterPatternLen,
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UErrorCode* status);
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the number of system transliterators.
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It is recommended to use utrans_openIDs() instead.
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the number of system transliterators.
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_countAvailableIDs(void);
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a UEnumeration for the available transliterators.
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pErrorCode Pointer to the UErrorCode in/out parameter.
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return UEnumeration for the available transliterators.
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *         Close with uenum_close().
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE UEnumeration * U_EXPORT2
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_openIDs(UErrorCode *pErrorCode);
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Transliteration API
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Transliterate a segment of a UReplaceable string.  The string is
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * passed in as a UReplaceable pointer rep and a UReplaceableCallbacks
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * function pointer struct repFunc.  Functions in the repFunc struct
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * will be called in order to modify the rep string.
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep a pointer to the string.  This will be passed to the
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * repFunc functions.
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param repFunc a set of function pointers that will be used to
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * modify the string pointed to by rep.
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start the beginning index, inclusive; <code>0 <= start <=
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * limit</code>.
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param limit pointer to the ending index, exclusive; <code>start <=
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * limit <= repFunc->length(rep)</code>.  Upon return, *limit will
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * contain the new limit index.  The text previously occupying
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>[start, limit)</code> has been transliterated, possibly to a
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string of a different length, at <code>[start,
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </code><em>new-limit</em><code>)</code>, where <em>new-limit</em>
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is the return value.
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_trans(const UTransliterator* trans,
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UReplaceable* rep,
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UReplaceableCallbacks* repFunc,
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             int32_t start,
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             int32_t* limit,
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UErrorCode* status);
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Transliterate the portion of the UReplaceable text buffer that can
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be transliterated unambiguosly.  This method is typically called
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * after new text has been inserted, e.g. as a result of a keyboard
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * event.  The transliterator will try to transliterate characters of
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>rep</code> between <code>index.cursor</code> and
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>index.limit</code>.  Characters before
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>index.cursor</code> will not be changed.
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>Upon return, values in <code>index</code> will be updated.
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>index.start</code> will be advanced to the first
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * character that future calls to this method will read.
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>index.cursor</code> and <code>index.limit</code> will
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be adjusted to delimit the range of text that future calls to
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this method may change.
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>Typical usage of this method begins with an initial call
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with <code>index.start</code> and <code>index.limit</code>
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set to indicate the portion of <code>text</code> to be
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliterated, and <code>index.cursor == index.start</code>.
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Thereafter, <code>index</code> can be used without
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * modification in future calls, provided that all changes to
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>text</code> are made via this method.
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>This method assumes that future calls may be made that will
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * insert new text into the buffer.  As a result, it only performs
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * unambiguous transliterations.  After the last call to this method,
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * there may be untransliterated text that is waiting for more input
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to resolve an ambiguity.  In order to perform these pending
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliterations, clients should call utrans_trans() with a start
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of index.start and a limit of index.end after the last call to this
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * method has been made.
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep a pointer to the string.  This will be passed to the
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * repFunc functions.
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param repFunc a set of function pointers that will be used to
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * modify the string pointed to by rep.
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos a struct containing the start and limit indices of the
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * text to be read and the text to be transliterated
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_transIncremental(const UTransliterator* trans,
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UReplaceable* rep,
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UReplaceableCallbacks* repFunc,
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UTransPosition* pos,
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UErrorCode* status);
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Transliterate a segment of a UChar* string.  The string is passed
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in in a UChar* buffer.  The string is modified in place.  If the
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * result is longer than textCapacity, it is truncated.  The actual
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * length of the result is returned in *textLength, if textLength is
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * non-NULL. *textLength may be greater than textCapacity, but only
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * textCapacity UChars will be written to *text, including the zero
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * terminator.
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text a pointer to a buffer containing the text to be
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliterated on input and the result text on output.
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param textLength a pointer to the length of the string in text.
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If the length is -1 then the string is assumed to be
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * zero-terminated.  Upon return, the new length is stored in
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * *textLength.  If textLength is NULL then the string is assumed to
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be zero-terminated.
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param textCapacity a pointer to the length of the text buffer.
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upon return,
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start the beginning index, inclusive; <code>0 <= start <=
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * limit</code>.
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param limit pointer to the ending index, exclusive; <code>start <=
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * limit <= repFunc->length(rep)</code>.  Upon return, *limit will
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * contain the new limit index.  The text previously occupying
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>[start, limit)</code> has been transliterated, possibly to a
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string of a different length, at <code>[start,
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </code><em>new-limit</em><code>)</code>, where <em>new-limit</em>
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is the return value.
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_transUChars(const UTransliterator* trans,
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   UChar* text,
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t* textLength,
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t textCapacity,
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t start,
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t* limit,
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   UErrorCode* status);
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Transliterate the portion of the UChar* text buffer that can be
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliterated unambiguosly.  See utrans_transIncremental().  The
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string is passed in in a UChar* buffer.  The string is modified in
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * place.  If the result is longer than textCapacity, it is truncated.
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The actual length of the result is returned in *textLength, if
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * textLength is non-NULL. *textLength may be greater than
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * textCapacity, but only textCapacity UChars will be written to
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * *text, including the zero terminator.  See utrans_transIncremental()
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for usage details.
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text a pointer to a buffer containing the text to be
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * transliterated on input and the result text on output.
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param textLength a pointer to the length of the string in text.
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If the length is -1 then the string is assumed to be
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * zero-terminated.  Upon return, the new length is stored in
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * *textLength.  If textLength is NULL then the string is assumed to
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be zero-terminated.
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param textCapacity the length of the text buffer
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos a struct containing the start and limit indices of the
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * text to be read and the text to be transliterated
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see utrans_transIncremental
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_transIncrementalUChars(const UTransliterator* trans,
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              UChar* text,
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              int32_t* textLength,
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              int32_t textCapacity,
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              UTransPosition* pos,
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              UErrorCode* status);
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* deprecated API ----------------------------------------------------------- */
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
51383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifndef U_HIDE_DEPRECATED_API
51483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* see utrans.h documentation for why these functions are deprecated */
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Deprecated, use utrans_openU() instead.
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Open a custom transliterator, given a custom rules string
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * OR
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a system transliterator, given its ID.
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Any non-NULL result from this function should later be closed with
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_close().
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param id a valid ID, as returned by utrans_getAvailableID()
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dir the desired direction
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rules the transliterator rules.  See the C++ header rbt.h
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for rules syntax. If NULL then a system transliterator matching
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the ID is returned.
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rulesLength the length of the rules, or -1 if the rules
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are zero-terminated.
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param parseError a pointer to a UParseError struct to receive the
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * details of any parsing errors. This parameter may be NULL if no
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parsing error details are desired.
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to the UErrorCode
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return a transliterator pointer that may be passed to other
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_xxx() functions, or NULL if the open call fails.
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @deprecated ICU 2.8 Use utrans_openU() instead, see utrans.h
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_DEPRECATED UTransliterator* U_EXPORT2
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_open(const char* id,
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UTransDirection dir,
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const UChar* rules,         /* may be Null */
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t rulesLength,        /* -1 if null-terminated */
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UParseError* parseError,    /* may be Null */
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode* status);
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Deprecated, use utrans_getUnicodeID() instead.
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the programmatic identifier for this transliterator.
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If this identifier is passed to utrans_open(), it will open
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a transliterator equivalent to this one, if the ID has been
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * registered.
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trans the transliterator to return the ID of.
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param buf the buffer in which to receive the ID.  This may be
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NULL, in which case no characters are copied.
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param bufCapacity the capacity of the buffer.  Ignored if buf is
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NULL.
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the actual length of the ID, not including
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * zero-termination.  This may be greater than bufCapacity.
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @deprecated ICU 2.8 Use utrans_getUnicodeID() instead, see utrans.h
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_DEPRECATED int32_t U_EXPORT2
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_getID(const UTransliterator* trans,
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             char* buf,
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             int32_t bufCapacity);
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Deprecated, use utrans_unregisterID() instead.
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Unregister a transliterator from the system.  After this call the
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * system will no longer recognize the given ID when passed to
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * utrans_open().  If the id is invalid then nothing is done.
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param id a zero-terminated ID
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @deprecated ICU 2.8 Use utrans_unregisterID() instead, see utrans.h
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_DEPRECATED void U_EXPORT2
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_unregister(const char* id);
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Deprecated, use utrans_openIDs() instead.
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the ID of the index-th system transliterator.  The result
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is placed in the given buffer.  If the given buffer is too small,
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the initial substring is copied to buf.  The result in buf is
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * always zero-terminated.
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param index the number of the transliterator to return.  Must
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * satisfy 0 <= index < utrans_countAvailableIDs().  If index is out
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of range then it is treated as if it were 0.
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param buf the buffer in which to receive the ID.  This may be
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NULL, in which case no characters are copied.
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param bufCapacity the capacity of the buffer.  Ignored if buf is
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NULL.
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the actual length of the index-th ID, not including
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * zero-termination.  This may be greater than bufCapacity.
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @deprecated ICU 2.8 Use utrans_openIDs() instead, see utrans.h
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_DEPRECATED int32_t U_EXPORT2
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruutrans_getAvailableID(int32_t index,
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      char* buf,
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      int32_t bufCapacity);
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
60383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif  /* U_HIDE_DEPRECATED_API */
60483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
608