Search in sources :

Example 1 with WPUnderlineSpan

use of org.wordpress.android.util.helpers.WPUnderlineSpan in project WordPress-Android by wordpress-mobile.

the class WPHtml method withinParagraph.

private static void withinParagraph(StringBuilder out, Spanned text, int start, int end, int nl, boolean last) {
    int next;
    for (int i = start; i < end; i = next) {
        next = text.nextSpanTransition(i, end, CharacterStyle.class);
        CharacterStyle[] style = text.getSpans(i, next, CharacterStyle.class);
        for (int j = 0; j < style.length; j++) {
            if (style[j] instanceof StyleSpan) {
                int s = ((StyleSpan) style[j]).getStyle();
                if ((s & Typeface.BOLD) != 0) {
                    out.append("<strong>");
                }
                if ((s & Typeface.ITALIC) != 0) {
                    out.append("<em>");
                }
            }
            if (style[j] instanceof TypefaceSpan) {
                String s = ((TypefaceSpan) style[j]).getFamily();
                if (s.equals("monospace")) {
                    out.append("<tt>");
                }
            }
            if (style[j] instanceof SuperscriptSpan) {
                out.append("<sup>");
            }
            if (style[j] instanceof SubscriptSpan) {
                out.append("<sub>");
            }
            if (style[j] instanceof WPUnderlineSpan) {
                out.append("<u>");
            }
            if (style[j] instanceof StrikethroughSpan) {
                out.append("<strike>");
            }
            if (style[j] instanceof URLSpan) {
                out.append("<a href=\"");
                out.append(((URLSpan) style[j]).getURL());
                out.append("\">");
            }
            if (style[j] instanceof MediaGalleryImageSpan) {
                out.append(getGalleryShortcode((MediaGalleryImageSpan) style[j]));
            } else if (style[j] instanceof WPImageSpan && ((WPImageSpan) style[j]).getMediaFile().getMediaId() != null) {
                out.append(getContent((WPImageSpan) style[j]));
            } else if (style[j] instanceof WPImageSpan) {
                out.append("<img src=\"");
                out.append(((WPImageSpan) style[j]).getSource());
                out.append("\" android-uri=\"" + ((WPImageSpan) style[j]).getImageSource().toString() + "\"");
                out.append(" />");
                // Don't output the dummy character underlying the image.
                i = next;
            }
            if (style[j] instanceof AbsoluteSizeSpan) {
                out.append("<font size =\"");
                out.append(((AbsoluteSizeSpan) style[j]).getSize() / 6);
                out.append("\">");
            }
            if (style[j] instanceof ForegroundColorSpan) {
                out.append("<font color =\"#");
                String color = Integer.toHexString(((ForegroundColorSpan) style[j]).getForegroundColor() + 0x01000000);
                while (color.length() < 6) {
                    color = "0" + color;
                }
                out.append(color);
                out.append("\">");
            }
        }
        processWPImage(out, text, i, next);
        for (int j = style.length - 1; j >= 0; j--) {
            if (style[j] instanceof ForegroundColorSpan) {
                out.append("</font>");
            }
            if (style[j] instanceof AbsoluteSizeSpan) {
                out.append("</font>");
            }
            if (style[j] instanceof URLSpan) {
                out.append("</a>");
            }
            if (style[j] instanceof StrikethroughSpan) {
                out.append("</strike>");
            }
            if (style[j] instanceof WPUnderlineSpan) {
                out.append("</u>");
            }
            if (style[j] instanceof SubscriptSpan) {
                out.append("</sub>");
            }
            if (style[j] instanceof SuperscriptSpan) {
                out.append("</sup>");
            }
            if (style[j] instanceof TypefaceSpan) {
                String s = ((TypefaceSpan) style[j]).getFamily();
                if (s.equals("monospace")) {
                    out.append("</tt>");
                }
            }
            if (style[j] instanceof StyleSpan) {
                int s = ((StyleSpan) style[j]).getStyle();
                if ((s & Typeface.BOLD) != 0) {
                    out.append("</strong>");
                }
                if ((s & Typeface.ITALIC) != 0) {
                    out.append("</em>");
                }
            }
        }
    }
    String p = last ? "" : "</p>\n<p>";
    if (nl == 1) {
        out.append("<br>\n");
    } else if (nl == 2) {
        out.append(p);
    } else {
        for (int i = 2; i < nl; i++) {
            out.append("<br>");
        }
        out.append(p);
    }
}
Also used : SuperscriptSpan(android.text.style.SuperscriptSpan) ForegroundColorSpan(android.text.style.ForegroundColorSpan) WPUnderlineSpan(org.wordpress.android.util.helpers.WPUnderlineSpan) WPImageSpan(org.wordpress.android.util.helpers.WPImageSpan) SpannableString(android.text.SpannableString) URLSpan(android.text.style.URLSpan) CharacterStyle(android.text.style.CharacterStyle) AbsoluteSizeSpan(android.text.style.AbsoluteSizeSpan) StyleSpan(android.text.style.StyleSpan) SubscriptSpan(android.text.style.SubscriptSpan) MediaGalleryImageSpan(org.wordpress.android.util.helpers.MediaGalleryImageSpan) TypefaceSpan(android.text.style.TypefaceSpan) StrikethroughSpan(android.text.style.StrikethroughSpan)

Example 2 with WPUnderlineSpan

use of org.wordpress.android.util.helpers.WPUnderlineSpan in project WordPress-Android by wordpress-mobile.

the class LegacyEditorFragment method afterTextChanged.

@Override
public void afterTextChanged(Editable s) {
    int position = Selection.getSelectionStart(mContentEditText.getText());
    if ((mIsBackspace && position != 1) || mLastPosition == position || !mIsLocalDraft)
        return;
    if (position < 0) {
        position = 0;
    }
    mLastPosition = position;
    if (position > 0) {
        if (mStyleStart > position) {
            mStyleStart = position - 1;
        }
        boolean shouldBold = mBoldToggleButton.isChecked();
        boolean shouldEm = mEmToggleButton.isChecked();
        boolean shouldUnderline = mUnderlineToggleButton.isChecked();
        boolean shouldStrike = mStrikeToggleButton.isChecked();
        boolean shouldQuote = mBquoteToggleButton.isChecked();
        Object[] allSpans = s.getSpans(mStyleStart, position, Object.class);
        for (Object span : allSpans) {
            if (span instanceof StyleSpan) {
                StyleSpan styleSpan = (StyleSpan) span;
                if (styleSpan.getStyle() == Typeface.BOLD)
                    shouldBold = false;
                else if (styleSpan.getStyle() == Typeface.ITALIC)
                    shouldEm = false;
            } else if (span instanceof WPUnderlineSpan) {
                shouldUnderline = false;
            } else if (span instanceof StrikethroughSpan) {
                shouldStrike = false;
            } else if (span instanceof QuoteSpan) {
                shouldQuote = false;
            }
        }
        if (shouldBold)
            s.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), mStyleStart, position, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        if (shouldEm)
            s.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), mStyleStart, position, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        if (shouldUnderline)
            s.setSpan(new WPUnderlineSpan(), mStyleStart, position, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        if (shouldStrike)
            s.setSpan(new StrikethroughSpan(), mStyleStart, position, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        if (shouldQuote)
            s.setSpan(new QuoteSpan(), mStyleStart, position, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    }
}
Also used : WPUnderlineSpan(org.wordpress.android.util.helpers.WPUnderlineSpan) StyleSpan(android.text.style.StyleSpan) QuoteSpan(android.text.style.QuoteSpan) StrikethroughSpan(android.text.style.StrikethroughSpan)

Example 3 with WPUnderlineSpan

use of org.wordpress.android.util.helpers.WPUnderlineSpan in project WordPress-Android by wordpress-mobile.

the class LegacyEditorFragment method onSelectionChanged.

@Override
public void onSelectionChanged() {
    if (!mIsLocalDraft) {
        return;
    }
    final Spannable s = mContentEditText.getText();
    if (s == null)
        return;
    // set toggle buttons if cursor is inside of a matching span
    mStyleStart = mContentEditText.getSelectionStart();
    Object[] spans = s.getSpans(mContentEditText.getSelectionStart(), mContentEditText.getSelectionStart(), Object.class);
    mBoldToggleButton.setChecked(false);
    mEmToggleButton.setChecked(false);
    mBquoteToggleButton.setChecked(false);
    mUnderlineToggleButton.setChecked(false);
    mStrikeToggleButton.setChecked(false);
    for (Object span : spans) {
        if (span instanceof StyleSpan) {
            StyleSpan ss = (StyleSpan) span;
            if (ss.getStyle() == android.graphics.Typeface.BOLD) {
                mBoldToggleButton.setChecked(true);
            }
            if (ss.getStyle() == android.graphics.Typeface.ITALIC) {
                mEmToggleButton.setChecked(true);
            }
        }
        if (span instanceof QuoteSpan) {
            mBquoteToggleButton.setChecked(true);
        }
        if (span instanceof WPUnderlineSpan) {
            mUnderlineToggleButton.setChecked(true);
        }
        if (span instanceof StrikethroughSpan) {
            mStrikeToggleButton.setChecked(true);
        }
    }
}
Also used : WPUnderlineSpan(org.wordpress.android.util.helpers.WPUnderlineSpan) StyleSpan(android.text.style.StyleSpan) QuoteSpan(android.text.style.QuoteSpan) Spannable(android.text.Spannable) StrikethroughSpan(android.text.style.StrikethroughSpan)

Example 4 with WPUnderlineSpan

use of org.wordpress.android.util.helpers.WPUnderlineSpan in project WordPress-Android by wordpress-mobile.

the class HtmlToSpannedConverter method handleEndTag.

private void handleEndTag(String tag) {
    if (mPost != null) {
        if (!mPost.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);
    }
}
Also used : SuperscriptSpan(android.text.style.SuperscriptSpan) WPUnderlineSpan(org.wordpress.android.util.helpers.WPUnderlineSpan) RelativeSizeSpan(android.text.style.RelativeSizeSpan) QuoteSpan(android.text.style.QuoteSpan) StyleSpan(android.text.style.StyleSpan) SubscriptSpan(android.text.style.SubscriptSpan) TypefaceSpan(android.text.style.TypefaceSpan) StrikethroughSpan(android.text.style.StrikethroughSpan)

Aggregations

StrikethroughSpan (android.text.style.StrikethroughSpan)4 StyleSpan (android.text.style.StyleSpan)4 WPUnderlineSpan (org.wordpress.android.util.helpers.WPUnderlineSpan)4 QuoteSpan (android.text.style.QuoteSpan)3 SubscriptSpan (android.text.style.SubscriptSpan)2 SuperscriptSpan (android.text.style.SuperscriptSpan)2 TypefaceSpan (android.text.style.TypefaceSpan)2 Spannable (android.text.Spannable)1 SpannableString (android.text.SpannableString)1 AbsoluteSizeSpan (android.text.style.AbsoluteSizeSpan)1 CharacterStyle (android.text.style.CharacterStyle)1 ForegroundColorSpan (android.text.style.ForegroundColorSpan)1 RelativeSizeSpan (android.text.style.RelativeSizeSpan)1 URLSpan (android.text.style.URLSpan)1 MediaGalleryImageSpan (org.wordpress.android.util.helpers.MediaGalleryImageSpan)1 WPImageSpan (org.wordpress.android.util.helpers.WPImageSpan)1