Loading core/java/android/text/SpannableStringBuilder.java +53 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, /** * Return the char at the specified offset within the buffer. */ @Override public char charAt(int where) { int len = length(); if (where < 0) { Loading @@ -123,6 +124,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, /** * Return the number of chars in the buffer. */ @Override public int length() { return mText.length - mGapLength; } Loading Loading @@ -205,16 +207,19 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public SpannableStringBuilder insert(int where, CharSequence tb, int start, int end) { return replace(where, where, tb, start, end); } // Documentation from interface @Override public SpannableStringBuilder insert(int where, CharSequence tb) { return replace(where, where, tb, 0, tb.length()); } // Documentation from interface @Override public SpannableStringBuilder delete(int start, int end) { SpannableStringBuilder ret = replace(start, end, "", 0, 0); Loading @@ -225,11 +230,13 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public void clear() { replace(0, length(), "", 0, 0); } // Documentation from interface @Override public void clearSpans() { for (int i = mSpanCount - 1; i >= 0; i--) { Object what = mSpans[i]; Loading @@ -249,18 +256,21 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public SpannableStringBuilder append(CharSequence text) { int length = length(); return replace(length, length, text, 0, text.length()); } // Documentation from interface @Override public SpannableStringBuilder append(CharSequence text, int start, int end) { int length = length(); return replace(length, length, text, start, end); } // Documentation from interface @Override public SpannableStringBuilder append(char text) { return append(String.valueOf(text)); } Loading Loading @@ -409,11 +419,13 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public SpannableStringBuilder replace(int start, int end, CharSequence tb) { return replace(start, end, tb, 0, tb.length()); } // Documentation from interface @Override public SpannableStringBuilder replace(final int start, final int end, CharSequence tb, int tbstart, int tbend) { int filtercount = mFilters.length; Loading Loading @@ -514,6 +526,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * The flags determine how the span will behave when text is * inserted at the start or end of the span's range. */ @Override public void setSpan(Object what, int start, int end, int flags) { setSpan(true, what, start, end, flags); } Loading Loading @@ -618,6 +631,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, /** * Remove the specified markup object from the buffer. */ @Override public void removeSpan(Object what) { for (int i = mSpanCount - 1; i >= 0; i--) { if (mSpans[i] == what) { Loading Loading @@ -649,6 +663,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return the buffer offset of the beginning of the specified * markup object, or -1 if it is not attached to this buffer. */ @Override public int getSpanStart(Object what) { int count = mSpanCount; Object[] spans = mSpans; Loading @@ -671,6 +686,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return the buffer offset of the end of the specified * markup object, or -1 if it is not attached to this buffer. */ @Override public int getSpanEnd(Object what) { int count = mSpanCount; Object[] spans = mSpans; Loading @@ -693,6 +709,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return the flags of the end of the specified * markup object, or 0 if it is not attached to this buffer. */ @Override public int getSpanFlags(Object what) { int count = mSpanCount; Object[] spans = mSpans; Loading @@ -711,6 +728,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * the specified range of the buffer. The kind may be Object.class to get * a list of all the spans regardless of type. */ @Override @SuppressWarnings("unchecked") public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) { int spanCount = mSpanCount; Loading Loading @@ -812,6 +830,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * equal to <code>limit</code> where a span of the specified type * begins or ends. */ @Override public int nextSpanTransition(int start, int limit, Class kind) { int count = mSpanCount; Object[] spans = mSpans; Loading Loading @@ -846,6 +865,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return a new CharSequence containing a copy of the specified * range of this buffer, including the overlapping spans. */ @Override public CharSequence subSequence(int start, int end) { return new SpannableStringBuilder(this, start, end); } Loading @@ -854,6 +874,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Copy the specified range of chars from this buffer into the * specified array, beginning at the specified offset. */ @Override public void getChars(int start, int end, char[] dest, int destoff) { checkRange("getChars", start, end); Loading Loading @@ -1049,6 +1070,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Canvas to use internally. * {@hide} */ @Override public void drawText(Canvas c, int start, int end, float x, float y, Paint p) { checkRange("drawText", start, end); Loading @@ -1071,6 +1093,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Canvas to use internally. * {@hide} */ @Override public void drawTextRun(Canvas c, int start, int end, int contextStart, int contextEnd, float x, float y, int flags, Paint p) { Loading @@ -1095,6 +1118,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Paint to use internally. * {@hide} */ @Override public float measureText(int start, int end, Paint p) { checkRange("measureText", start, end); Loading @@ -1119,6 +1143,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Paint to use internally. * {@hide} */ @Override public int getTextWidths(int start, int end, float[] widths, Paint p) { checkRange("getTextWidths", start, end); Loading @@ -1144,6 +1169,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Paint to use internally. * {@hide} */ @Override public float getTextRunAdvances(int start, int end, int contextStart, int contextEnd, int flags, float[] advances, int advancesPos, Paint p) { Loading @@ -1169,6 +1195,31 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, return ret; } /** * Returns the next cursor position in the run. This avoids placing the cursor between * surrogates, between characters that form conjuncts, between base characters and combining * marks, or within a reordering cluster. * * <p>The context is the shaping context for cursor movement, generally the bounds of the metric * span enclosing the cursor in the direction of movement. * <code>contextStart</code>, <code>contextEnd</code> and <code>offset</code> are relative to * the start of the string.</p> * * <p>If cursorOpt is {@link Paint#CURSOR_AT} and the offset is not a valid cursor position, * this returns -1. Otherwise this will never return a value before contextStart or after * contextEnd.</p> * * @param contextStart the start index of the context * @param contextEnd the (non-inclusive) end index of the context * @param flags either {@link Paint#DIRECTION_RTL} or {@link Paint#DIRECTION_LTR} * @param offset the cursor position to move from * @param cursorOpt how to move the cursor, one of {@link Paint#CURSOR_AFTER}, * {@link Paint#CURSOR_AT_OR_AFTER}, {@link Paint#CURSOR_BEFORE}, * {@link Paint#CURSOR_AT_OR_BEFORE}, or {@link Paint#CURSOR_AT} * @param p the Paint object that is requesting this information * @return the offset of the next position, or -1 */ @Override public int getTextRunCursor(int contextStart, int contextEnd, int flags, int offset, int cursorOpt, Paint p) { Loading @@ -1193,6 +1244,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public void setFilters(InputFilter[] filters) { if (filters == null) { throw new IllegalArgumentException(); Loading @@ -1202,6 +1254,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public InputFilter[] getFilters() { return mFilters; } Loading Loading
core/java/android/text/SpannableStringBuilder.java +53 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, /** * Return the char at the specified offset within the buffer. */ @Override public char charAt(int where) { int len = length(); if (where < 0) { Loading @@ -123,6 +124,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, /** * Return the number of chars in the buffer. */ @Override public int length() { return mText.length - mGapLength; } Loading Loading @@ -205,16 +207,19 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public SpannableStringBuilder insert(int where, CharSequence tb, int start, int end) { return replace(where, where, tb, start, end); } // Documentation from interface @Override public SpannableStringBuilder insert(int where, CharSequence tb) { return replace(where, where, tb, 0, tb.length()); } // Documentation from interface @Override public SpannableStringBuilder delete(int start, int end) { SpannableStringBuilder ret = replace(start, end, "", 0, 0); Loading @@ -225,11 +230,13 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public void clear() { replace(0, length(), "", 0, 0); } // Documentation from interface @Override public void clearSpans() { for (int i = mSpanCount - 1; i >= 0; i--) { Object what = mSpans[i]; Loading @@ -249,18 +256,21 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public SpannableStringBuilder append(CharSequence text) { int length = length(); return replace(length, length, text, 0, text.length()); } // Documentation from interface @Override public SpannableStringBuilder append(CharSequence text, int start, int end) { int length = length(); return replace(length, length, text, start, end); } // Documentation from interface @Override public SpannableStringBuilder append(char text) { return append(String.valueOf(text)); } Loading Loading @@ -409,11 +419,13 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public SpannableStringBuilder replace(int start, int end, CharSequence tb) { return replace(start, end, tb, 0, tb.length()); } // Documentation from interface @Override public SpannableStringBuilder replace(final int start, final int end, CharSequence tb, int tbstart, int tbend) { int filtercount = mFilters.length; Loading Loading @@ -514,6 +526,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * The flags determine how the span will behave when text is * inserted at the start or end of the span's range. */ @Override public void setSpan(Object what, int start, int end, int flags) { setSpan(true, what, start, end, flags); } Loading Loading @@ -618,6 +631,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, /** * Remove the specified markup object from the buffer. */ @Override public void removeSpan(Object what) { for (int i = mSpanCount - 1; i >= 0; i--) { if (mSpans[i] == what) { Loading Loading @@ -649,6 +663,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return the buffer offset of the beginning of the specified * markup object, or -1 if it is not attached to this buffer. */ @Override public int getSpanStart(Object what) { int count = mSpanCount; Object[] spans = mSpans; Loading @@ -671,6 +686,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return the buffer offset of the end of the specified * markup object, or -1 if it is not attached to this buffer. */ @Override public int getSpanEnd(Object what) { int count = mSpanCount; Object[] spans = mSpans; Loading @@ -693,6 +709,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return the flags of the end of the specified * markup object, or 0 if it is not attached to this buffer. */ @Override public int getSpanFlags(Object what) { int count = mSpanCount; Object[] spans = mSpans; Loading @@ -711,6 +728,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * the specified range of the buffer. The kind may be Object.class to get * a list of all the spans regardless of type. */ @Override @SuppressWarnings("unchecked") public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) { int spanCount = mSpanCount; Loading Loading @@ -812,6 +830,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * equal to <code>limit</code> where a span of the specified type * begins or ends. */ @Override public int nextSpanTransition(int start, int limit, Class kind) { int count = mSpanCount; Object[] spans = mSpans; Loading Loading @@ -846,6 +865,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Return a new CharSequence containing a copy of the specified * range of this buffer, including the overlapping spans. */ @Override public CharSequence subSequence(int start, int end) { return new SpannableStringBuilder(this, start, end); } Loading @@ -854,6 +874,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Copy the specified range of chars from this buffer into the * specified array, beginning at the specified offset. */ @Override public void getChars(int start, int end, char[] dest, int destoff) { checkRange("getChars", start, end); Loading Loading @@ -1049,6 +1070,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Canvas to use internally. * {@hide} */ @Override public void drawText(Canvas c, int start, int end, float x, float y, Paint p) { checkRange("drawText", start, end); Loading @@ -1071,6 +1093,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Canvas to use internally. * {@hide} */ @Override public void drawTextRun(Canvas c, int start, int end, int contextStart, int contextEnd, float x, float y, int flags, Paint p) { Loading @@ -1095,6 +1118,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Paint to use internally. * {@hide} */ @Override public float measureText(int start, int end, Paint p) { checkRange("measureText", start, end); Loading @@ -1119,6 +1143,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Paint to use internally. * {@hide} */ @Override public int getTextWidths(int start, int end, float[] widths, Paint p) { checkRange("getTextWidths", start, end); Loading @@ -1144,6 +1169,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, * Don't call this yourself -- exists for Paint to use internally. * {@hide} */ @Override public float getTextRunAdvances(int start, int end, int contextStart, int contextEnd, int flags, float[] advances, int advancesPos, Paint p) { Loading @@ -1169,6 +1195,31 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, return ret; } /** * Returns the next cursor position in the run. This avoids placing the cursor between * surrogates, between characters that form conjuncts, between base characters and combining * marks, or within a reordering cluster. * * <p>The context is the shaping context for cursor movement, generally the bounds of the metric * span enclosing the cursor in the direction of movement. * <code>contextStart</code>, <code>contextEnd</code> and <code>offset</code> are relative to * the start of the string.</p> * * <p>If cursorOpt is {@link Paint#CURSOR_AT} and the offset is not a valid cursor position, * this returns -1. Otherwise this will never return a value before contextStart or after * contextEnd.</p> * * @param contextStart the start index of the context * @param contextEnd the (non-inclusive) end index of the context * @param flags either {@link Paint#DIRECTION_RTL} or {@link Paint#DIRECTION_LTR} * @param offset the cursor position to move from * @param cursorOpt how to move the cursor, one of {@link Paint#CURSOR_AFTER}, * {@link Paint#CURSOR_AT_OR_AFTER}, {@link Paint#CURSOR_BEFORE}, * {@link Paint#CURSOR_AT_OR_BEFORE}, or {@link Paint#CURSOR_AT} * @param p the Paint object that is requesting this information * @return the offset of the next position, or -1 */ @Override public int getTextRunCursor(int contextStart, int contextEnd, int flags, int offset, int cursorOpt, Paint p) { Loading @@ -1193,6 +1244,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public void setFilters(InputFilter[] filters) { if (filters == null) { throw new IllegalArgumentException(); Loading @@ -1202,6 +1254,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable, } // Documentation from interface @Override public InputFilter[] getFilters() { return mFilters; } Loading