Skip to content
/ pine Public
forked from sparsetech/pine

Functional HTML5 and XML library for the Scala platform

License

Notifications You must be signed in to change notification settings

deabreu/pine

 
 

Repository files navigation

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
JVM 2.11, 2.12, 2.13
JavaScript (1) 2.11, 2.12, 2.13
LLVM 2.11
  • (1) Adds support for browser DOM

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.13.0"
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" % "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
  • Keven Wright

About

Functional HTML5 and XML library for the Scala platform

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Scala 99.9%
  • HTML 0.1%