1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Copyright (C) 1997-2010, 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/23/00 aliu Creation. 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __UREP_H 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __UREP_H 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General Notes 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************** 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TODO 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add usage scenario 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add test code 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Talk about pinning 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Talk about "can truncate result if out of memory" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Data Structures 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \brief C API: Callbacks for UReplaceable 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * An opaque replaceable text object. This will be manipulated only 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * through the caller-supplied UReplaceableFunctor struct. Related 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to the C++ class Replaceable. 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is currently only used in the Transliterator C API, see utrans.h . 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef void* UReplaceable; 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A set of function pointers that transliterators use to manipulate a 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UReplaceable. The caller should supply the required functions to 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * manipulate their text appropriately. Related to the C++ class 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Replaceable. 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UReplaceableCallbacks { 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Function pointer that returns the number of UChar code units in 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this text. 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep A pointer to "this" UReplaceable object. 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The length of the text. 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t (*length)(const UReplaceable* rep); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Function pointer that returns a UChar code units at the given 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * offset into this text; 0 <= offset < n, where n is the value 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returned by (*length)(rep). See unistr.h for a description of 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * charAt() vs. char32At(). 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep A pointer to "this" UReplaceable object. 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param offset The index at which to fetch the UChar (code unit). 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The UChar (code unit) at offset, or U+FFFF if the offset is out of bounds. 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar (*charAt)(const UReplaceable* rep, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Function pointer that returns a UChar32 code point at the given 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * offset into this text. See unistr.h for a description of 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * charAt() vs. char32At(). 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep A pointer to "this" UReplaceable object. 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param offset The index at which to fetch the UChar32 (code point). 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The UChar32 (code point) at offset, or U+FFFF if the offset is out of bounds. 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 (*char32At)(const UReplaceable* rep, 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Function pointer that replaces text between start and limit in 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this text with the given text. Attributes (out of band info) 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * should be retained. 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep A pointer to "this" UReplaceable object. 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start the starting index of the text to be replaced, 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * inclusive. 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param limit the ending index of the text to be replaced, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exclusive. 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text the new text to replace the UChars from 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * start..limit-1. 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param textLength the number of UChars at text, or -1 if text 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is null-terminated. 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void (*replace)(UReplaceable* rep, 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t start, 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit, 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* text, 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t textLength); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Function pointer that copies the characters in the range 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [<tt>start</tt>, <tt>limit</tt>) into the array <tt>dst</tt>. 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep A pointer to "this" UReplaceable object. 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start offset of first character which will be copied 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into the array 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param limit offset immediately following the last character to 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be copied 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dst array in which to copy characters. The length of 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <tt>dst</tt> must be at least <tt>(limit - start)</tt>. 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.1 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void (*extract)(UReplaceable* rep, 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t start, 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit, 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* dst); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Function pointer that copies text between start and limit in 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this text to another index in the text. Attributes (out of 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * band info) should be retained. After this call, there will be 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (at least) two copies of the characters originally located at 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * start..limit-1. 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param rep A pointer to "this" UReplaceable object. 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start the starting index of the text to be copied, 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * inclusive. 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param limit the ending index of the text to be copied, 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exclusive. 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dest the index at which the copy of the UChars should be 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * inserted. 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void (*copy)(UReplaceable* rep, 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t start, 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit, 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dest); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UReplaceableCallbacks; 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 156