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