Code Monkey home page Code Monkey logo

htmldsl's Introduction

HTML DSL

Provides a DSL to build HTML for Android TextView

License Maven Central

Description

There is a lovely method on the android.text.Html class, fromHtml, that converts HTML into a Spannable for use with a TextView.

However, the documentation does not stipulate what HTML tags are supported, which makes this method a bit hit-or-miss. This small library provides a DSL for building valid HTML for android.widget.TextView.

Download

Download the latest AAR or grab via Gradle:

implementation("com.jaredrummler:html-dsl:1.0.0")

Structure

  • buildSrc — Gradle dependencies, plugins, versions
  • library - The HTML DSL library
  • library/src/test - Unit tests for the library
  • demo - Android demo project using HTML DSL
  • scripts - Scripts to publish library to Maven

Usage

Create HTML:

HTML.create {
        h1("HTML DSL")
        strong("Provides a DSL to build HTML for Android TextView")
}

Set HTML on a TextView:

textView.setHtml {
    h1("HTML DSL").br()
    strong("Build valid HTML for Android TextView.").br().br()
    h3("Android Versions:")
    ul {
        li {
            a(href = "https://developer.android.com/about/versions/12/get") {
                +"Android 12 Beta"
            }
        }
        li("Android 11")
        li("Android 10")
        li("Pie")
        li("Oreo")
        li("Nougat")
        li("Marshmallow")
        li("Lollipop")
        // ...
    }

    small {
        sub {
            +"by "
            a {
                href = "https://github.com/jaredrummler"
                text = "Jared Rummler"
            }
        }
    }
}

Render HTML to a string

val htmlString = HTML.create {
    p {
        font(face = "monospace", color = "#3ddc84") {
            unsafe {
                +"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
            }
        }
    }
}.render(prettyPrint = true)

Write HTML to a file:

HtmlRenderer<FileWriter>(HTML.create {
    small {
        sub {
            +"by "
            a {
                href = "https://github.com/jaredrummler"
                text = "Jared Rummler"
            }
        }
    }
}, FileWriter("output.html"), true)

Supported HTML elements:

  • <a href="...">
  • <b>
  • <big>
  • <blockquote>
  • <br>
  • <cite>
  • <dfn>
  • <div align="...">
  • <em>
  • <font color="..." face="...">
  • <h1>
  • <h2>
  • <h3>
  • <h4>
  • <h5>
  • <h6>
  • <i>
  • <img src="...">
  • <p>
  • <small>
  • <strike>
  • <strong>
  • <sub>
  • <sup>
  • <tt>
  • <u>
  • <ul>
  • <li>

License

Copyright 2021 Jared Rummler

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

htmldsl's People

Contributors

jaredrummler avatar jaredsburrows avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

htmldsl's Issues

not showing images

does not load images
sample image : <a href=\"http://www.sakhtemanchi.com/%d8%b1%d9%86%da%af-%d9%86%d8%b3%d9%88%d8%b2-%da%86%db%8c%d8%b3%d8%aa%d8%9f/\">

Escaping Text and Support For String Resources

Hi can you provide support for String Res in text() function.When we pass the text / append it please provide parameter if we want to escape the text with Html.escapeHtml. When we pass symbols it does not escape automatically and spoils the html text . It would be very nice if you provide Boolean to set if we want to escape the text when we append it.

How to use align

How to use align, left, center, right?

How to use image tag

How to use Link tag, allow multiple hyperlinks?

Hi

Hello. Can you please add style.textAlign (Attribute.Align.END)
because sometimes style.textAlign (Attribute.Align.RIGHT) does not work

<dіv style="text-align: end;"> Some text need right</dіv>

Suggest

Consider providing StringBuild operations so that objects can be reused

 private final StringBuilder html = new StringBuilder();

clickable text or link ?

I really appreciate effort you have done to create a Html Builder its nice library.I would like to have feature to make link clickable with appropriate listener interface provided in builder.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.