/scalate-website/ext/scalate/Boot.scala

http://github.com/scalate/scalate · Scala · 54 lines · 41 code · 11 blank · 2 comment · 2 complexity · 9b93a12c2b9f938fdb506b45df9fe9f7 MD5 · raw file

  1. package scalate
  2. import java.util.concurrent.atomic.AtomicBoolean
  3. import _root_.Website._
  4. import org.fusesource.scalamd.{MacroDefinition, Markdown}
  5. import java.util.regex.Matcher
  6. import org.fusesource.scalate._
  7. import util.Log
  8. import wikitext._
  9. object Boot extends Log; import Boot._
  10. class Boot(engine: TemplateEngine) {
  11. private[this] var _initialised = new AtomicBoolean(false)
  12. def run: Unit = {
  13. if (_initialised.compareAndSet(false, true)) {
  14. def filter(m:Matcher):String = {
  15. val filter_name = m.group(1)
  16. val body = m.group(2)
  17. engine.filter(filter_name) match {
  18. case Some(filter)=>
  19. filter.filter(RenderContext(), body)
  20. case None=> "<div class=\"macro error\"><p>filter not found: %s</p><pre>%s</pre></div>".format(filter_name, body)
  21. }
  22. }
  23. def pygmentize(m:Matcher):String = Pygmentize.pygmentize(m.group(2), m.group(1))
  24. // add some macros to markdown.
  25. Markdown.macros :::= List(
  26. MacroDefinition("""\{filter::(.*?)\}(.*?)\{filter\}""", "s", filter, true),
  27. MacroDefinition("""\{pygmentize::(.*?)\}(.*?)\{pygmentize\}""", "s", pygmentize, true),
  28. MacroDefinition("""\{pygmentize\_and\_compare::(.*?)\}(.*?)\{pygmentize\_and\_compare\}""", "s", pygmentize, true),
  29. MacroDefinition("""\$\{project_version\}""", "", _ => project_version.toString, true),
  30. MacroDefinition("""\$\{project_name\}""", "", _ => project_name.toString, true),
  31. MacroDefinition("""\$\{project_id\}""", "", _ => project_id.toString, true),
  32. MacroDefinition("""\$\{scala_compat_tag\}""", "", _ => scala_compat_tag, true)
  33. )
  34. for( ssp <- engine.filter("ssp"); md <- engine.filter("markdown") ) {
  35. engine.pipelines += "ssp.md"-> List(ssp, md)
  36. engine.pipelines += "ssp.markdown"-> List(ssp, md)
  37. }
  38. // lets add the confluence macros...
  39. ConfluenceLanguageExtensions.extensions ++= List(ExpressionTag("project_version", () => project_version))
  40. info("Bootstrapped website gen for: %s", project_name)
  41. }
  42. }
  43. }