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