 How to Buildr showdown.js into Java
How to Buildr showdown.js into Java
		
		Do you want a Markdown translator to use in the JVM that gives exactly the same results as one in JavaScript? It wouldn’t hurt! Because you see, having the translator in JavaScript means you can do a sweet live preview in the browser. But all text processing thingies have quirks, or just very special features, so you should really use exactly the same one on the server as the client so your writers do not have unpleasant surprises.
Thanks to Rhino this is not hard to do. If you want a Buildr buildfile that downloads Rhino, downloads Showdown, and uses the former to compile the latter, then here it is:
repositories.remote << "http://www.ibiblio.org/maven2/"
rhino = artifact('rhino:js:jar:1.7R1')
define "showdown" do
  SD_V = '0.9'
  showdown_zip = artifact("net.attacklab:showdown:zip:#{SD_V}")
  download(showdown_zip.name => "http://attacklab.net/showdown/showdown-v#{SD_V}.zip")
  zip = unzip('target/zip' => showdown_zip)
  showdown_js = file('target/Showdown.js' => zip) do |t|
    cp(File.join(zip.target.name, 'src/showdown.js'), t.name)
    f = File.new(t.name, "a")
    f.write("\nfunction makeHtml(md) { return new Showdown.converter().makeHtml('' + md) }")
    f.close
  end
  task :build => file('target/classes/showdown.class' => [rhino, showdown_js])  do
    Java::Commands.java(
      :classpath => rhino, 
      :java_args => [
        'org.mozilla.javascript.tools.jsc.Main', 
        '-d', 'target/classes', 
        '-extends', 'java.lang.Object',
        showdown_js.name
      ]
    )
  end
end
task :run => project('showdown').task(:build) do
  system "scala -classpath target/classes:#{rhino}"
endThe run task is to try it in the Scala interpreter, like so:
$ buildr clean run
...
scala> (new Showdown).makeHtml("**what**")                
res0: java.lang.Object = <p><strong>what</strong></p>Die, FCKeditor, die.
 
		
Add a comment