• Stars
    star
    107
  • Rank 323,587 (Top 7 %)
  • Language
    Scala
  • License
    Apache License 2.0
  • Created over 9 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Functional HTML5 and XML library for the Scala platform

Build Status Build Status Maven Central

Pine is a functional HTML5 and XML library for the Scala platform. It supports parsing, manipulating and rendering of HTML. Pine provides type-safe bindings for HTML5 generated from MDN. Tree nodes are immutable and can be constructed from compile-time or runtime HTML/XML content. The tree may be manipulated and rendered back as HTML or as a browser node.

Features

  • Immutable and typed trees
  • Type-safe bindings, generated from MDN
  • Support for custom elements and attributes
  • HTML5 and XML parser based on recursive descent
  • Macros for compile-time HTML string/file parsing
  • Tree manipulation
  • Rendering as HTML strings
  • DSL for common operations
  • Unit and property-based tests
  • Few dependencies

JavaScript back end

  • Rendering as DOM nodes
  • Updating nodes in DOM
  • DSL for attaching/detaching events

Compatibility

Platform Platform version Scala versions
JVM 2.11 (T), 2.12 (T), 2.13 (L)
Scala.js 1.0 2.12 (T), 2.13 (L)
Scala Native 0.4.0-M2 2.11 (T)
  • (T): Typelevel Scala
  • (L): Lightbend Scala

Examples

import pine._

val url  = "http://github.com/"
val root = html"<a href=$url>GitHub</a>"

println(root.toHtml)  // <a href="http://github.com/">GitHub</a>

JavaScript

import pine.dom._
println(root.toDom)  // [object HTMLAnchorElement]

sbt

Pine makes use of a language extension called literal types, see SIP-23. For Scala 2.11 and 2.12, only Typelevel Scala implements this feature. However, it is available in Lightbend Scala from 2.13 onwards.

2.13 onwards

scalaVersion := "2.<version>"
libraryDependencies += scalaOrganization.value % "scala-reflect" % scalaVersion.value

< 2.13

scalaVersion      := "2.12.4-bin-typelevel-4"  // or "2.11.11-bin-typelevel-4"
scalaOrganization := "org.typelevel"
scalacOptions     += "-Yliteral-types"

libraryDependencies += scalaOrganization.value % "scala-reflect" % scalaVersion.value

Scala.js settings

libraryDependencies := libraryDependencies.value.filterNot(_.name == "scalajs-compiler") 
addCompilerPlugin("org.scala-js" % "scalajs-compiler" % scalaJSVersion cross CrossVersion.patch)

Scala Native settings

libraryDependencies := libraryDependencies.value.filterNot(_.name == "nscplugin")
addCompilerPlugin("org.scala-native" % "nscplugin" % nativeVersion cross CrossVersion.patch)

Dependencies

libraryDependencies += "tech.sparse" %%  "pine" % "<version>"  // JVM
libraryDependencies += "tech.sparse" %%% "pine" % "<version>"  // JavaScript, Native

Links

Licence

Pine is licensed under the terms of the Apache v2.0 licence.

Contributors

  • Tim Nieradzik
  • Matt Hicks
  • Anatoliy Kmetyuk
  • Keven Wright