public void setPenAttr(CaptionPenAttr penAttr) { mCharacterStyles.clear(); if (penAttr.italic) { mCharacterStyles.add(new StyleSpan(Typeface.ITALIC)); } if (penAttr.underline) { mCharacterStyles.add(new UnderlineSpan()); } switch (penAttr.penSize) { case CaptionPenAttr.PEN_SIZE_SMALL: mCharacterStyles.add(new RelativeSizeSpan(PROPORTION_PEN_SIZE_SMALL)); break; case CaptionPenAttr.PEN_SIZE_LARGE: mCharacterStyles.add(new RelativeSizeSpan(PROPORTION_PEN_SIZE_LARGE)); break; } switch (penAttr.penOffset) { case CaptionPenAttr.OFFSET_SUBSCRIPT: mCharacterStyles.add(new SubscriptSpan()); break; case CaptionPenAttr.OFFSET_SUPERSCRIPT: mCharacterStyles.add(new SuperscriptSpan()); break; } }
private void handleEndTag(CharacterStyle style) { if (style instanceof URLSpan) { mOut.append("</a>"); } else if (style instanceof TypefaceSpan) { mOut.append("</font>"); } else if (style instanceof ForegroundColorSpan) { mOut.append("</font>"); } else if (style instanceof BackgroundColorSpan) { mOut.append("</font>"); } else if (style instanceof AbsoluteSizeSpan) { mOut.append("</font>"); } else if (style instanceof StrikethroughSpan) { mOut.append("</strike>"); } else if (style instanceof SubscriptSpan) { mOut.append("</sub>"); } else if (style instanceof SuperscriptSpan) { mOut.append("</sup>"); } else if (style instanceof UnderlineSpan) { mOut.append("</u>"); } else if (style instanceof BoldSpan) { mOut.append("</b>"); } else if (style instanceof ItalicSpan) { mOut.append("</i>"); } }
@Test public void subscript_should_add_only_one_span() { spanBuilder.style(range, EZ.SUBSCRIPT) .apply(); verify((SpanEZ) spanBuilder, times(1)) .addSpan(isA(TargetRange.class), isA(SubscriptSpan.class)); }
public MIP_TextStyle setSubscriptSpan(int start, int end) { if (spannableString == null) { return this; } spannableString.setSpan(new SubscriptSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置前景色为洋红色 return this; }
/** * @see SubscriptSpan#SubscriptSpan() */ public static Span subscript() { return new Span(new SpanBuilder() { @Override public Object build() { return new SubscriptSpan(); } }); }
/** * SubscriptSpan,设置下标 */ private void subscript () { SpannableString string = new SpannableString("为文字设置下划线"); RelativeSizeSpan sizeSpan = new RelativeSizeSpan(0.7f); string.setSpan(sizeSpan, 5, string.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); SubscriptSpan superscriptSpan = new SubscriptSpan(); string.setSpan(superscriptSpan, 5, string.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); bgtext.setText(string); }
public TextDecorator setSubscript(final String... texts) { int index; for (String text : texts) { if (content.contains(text)) { index = content.indexOf(text); decoratedContent.setSpan(new SubscriptSpan(), index, index + text.length(), flags); } } return this; }
public void attachToView(ViewGroup targetView) { for (int i = 0; i < 3; ++i) { ViewGroup g = (ViewGroup) targetView.getChildAt(i); TextView label = (TextView) g.getChildAt(0); Slider slider = (Slider) g.getChildAt(1); TextView valueText = (TextView) g.getChildAt(2); SliderPositionListener positionListener = new LedValueUpdater(valueText, i); slider.setPositionListener(positionListener); LabelClickListener leftLabelListener = new LabelClickListener(slider, 0); label.setOnClickListener(leftLabelListener); LabelClickListener rightLabelListener = new LabelClickListener(slider, 1); valueText.setOnClickListener(rightLabelListener); valueText.setText("0"); if (i == 0) { String labelText = "Led"; SpannableStringBuilder ssb = new SpannableStringBuilder(labelText); ssb.append(String.valueOf(mLEDNumber)); int spanStart = labelText.length(); int spanEnd = spanStart + 1; ssb.setSpan(new SubscriptSpan(), spanStart, spanEnd, 0); ssb.setSpan(new RelativeSizeSpan(0.7f), spanStart, spanEnd, 0); label.setText(ssb); slider.setSliderBackground(mRed); } else { label.setText(""); if (i == 1) { slider.setSliderBackground(mGreen); } else { slider.setSliderBackground(mBlue); } } } }
@Override public void onSpanClick(SpanButton v) { View view=richEdit.findFocus(); BaseRichEditText editText; if(view instanceof BaseRichEditText){ editText=(BaseRichEditText)view; }else { return; } TypedValue typedValue = new TypedValue(); getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true); int color=typedValue.data; switch (v.getSpan()){ case SpanButton.SPAN_BOLD:editText.toggleBold();if(editText.isBold()){editText.applyStyleSpan(Typeface.BOLD);v.setColor(color);}else {editText.removeSelectionSpan(Typeface.BOLD);v.setColor(0xff757575);}break; case SpanButton.SPAN_ITALIC:editText.toggleItalic();if(editText.isItalic()){editText.applyStyleSpan(Typeface.ITALIC);v.setColor(color);}else {editText.removeSelectionSpan(Typeface.ITALIC);v.setColor(0xff757575);}break; case SpanButton.SPAN_STRIKETHROUGH:editText.toggleStrikethrough();if(editText.isStrikethrough()){editText.applySelectionSpan(StrikethroughSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(StrikethroughSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_UNDERLINE:editText.toggleUnderLine();if(editText.isUnderLine()){editText.applySelectionSpan(UnderlineSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(UnderlineSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_FOREGROUND:editText.toggleForegroundColor();if(editText.isForegroundColor()){editText.applyColorSpan(ForegroundColorSpan.class,v.getGroundColor());v.setColor(v.getGroundColor());}else {editText.removeSelectionSpan(ForegroundColorSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_BACKGROUND:editText.toggleBackgroundColor();if(editText.isBackgroundColor()){editText.applyColorSpan(BackgroundColorSpan.class,v.getGroundColor());v.setColor(v.getGroundColor());}else {editText.removeSelectionSpan(BackgroundColorSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_SUBSCRIPT:editText.toggleSubscript();if(editText.isSubscript()){editText.applyScriptSpan(SubscriptSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(SubscriptSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_SUPERSCRIPT:editText.toggleSuperscript();if(editText.isSuperscript()){editText.applyScriptSpan(SuperscriptSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(SuperscriptSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_TODO:richEdit.addTodoLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; case SpanButton.SPAN_DOT:richEdit.addDotLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; case SpanButton.SPAN_NUMERIC:richEdit.addNumericLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; case SpanButton.SPAN_PHOTO:richEdit.addPhotoLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; //case SpanButton.SPAN_TEXTSIZE:editText.changeSize();editText.applyRelativeSpan();break; //case SpanButton.SPAN_BOLD:editText.toggleBold();if(editText.isBold()){editText.applyStyleSpan(Typeface.BOLD);v.setColor(color);}else {editText.removeSelectionSpan(Typeface.BOLD);v.setColor(0xff757575);}break; } }
private void processSub( boolean opening, Editable output) { int len = output.length(); if(opening) { //output.setSpan(new RelativeSizeSpan(0.5f), len, len, Spannable.SPAN_MARK_MARK); output.setSpan(new SubscriptSpan(), len, len, Spannable.SPAN_MARK_MARK); //output.setSpan(new AbsoluteSizeSpan(scriptSize,false), len, len, Spannable.SPAN_MARK_MARK); } else { Object obj = getLast(output, SubscriptSpan.class); int where = output.getSpanStart(obj); output.removeSpan(obj); //obj = getLast(output, RelativeSizeSpan.class); //output.removeSpan(obj); if (where != len&&where>=0) { //output.setSpan(new AbsoluteSizeSpan(scriptSize, false), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); output.setSpan(new RelativeSizeSpan(0.7f), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); output.setSpan(new SubscriptSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // obj = getLast(output, AbsoluteSizeSpan.class); // where = output.getSpanStart(obj); // output.removeSpan(obj); // if (where != len) { // output.setSpan(new AbsoluteSizeSpan(scriptSize, false), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // //output.setSpan(new RelativeSizeSpan(0.5f), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // } } }
/** * 设置文字下标 */ private void showSubscriptSpan() { TextView tvSubScriptSpan = (TextView) findViewById(R.id.tv_subscript_span); SpannableString spannableString = new SpannableString("这是第七行设置文字下标:CO2"); SubscriptSpan subscriptSpan = new SubscriptSpan(); spannableString.setSpan(subscriptSpan, spannableString.length()-1, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tvSubScriptSpan.setText(spannableString); }
private static void setUpSubscriptSpan(Span span, SpannableString ss, int start, int end) { if (span.isSubscript()) { ss.setSpan( new SubscriptSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }
public static Node subscript(Object... nodes) { return new SpanNode(new SubscriptSpan(), nodes); }
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) { builder.setSpan(new SubscriptSpan(), start, end, 33); builder.setSpan(new RelativeSizeSpan(0.8f), start, end, 33); }
public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end, SpanStack spanStack) { spanStack.pushSpan(new SubscriptSpan(), start, end); }
private void applySpannablesTo(Piece aPiece, SpannableString finalString, int start, int end) { if(aPiece.subscript) { finalString.setSpan(new SubscriptSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(aPiece.superscript) { finalString.setSpan(new SuperscriptSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(aPiece.strike) { finalString.setSpan(new StrikethroughSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(aPiece.underline) { finalString.setSpan(new UnderlineSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // style finalString.setSpan(new StyleSpan(aPiece.style), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // absolute text size finalString.setSpan(new AbsoluteSizeSpan(aPiece.textSize), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // relative text size finalString.setSpan(new RelativeSizeSpan(aPiece.textSizeRelative), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // text color finalString.setSpan(new ForegroundColorSpan(aPiece.textColor), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // background color if(aPiece.backgroundColor != -1) { finalString.setSpan(new BackgroundColorSpan(aPiece.backgroundColor), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { endCssStyle(tag, mSpannableStringBuilder); endBlockElement(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("ul")) { endBlockElement(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("li")) { endLi(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { endBlockElement(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("span")) { endCssStyle(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(tag, mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(tag, mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(tag, mSpannableStringBuilder, Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(tag, mSpannableStringBuilder, Small.class, new RelativeSizeSpan(0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { endBlockquote(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("tt")) { end(tag, mSpannableStringBuilder, Monospace.class, new TypefaceSpan("monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(tag, mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("del")) { end(tag, mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("s")) { end(tag, mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(tag, mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(tag, mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(tag, mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { endHeading(tag, mSpannableStringBuilder); } else if (mTagHandler != null) { mTagHandler.handleTag(false, tag, null, mSpannableStringBuilder, mReader); } }
@Override public void apply(Spannable s, TextView tv) { s.setSpan(new SubscriptSpan(), 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new RelativeSizeSpan(0.5f), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); }
public StyledText appendSubscript(CharSequence text){ return append(text, new SubscriptSpan()); }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { endCssStyle(mSpannableStringBuilder); endBlockElement(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("ul")) { endBlockElement(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("li")) { endLi(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { endBlockElement(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("span")) { endCssStyle(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(mSpannableStringBuilder, Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(mSpannableStringBuilder, Small.class, new RelativeSizeSpan(0.875f)); } else if (tag.equalsIgnoreCase("font")) { endFont(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { endBlockquote(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("tt")) { end(mSpannableStringBuilder, Monospace.class, new TypefaceSpan("monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("del")) { end(mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("s")) { end(mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { endHeading(mSpannableStringBuilder); } else if (mTagHandler != null) { mTagHandler.handleTag(false, tag, mSpannableStringBuilder, mReader); } }
public TextDecorator setSubscript(final int start, final int end) { checkIndexOutOfBoundsException(start, end); decoratedContent.setSpan(new SubscriptSpan(), start, end, flags); return this; }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_spannable); ButterKnife.bind(this); SpannableString spannableString = new SpannableString("前景色背景色相对大小删除线下划线" + "上标小上标下标粗体斜体显示图片点击超链接"); ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0099EE")); BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.parseColor("#AC00FF30")); RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(2f); StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); UnderlineSpan underlineSpan = new UnderlineSpan(); SuperscriptSpan superscriptSpan = new SuperscriptSpan(); RelativeSizeSpan relativeSizeSpan2 = new RelativeSizeSpan(0.5f); SubscriptSpan subscriptSpan = new SubscriptSpan(); StyleSpan styleSpan_B = new StyleSpan(Typeface.BOLD); StyleSpan styleSpan_I = new StyleSpan(Typeface.ITALIC); ImageSpan imageSpan = new ImageSpan(this, R.mipmap.ic_launcher); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(SpannableActivity.this, "点击", Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) { // 文字不变色 ds.setUnderlineText(false); } }; URLSpan urlSpan = new URLSpan("http://www.sdwfqin.com"); spannableString.setSpan(foregroundColorSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(backgroundColorSpan, 3, 6, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(relativeSizeSpan, 6, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(strikethroughSpan, 10, 13, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(underlineSpan, 13, 16, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(superscriptSpan, 16, 21, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(relativeSizeSpan2, 18, 21, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(subscriptSpan, 21, 23, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(styleSpan_B, 23, 25, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(styleSpan_I, 25, 27, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(imageSpan, 29, 31, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(clickableSpan, 31, 33, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(urlSpan, 33, 36, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spanString.setMovementMethod(LinkMovementMethod.getInstance()); // 点击背景色 // spanString.setHighlightColor(Color.parseColor("#36969696")); // 可以点击 spanString.setText(spannableString); SpannableStringBuilder builder = new SpannableStringBuilder("哈哈哈"); builder.setSpan(foregroundColorSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); builder.append("lalala"); // 注意:如果使用toString()方法设置的样式就没有了 spanBuilder.setText(builder); }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(); } else if (tag.equalsIgnoreCase("p")) { handleP(); } else if (tag.equalsIgnoreCase("div")) { endDiv(); } else if (tag.equalsIgnoreCase("ul")) { endList(false); } else if (tag.equalsIgnoreCase("ol")) { endList(true); } else if (tag.equalsIgnoreCase("li")) { endList(); } else if (tag.equalsIgnoreCase("strong")) { end(Bold.class, new BoldSpan()); } else if (tag.equalsIgnoreCase("b")) { end(Bold.class, new BoldSpan()); } else if (tag.equalsIgnoreCase("em")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("cite")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("dfn")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("i")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("del")) { end(Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("big")) { end(Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(Small.class, new RelativeSizeSpan(0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(); } else if (tag.equalsIgnoreCase("blockquote")) { handleP(); end(Blockquote.class, new QuoteSpan()); } else if (tag.equalsIgnoreCase("a")) { endAHref(); } else if (tag.equalsIgnoreCase("u")) { end(Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { handleP(); endHeader(); } else if (sIgnoreTags.contains(tag.toLowerCase(Locale.getDefault()))) { mIgnoreContent = false; } }
@Override public void endSubscript() { if (subScriptStart != null) setSpan(new SubscriptSpan(), subScriptStart); subScriptStart = null; }
public SimpleText subscript() { for (Range range : rangeList) { setSpan(new SubscriptSpan(), range.from, range.to, SPAN_MODE); } return this; }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(mSpannableStringBuilder, Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(mSpannableStringBuilder, Small.class, new RelativeSizeSpan(0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { handleP(mSpannableStringBuilder); end(mSpannableStringBuilder, Blockquote.class, new QuoteSpan()); } else if (tag.equalsIgnoreCase("tt")) { end(mSpannableStringBuilder, Monospace.class, new TypefaceSpan("monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { handleP(mSpannableStringBuilder); endHeader(mSpannableStringBuilder); } else if (mTagHandler != null) { mTagHandler.handleTag(false, tag, mSpannableStringBuilder, null); } }
public void removeSpan(Object what,int start,int end) { int s = getEditableText().getSpanStart(what); int e = getEditableText().getSpanEnd(what); getEditableText().removeSpan(what); end = end > e ? e : end; start = start > s ? start : s; if (what instanceof AbsoluteSizeSpan) { setSpan(new AbsoluteSizeSpan( ((AbsoluteSizeSpan) what).getSize(), false), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new AbsoluteSizeSpan( ((AbsoluteSizeSpan) what).getSize(), false), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof RelativeSizeSpan) { setSpan(new RelativeSizeSpan(((RelativeSizeSpan) what).getSizeChange()), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new RelativeSizeSpan(((RelativeSizeSpan) what).getSizeChange()), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof StyleSpan) { if (((StyleSpan) what).getStyle() == Typeface.BOLD) { setSpan(new StyleSpan(Typeface.BOLD), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new StyleSpan(Typeface.BOLD), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (((StyleSpan) what).getStyle() == Typeface.ITALIC) { setSpan(new StyleSpan(Typeface.ITALIC), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new StyleSpan(Typeface.ITALIC), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } else if (what instanceof ForegroundColorSpan) { setSpan(new ForegroundColorSpan(((ForegroundColorSpan) what).getForegroundColor()), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new ForegroundColorSpan(((ForegroundColorSpan) what).getForegroundColor()), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof BackgroundColorSpan) { setSpan(new ForegroundColorSpan(((BackgroundColorSpan) what).getBackgroundColor()), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new ForegroundColorSpan(((BackgroundColorSpan) what).getBackgroundColor()), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof UnderlineSpan) { setSpan(new UnderlineSpan(), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new UnderlineSpan(), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof StrikethroughSpan) { setSpan(new StrikethroughSpan(), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new StrikethroughSpan(), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof SubscriptSpan) { setSpan(new SubscriptSpan(), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new SubscriptSpan(), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (what instanceof SuperscriptSpan) { setSpan(new SuperscriptSpan(), s, start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); setSpan(new SuperscriptSpan(), end, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } }
@Override protected void onSelectionChanged(int selStart, int selEnd) { super.onSelectionChanged(selStart, selEnd); selStart=selStart<0?0:selStart; selEnd=selEnd<0?0:selEnd; if(selStart>selEnd) { int temp = selEnd; selEnd = selStart; selStart = temp; } if(length()==0){ return; } isUnderLine = getSelectionSpan(UnderlineSpan.class,selStart,selEnd); isStrikethrough = getSelectionSpan(StrikethroughSpan.class,selStart,selEnd); isBold = getSelectionSpan(Typeface.BOLD,selStart,selEnd); isItalic = getSelectionSpan(Typeface.ITALIC,selStart,selEnd); isSubscript = getSelectionSpan(SubscriptSpan.class,selStart,selEnd); isSuperscript = getSelectionSpan(SuperscriptSpan.class,selStart,selEnd); isForegroundColor = getSelectionSpan(ForegroundColorSpan.class,selStart,selEnd); isBackgroundColor=getSelectionSpan(BackgroundColorSpan.class,selStart,selEnd); sizeFlag=MEDIUM_TEXT; RelativeSizeSpan[] spans; if(selStart==selEnd){ if(selStart>1){ selStart=selStart-1; spans= getEditableText().getSpans(selStart, selStart+1, RelativeSizeSpan.class); }else { spans = getEditableText().getSpans(selStart, selStart, RelativeSizeSpan.class); } }else { spans= getEditableText().getSpans(selStart, selStart+1, RelativeSizeSpan.class); } if(spans.length>0){ float size=spans[0].getSizeChange(); if(size==textMultiple[SMALL_TEXT]){ sizeFlag=SMALL_TEXT; }else if(size==textMultiple[LARGE_TEXT]){ sizeFlag=LARGE_TEXT; }else { sizeFlag=MEDIUM_TEXT; } } if(selectionSpanCallback!=null) { selectionSpanCallback.callback( isUnderLine, isStrikethrough, isBold, isItalic, isSubscript, isSuperscript, isForegroundColor, colorFontForeground, isBackgroundColor, colorFontBackground, sizeFlag); } }
private void handleEndTag(String tag) { if (mTagHandler == null || !mTagHandler.handleTag(false, tag, mSpannableStringBuilder, mReader, null)) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(mSpannableStringBuilder, Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(mSpannableStringBuilder, Small.class, new RelativeSizeSpan(0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { handleP(mSpannableStringBuilder); end(mSpannableStringBuilder, Blockquote.class, new QuoteSpan()); } else if (tag.equalsIgnoreCase("tt")) { end(mSpannableStringBuilder, Monospace.class, new TypefaceSpan("monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("ins")) { end(mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(mSpannableStringBuilder, Strike.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("s")) { end(mSpannableStringBuilder, Strike.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("del")) { end(mSpannableStringBuilder, Strike.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { handleP(mSpannableStringBuilder); endHeader(mSpannableStringBuilder); } } }
private SpanPlacementInfo readSingleCharacterStyle(DataInputStream dis) throws IOException { SpanPlacementInfo spi = new SpanPlacementInfo(); spi.start = dis.readInt(); spi.end = dis.readInt(); spi.mode = dis.readInt(); int tag = dis.readInt(); switch (tag) { case -1: return spi; // we does not known this span type case -2: // underlying? int ref = dis.readInt(); spi.span = CharacterStyle.wrap((CharacterStyle) mWrittenTagsReverse.get(ref)); return spi; case 1: // BackgroundColorSpan spi.span = new BackgroundColorSpan(dis.readInt()); break; case 3: // ForegroundColorSpan spi.span = new ForegroundColorSpan(dis.readInt()); break; case 7: // StrikeTroughSpan spi.span = new StrikethroughSpan(); break; case 8: // SuggestionSpan Log.w(TAG, "SuggestionSpan not supported"); break; case 9: // UnderlineSpan spi.span = new UnderlineSpan(); break; case 10: // AbsoluteSizeSpan spi.span = new AbsoluteSizeSpan(dis.readInt(),dis.readBoolean()); break; case 11: spi.span = readDynamicDrawableSpan(dis); break; case 12: // ImageSpan spi.span = readImageSpanData(dis); break; case 13: // LocaleSpan // unsupported break; case 14: // RelativeSizeSpan spi.span = new RelativeSizeSpan(dis.readFloat()); break; case 16: // ScaleXSpan spi.span = new ScaleXSpan(dis.readFloat()); break; case 17: // StyleSpan spi.span = new StyleSpan(dis.readInt()); break; case 18: // SubscriptSpan spi.span = new SubscriptSpan(); break; case 19: // SuperscriptSpan spi.span = new SuperscriptSpan(); break; case 20: // TextAppearanceSpan // spi.span = new TextAppearanceSpan(); break; case 21: // TypefaceSpan String fontFamily = dis.readUTF(); spi.span = new TypefaceSpan(fontFamily); break; case 22: // UrlSpan spi.span = new URLSpan(dis.readUTF()); break; default: spi.span = read(tag,dis); } if (spi.span!=null) { mWrittenTagsReverse.put(mWrittenTagsReverse.size(), spi.span); } return spi; }
private void handleEndTag(String tag) { if (post != null) { if (!post.isLocalDraft()) return; } if (!mysteryTagFound) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("b")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan( Typeface.BOLD)); } else if (tag.equalsIgnoreCase("strong")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan( Typeface.BOLD)); } else if (tag.equalsIgnoreCase("cite")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(mSpannableStringBuilder, Big.class, new RelativeSizeSpan( 1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(mSpannableStringBuilder, Small.class, new RelativeSizeSpan( 0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { handleP(mSpannableStringBuilder); end(mSpannableStringBuilder, Blockquote.class, new QuoteSpan()); } else if (tag.equalsIgnoreCase("tt")) { end(mSpannableStringBuilder, Monospace.class, new TypefaceSpan( "monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, new WPUnderlineSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(mSpannableStringBuilder, Strike.class, new StrikethroughSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { handleP(mSpannableStringBuilder); endHeader(mSpannableStringBuilder); } } else { if (tag.equalsIgnoreCase("html") || tag.equalsIgnoreCase("body")) { return; } if (mysteryTagName.equals(tag)) { mysteryTagFound = false; mSpannableStringBuilder.append(mysteryTagContent); } // mTagHandler.handleTag(false, tag, mSpannableStringBuilder, // mReader, // mysteryTagContent); } }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan( Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan( Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan( Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(mSpannableStringBuilder, Big.class, new RelativeSizeSpan( 1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(mSpannableStringBuilder, Small.class, new RelativeSizeSpan( 0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { handleP(mSpannableStringBuilder); end(mSpannableStringBuilder, Blockquote.class, new QuoteSpan()); } else if (tag.equalsIgnoreCase("tt")) { end(mSpannableStringBuilder, Monospace.class, new TypefaceSpan( "monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { handleP(mSpannableStringBuilder); endHeader(mSpannableStringBuilder); } else if (mTagHandler != null) { mTagHandler.handleTag(false, tag, mSpannableStringBuilder, mReader); } }