Пользовательский Html.TagHandler и стиль двух внутренних промежутков в абзаце

Я пишу собственный TagHandler, который обрабатывает html:

      <p style="font-weight:bold">
    <span style="font-weight:normal">Chapter 2.</span>
    <span style="font-size:14.0pt;font-weight:bold">Some Title</span>
</p>

При обработке этого html я меняю tagName 'p' на 'styledParagraph' и добавляю StyleSpan(Typeface.BOLD), а 'span' на 'styledSpan'. В соответствии с проанализированными встроенными стилями для первого диапазона я добавляю StyleSpan(Typeface.NORMAL), но получаю ошибку границ PARAGRAPH.

Исходный код My tagHandler следующий:

      class StyledTagHandler(val tagName: String) : Html.TagHandler {

    private var startIndex = 0
    private var endIndex = 0

    val attributes: HashMap<String, String> = HashMap()


    override fun handleTag(opening: Boolean, tag: String, output: Editable, xmlReader: XMLReader) 
    {

        if (tag.equals("styled", true) || tag.equals("styledinline", true)) {
            // parse all property values
            parseAttributes(xmlReader)

            if (opening) {
                startHandleTag(tag, output, xmlReader);
            } else {
                endEndHandleTag(tag, output, xmlReader);
            }
        }
    }




    fun startHandleTag(tag: String, output: Editable, xmlReader: XMLReader) {
        startIndex = output.length
    }

    fun endEndHandleTag(tag: String, output: Editable, xmlReader: XMLReader) {
        endIndex = output.length

        val inlineStyles = attributes.get("style")
        val styles = StyleParser.formatCssBlock(inlineStyles)

        // FONT STYLE
        var fontStyle = -1
        if (styles.containsKey("font-weight")) {

            val fontWeight = styles["font-weight"]
            fontWeight?.let {
                fontStyle = when (fontWeight) {
                    "bold" -> Typeface.BOLD
                    "bolder" -> Typeface.BOLD
                    "600" -> Typeface.BOLD
                    "700" -> Typeface.BOLD
                    "normal" -> Typeface.NORMAL

                    else -> -1
                }
            }

            if (fontStyle != -1)
                output.setSpan(StyleSpan(fontStyle), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
        }

    }


    @Suppress("UNCHECKED_CAST")
    private fun parseAttributes(xmlReader: XMLReader) {
        try {
            val elementField = xmlReader.javaClass.getDeclaredField("theNewElement")
            elementField.isAccessible = true
            val element: Any = elementField.get(xmlReader)
            val attsField = element.javaClass.getDeclaredField("theAtts")
            attsField.isAccessible = true
            val atts: Any = attsField.get(element)
            val dataField = atts.javaClass.getDeclaredField("data")
            dataField.isAccessible = true
            val data = dataField.get(atts) as Array<String>
            val lengthField = atts.javaClass.getDeclaredField("length")
            lengthField.isAccessible = true
            val len = lengthField.getInt(atts)
            for (i in 0 until len) {
                attributes.put(data[i * 5 + 1], data[i * 5 + 4])
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }

    }

}

Может ли кто-нибудь объяснить, можно ли стилизовать разные промежутки в одном абзаце с помощью TagHandler.

Спасибо!

0 ответов

Другие вопросы по тегам