HypertextLiteral is a Julia package for generating HTML, SVG, and other SGML tagged content. It works similar to Julia string interpolation, only that it tracks hypertext escaping needs and provides handy conversions dependent upon context.
This project is inspired by Hypertext Literal by Mike Bostock (@mbostock) available at here. This work is based upon a port to Julia written by Michiel Dral with significant architectural feedback by Kirill Simonov (@xitology).
This package provides the macro @htl which returns an object that can
be rendered to MIME"text/html" displays. This macro provides
contextual interpolation sensible to the needs of HTML construction.
    using HypertextLiteral
    books = [
     (name="Who Gets What & Why", year=2012, authors=["Alvin Roth"]),
     (name="Switch", year=2010, authors=["Chip Heath", "Dan Heath"]),
     (name="Governing The Commons", year=1990, authors=["Elinor Ostrom"])]
    render_row(book) = @htl("""
      <tr><td>$(book.name) ($(book.year))<td>$(join(book.authors, " & "))
    """)
    render_table(list) = @htl("""
      <table><caption><h3>Selected Books</h3></caption>
      <thead><tr><th>Book<th>Authors<tbody>
      $((render_row(b) for b in list))</tbody></table>""")
    render_table(books)
    #=>
    <table><caption><h3>Selected Books</h3></caption>
    <thead><tr><th>Book<th>Authors<tbody>
      <tr><td>Who Gets What & Why (2012)<td>Alvin Roth
      <tr><td>Switch (2010)<td>Chip Heath & Dan Heath
      <tr><td>Governing The Commons (1990)<td>Elinor Ostrom
    </tbody></table>
    =#
This library implements many features for working with HTML and JavaScript data within the Julia language, including:
- Performant escaping of interpolated values
- Handles boolean valued attributes, such as disabled,checked
- Serialization of PairandTupleobjects as attribute pairs
- Conversion of snake_case=>kebab-casefor attribute names
- Support for CSS style formatting via Pair,TupleandDict
- Translation of Julia values to Javascript within scripttag
- Direct inclusion of objects (like HTML) showable byMIME"text/html"
- Extension API for customizing object display in various contexts
For more detail, please see the documentation and join us on Julia's Zulip.