179 lines
7.7 KiB
Java
179 lines
7.7 KiB
Java
![]() |
/* GENERATED SOURCE. DO NOT MODIFY. */
|
||
|
// © 2016 and later: Unicode, Inc. and others.
|
||
|
// License & terms of use: http://www.unicode.org/copyright.html
|
||
|
/*
|
||
|
*******************************************************************************
|
||
|
* Copyright (C) 1996-2016, International Business Machines Corporation and *
|
||
|
* others. All Rights Reserved. *
|
||
|
*******************************************************************************
|
||
|
*/
|
||
|
package android.icu.text;
|
||
|
|
||
|
/**
|
||
|
* <code>Replaceable</code> is an interface representing a
|
||
|
* string of characters that supports the replacement of a range of
|
||
|
* itself with a new string of characters. It is used by APIs that
|
||
|
* change a piece of text while retaining metadata. Metadata is data
|
||
|
* other than the Unicode characters returned by char32At(). One
|
||
|
* example of metadata is style attributes; another is an edit
|
||
|
* history, marking each character with an author and revision number.
|
||
|
*
|
||
|
* <p>An implicit aspect of the <code>Replaceable</code> API is that
|
||
|
* during a replace operation, new characters take on the metadata of
|
||
|
* the old characters. For example, if the string "the <b>bold</b>
|
||
|
* font" has range (4, 8) replaced with "strong", then it becomes "the
|
||
|
* <b>strong</b> font".
|
||
|
*
|
||
|
* <p><code>Replaceable</code> specifies ranges using a start
|
||
|
* offset and a limit offset. The range of characters thus specified
|
||
|
* includes the characters at offset start..limit-1. That is, the
|
||
|
* start offset is inclusive, and the limit offset is exclusive.
|
||
|
*
|
||
|
* <p><code>Replaceable</code> also includes API to access characters
|
||
|
* in the string: <code>length()</code>, <code>charAt()</code>,
|
||
|
* <code>char32At()</code>, and <code>extractBetween()</code>.
|
||
|
*
|
||
|
* <p>For a subclass to support metadata, typical behavior of
|
||
|
* <code>replace()</code> is the following:
|
||
|
* <ul>
|
||
|
* <li>Set the metadata of the new text to the metadata of the first
|
||
|
* character replaced</li>
|
||
|
* <li>If no characters are replaced, use the metadata of the
|
||
|
* previous character</li>
|
||
|
* <li>If there is no previous character (i.e. start == 0), use the
|
||
|
* following character</li>
|
||
|
* <li>If there is no following character (i.e. the replaceable was
|
||
|
* empty), use default metadata<br>
|
||
|
* <li>If the code point U+FFFF is seen, it should be interpreted as
|
||
|
* a special marker having no metadata<li>
|
||
|
* </li>
|
||
|
* </ul>
|
||
|
* If this is not the behavior, the subclass should document any differences.
|
||
|
*
|
||
|
* @author Alan Liu
|
||
|
*/
|
||
|
public interface Replaceable {
|
||
|
/**
|
||
|
* Returns the number of 16-bit code units in the text.
|
||
|
* @return number of 16-bit code units in text
|
||
|
*/
|
||
|
int length();
|
||
|
|
||
|
/**
|
||
|
* Returns the 16-bit code unit at the given offset into the text.
|
||
|
* @param offset an integer between 0 and <code>length()</code>-1
|
||
|
* inclusive
|
||
|
* @return 16-bit code unit of text at given offset
|
||
|
*/
|
||
|
char charAt(int offset);
|
||
|
|
||
|
/**
|
||
|
* Returns the 32-bit code point at the given 16-bit offset into
|
||
|
* the text. This assumes the text is stored as 16-bit code units
|
||
|
* with surrogate pairs intermixed. If the offset of a leading or
|
||
|
* trailing code unit of a surrogate pair is given, return the
|
||
|
* code point of the surrogate pair.
|
||
|
*
|
||
|
* <p>Most subclasses can return
|
||
|
* <code>android.icu.text.UTF16.charAt(this, offset)</code>.
|
||
|
* @param offset an integer between 0 and <code>length()</code>-1
|
||
|
* inclusive
|
||
|
* @return 32-bit code point of text at given offset
|
||
|
*/
|
||
|
int char32At(int offset);
|
||
|
|
||
|
/**
|
||
|
* Copies characters from this object into the destination
|
||
|
* character array. The first character to be copied is at index
|
||
|
* <code>srcStart</code>; the last character to be copied is at
|
||
|
* index <code>srcLimit-1</code> (thus the total number of
|
||
|
* characters to be copied is <code>srcLimit-srcStart</code>). The
|
||
|
* characters are copied into the subarray of <code>dst</code>
|
||
|
* starting at index <code>dstStart</code> and ending at index
|
||
|
* <code>dstStart + (srcLimit-srcStart) - 1</code>.
|
||
|
*
|
||
|
* @param srcStart the beginning index to copy, inclusive; <code>0
|
||
|
* <= start <= limit</code>.
|
||
|
* @param srcLimit the ending index to copy, exclusive;
|
||
|
* <code>start <= limit <= length()</code>.
|
||
|
* @param dst the destination array.
|
||
|
* @param dstStart the start offset in the destination array.
|
||
|
*/
|
||
|
void getChars(int srcStart, int srcLimit, char dst[], int dstStart);
|
||
|
|
||
|
/**
|
||
|
* Replaces a substring of this object with the given text.
|
||
|
*
|
||
|
* <p>Subclasses must ensure that if the text between start and
|
||
|
* limit is equal to the replacement text, that replace has no
|
||
|
* effect. That is, any metadata
|
||
|
* should be unaffected. In addition, subclasses are encouraged to
|
||
|
* check for initial and trailing identical characters, and make a
|
||
|
* smaller replacement if possible. This will preserve as much
|
||
|
* metadata as possible.
|
||
|
* @param start the beginning index, inclusive; <code>0 <= start
|
||
|
* <= limit</code>.
|
||
|
* @param limit the ending index, exclusive; <code>start <= limit
|
||
|
* <= length()</code>.
|
||
|
* @param text the text to replace characters <code>start</code>
|
||
|
* to <code>limit - 1</code>
|
||
|
*/
|
||
|
void replace(int start, int limit, String text);
|
||
|
|
||
|
/**
|
||
|
* Replaces a substring of this object with the given text.
|
||
|
*
|
||
|
* <p>Subclasses must ensure that if the text between start and
|
||
|
* limit is equal to the replacement text, that replace has no
|
||
|
* effect. That is, any metadata
|
||
|
* should be unaffected. In addition, subclasses are encouraged to
|
||
|
* check for initial and trailing identical characters, and make a
|
||
|
* smaller replacement if possible. This will preserve as much
|
||
|
* metadata as possible.
|
||
|
* @param start the beginning index, inclusive; <code>0 <= start
|
||
|
* <= limit</code>.
|
||
|
* @param limit the ending index, exclusive; <code>start <= limit
|
||
|
* <= length()</code>.
|
||
|
* @param chars the text to replace characters <code>start</code>
|
||
|
* to <code>limit - 1</code>
|
||
|
* @param charsStart the beginning index into <code>chars</code>,
|
||
|
* inclusive; <code>0 <= start <= limit</code>.
|
||
|
* @param charsLen the number of characters of <code>chars</code>.
|
||
|
*/
|
||
|
void replace(int start, int limit, char[] chars,
|
||
|
int charsStart, int charsLen);
|
||
|
// Note: We use length rather than limit to conform to StringBuffer
|
||
|
// and System.arraycopy.
|
||
|
|
||
|
/**
|
||
|
* Copies a substring of this object, retaining metadata.
|
||
|
* This method is used to duplicate or reorder substrings.
|
||
|
* The destination index must not overlap the source range.
|
||
|
* If <code>hasMetaData()</code> returns false, subclasses
|
||
|
* may use the naive implementation:
|
||
|
*
|
||
|
* <pre> char[] text = new char[limit - start];
|
||
|
* getChars(start, limit, text, 0);
|
||
|
* replace(dest, dest, text, 0, limit - start);</pre>
|
||
|
*
|
||
|
* @param start the beginning index, inclusive; <code>0 <= start <=
|
||
|
* limit</code>.
|
||
|
* @param limit the ending index, exclusive; <code>start <= limit <=
|
||
|
* length()</code>.
|
||
|
* @param dest the destination index. The characters from
|
||
|
* <code>start..limit-1</code> will be copied to <code>dest</code>.
|
||
|
* Implementations of this method may assume that <code>dest <= start ||
|
||
|
* dest >= limit</code>.
|
||
|
*/
|
||
|
void copy(int start, int limit, int dest);
|
||
|
|
||
|
/**R
|
||
|
* Returns true if this object contains metadata. If a
|
||
|
* Replaceable object has metadata, calls to the Replaceable API
|
||
|
* must be made so as to preserve metadata. If it does not, calls
|
||
|
* to the Replaceable API may be optimized to improve performance.
|
||
|
* @return true if this object contains metadata
|
||
|
*/
|
||
|
boolean hasMetaData();
|
||
|
}
|