Skip to content
Functional HTML5 and XML library for the Scala platform
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cache
docs
js/src
jvm/src/main/scala/pine
project
shared/src
.drone.yml
.gitattributes
.gitignore
.travis.yml
LICENSE
README.md
build.sbt
build.toml
build211.toml
build212.toml
manual.toml
version.sbt

README.md

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. It implements an immutable tree which can be created directly 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 (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 backend

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

Compatibility

Back end Scala versions Remarks
JVM 2.11, 2.12 Fully supported
JavaScript 2.11, 2.12 Fully supported (1)
LLVM 2.11 Experimental (2)
  • (1) Adds support for browser DOM
  • (2) Presently, Scala Native does not support running ScalaTest/ScalaCheck test suites

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. As of now, only Typelevel Scala implements this feature. However, it is likely to be included in future versions of Lightbend Scala (see this pull request).

Global settings

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" % "0.1.3"  // JVM
libraryDependencies += "tech.sparse" %%% "pine" % "0.1.3"  // JavaScript, LLVM

Links

Licence

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

Contributors

  • Tim Nieradzik
  • Matt Hicks
  • Anatoliy Kmetyuk
You can’t perform that action at this time.