View on GitHub

play-xwiki-rendering

Play2 module allows you to convert texts written in a certain wiki syntax to some formatted texts using XWiki Rendering Framework.

Download this project as a .zip file Download this project as a tar.gz file

Play2 XWiki Rendering Module

Introduction

This Play2 module allows you to convert texts written in a certain wiki syntax to some formatted texts using XWiki Rendering Framework.

Example

val result = DefaultXWikiRenderer.render("** Bold ** {{code type="java"}}class Macro{}{{/code}}")
// <p><b>Bold</b><pre class="java">class Macro{}</pre></p>

There is a sample application at the project repository.
And the api documents are here.

See also XWiki Rendering Framework for the details about the framework.

Installing the module

To use the module, a repository and dependency should be added to your project/Build.scala

Repository
http://repository-monochromeroad.forge.cloudbees.com/release
Dependency
"com.monochromeroad" %% "play-xwiki-rendering" % "1.0"
object ApplicationBuild extends Build {

  val appName         = "Sample application integrated with XWiki Rendering"
  val appVersion      = "1.0"

  val appDependencies = Seq(
    "com.monochromeroad" %% "play-xwiki-rendering" % "1.0"
  )

  val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += "Monochrmeroad CloudBees Repository" at "http://repository-monochromeroad.forge.cloudbees.com/release"
  )
}

Default XWiki renderer

This moudle provides some XWiki rendereres as a Play plugin.

DefaultXWikiRenderer
XDOM based renderer
DefaultXWikiStreamRenderer
Streaming based renderer
DefaultXWikiStringStreamRenderer
Simplified streaming based renderer

Installing the default renderers

Just add a entry to the "plugins.sbt" in the conf directory.

10000:com.monochromeroad.play.xwiki.rendering.plugin.DefaultXWikiRenderingPlugin

DefaultXWikiRenderer

import com.monochromeroad.play.xwiki.rendering.plugin.{DefaultXWikiRenderer => Renderer}
object Application extends Controller {

  def index = Action {
    val htmlText = Renderer.render("**TEST** //italic//")

    // ...
  }
}

DefaultXWikiStreamRenderer

import java.io.StringReader
import com.monochromeroad.play.xwiki.rendering.plugin.{DefaultXWikiStreamRenderer => Renderer}
object Application extends Controller {

  def index = Action {
    val sourceReader = new StringReader("**TEST** //italic//")
    val htmlText = Renderer.render(sourceReader, "-- iv --", (acc: String, n: String) => acc + n)

    // ...
  }
}

DefaultXWikiStringStreamRenderer

import java.io.StringReader
import com.monochromeroad.play.xwiki.rendering.plugin.{DefaultXWikiStringStreamRenderer => Renderer}
object Application extends Controller {

  def index = Action {
    val sourceReader = new StringReader("**TEST** //italic//")
    val result = new StringBuilder()
    Renderer.render(sourceReader, result.append(_))

    // ...
  }
}

Macros

You can use some XWiki macros to extend the wiki syntax.

import com.monochromeroad.play.xwiki.rendering.plugin.{DefaultXWikiRenderer => Renderer}
object Application extends Controller {

  def index = Action {
    val htmlText = Renderer.render("**TEST** {{comment}}This is a comment that would not be contained in the result{{/comment}}")
    // Comment Macro: <p><b>TEST</b> </p>

    // ...
  }
}

To use a XWiki macro, add a macro jar to your project or register a macro source code.

Adding a macro jar

Just add the macro jar you want to use in the project.

val appDependencies = Seq(
  "org.xwiki.rendering" % "xwiki-rendering-macro-comment" % "4.1.3"
)

See also about XWiki official macros.

Registering a macro code

First, write a macro class that extends DefaultXWikiMacro or DefaultXWikiNoParameterMacro
You need to create the class with a nullary constructor.

Check out the sample macro code for more details.

Then regster the macro class in the conf/application.conf

xwiki.rendering.default.macros.1=utils.xwiki.macros.CodeMacro

When you create your own macro, the XWiki site document would be useful:
Writing a Macro

License

LGPL Version 2.1