17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert********************************************************************** 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (c) 2002, International Business Machines Corporation 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* and others. All Rights Reserved. 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert********************************************************************** 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Date Name Description 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* 01/14/2002 aliu Creation. 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert********************************************************************** 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.text; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * <code>UnicodeReplacer</code> defines a protocol for objects that 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * replace a range of characters in a Replaceable string with output 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * text. The replacement is done via the Replaceable API so as to 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * preserve out-of-band data. 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Alan Liu 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertinterface UnicodeReplacer { 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Replace characters in 'text' from 'start' to 'limit' with the 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * output text of this object. Update the 'cursor' parameter to 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * give the cursor position and return the length of the 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * replacement text. 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param text the text to be matched 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param start inclusive start index of text to be replaced 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param limit exclusive end index of text to be replaced; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * must be greater than or equal to start 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param cursor output parameter for the cursor position. 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Not all replacer objects will update this, but in a complete 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * tree of replacer objects, representing the entire output side 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * of a transliteration rule, at least one must update it. 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @return the number of 16-bit code units in the text replacing 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * the characters at offsets start..(limit-1) in text 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public abstract int replace(Replaceable text, 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int start, 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int limit, 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] cursor); 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Returns a string representation of this replacer. If the 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * result of calling this function is passed to the appropriate 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * parser, typically TransliteratorParser, it will produce another 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * replacer that is equal to this one. 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param escapeUnprintable if TRUE then convert unprintable 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * character to their hex escape representations, \\uxxxx or 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * \\Uxxxxxxxx. Unprintable characters are defined by 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Utility.isUnprintable(). 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public abstract String toReplacerPattern(boolean escapeUnprintable); 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Union the set of all characters that may output by this object 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * into the given set. 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param toUnionTo the set into which to union the output characters 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public abstract void addReplacementSetTo(UnicodeSet toUnionTo); 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//eof 65