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