diff --git a/src/main/scala/nl/flotsam/monkeyman/MonkeymanConfiguration.scala b/src/main/scala/nl/flotsam/monkeyman/MonkeymanConfiguration.scala
index a959515..264a123 100644
--- a/src/main/scala/nl/flotsam/monkeyman/MonkeymanConfiguration.scala
+++ b/src/main/scala/nl/flotsam/monkeyman/MonkeymanConfiguration.scala
@@ -32,7 +32,7 @@ import org.fusesource.scalate.{Binding, Template, TemplateEngine}
import org.fusesource.scalate.util.{ResourceLoader => ScalateResourceLoader}
import org.fusesource.scalate.support.URLTemplateSource
-case class MonkeymanConfiguration(sourceDir: File, layoutDir: File) {
+case class MonkeymanConfiguration(sourceDir: File, layoutDir: File, sections: Boolean = false) {
private val layoutFileName = "layout"
@@ -106,7 +106,7 @@ case class MonkeymanConfiguration(sourceDir: File, layoutDir: File) {
new LessDecorator,
new ZussDecorator,
new YamlFrontmatterDecorator(),
- new MarkdownDecorator(),
+ new MarkdownDecorator(sections),
new SnippetDecorator(layoutResolver, templateEngine, allResources _),
new ScalateDecorator(templateEngine, allResources _),
PermalinkDecorator
diff --git a/src/main/scala/nl/flotsam/monkeyman/MonkeymanTool.scala b/src/main/scala/nl/flotsam/monkeyman/MonkeymanTool.scala
index 5ad5a6a..3599a04 100644
--- a/src/main/scala/nl/flotsam/monkeyman/MonkeymanTool.scala
+++ b/src/main/scala/nl/flotsam/monkeyman/MonkeymanTool.scala
@@ -55,6 +55,8 @@ abstract class MonkeymanTool(toolName: String) {
else new File(name)
}
+ val sections = parser.flag[Boolean]("sections", false, "Interpret markdown horizontal rules as section breaks.")
+
def main(args: Array[String]) {
try {
parser.parse(args)
@@ -63,7 +65,8 @@ abstract class MonkeymanTool(toolName: String) {
else {
val config = new MonkeymanConfiguration(
sourceDir = sourceDir.value.getOrElse(new File(workingDir, "source")),
- layoutDir = layoutDir.value.getOrElse(new File(workingDir, "layout"))
+ layoutDir = layoutDir.value.getOrElse(new File(workingDir, "layout")),
+ sections = sections.value.getOrElse(false)
)
try {
if (!config.sourceDir.exists()) {
diff --git a/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecoration.scala b/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecoration.scala
index 0c26618..d04f49b 100644
--- a/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecoration.scala
+++ b/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecoration.scala
@@ -23,11 +23,11 @@ import nl.flotsam.monkeyman.Resource
import nl.flotsam.monkeyman.decorator.ResourceDecoration
import nl.flotsam.monkeyman.util.Closeables._
import org.apache.commons.io.{FilenameUtils, IOUtils}
-import org.pegdown.ast.{TextNode, HeaderNode}
+import org.pegdown.ast.{SimpleNode, TextNode, HeaderNode}
import org.pegdown.{LinkRenderer, ToHtmlSerializer, PegDownProcessor}
import nl.flotsam.monkeyman.util.Logging
-case class MarkdownDecoration(resource: Resource)
+case class MarkdownDecoration(resource: Resource, sections: Boolean)
extends ResourceDecoration(resource) with Logging {
lazy val (extractedTitle, html) = {
@@ -37,7 +37,9 @@ case class MarkdownDecoration(resource: Resource)
val processor = new PegDownProcessor
val rootNode = processor.parseMarkdown(markdown.toCharArray)
val visitor = new TitleExtractingToHtmlSerializer(new LinkRenderer)
- val html = visitor.toHtml(rootNode)
+ val html =
+ if (sections) "" + visitor.toHtml(rootNode) + ""
+ else visitor.toHtml(rootNode)
val title = visitor.title
(title, html)
}
@@ -74,6 +76,16 @@ case class MarkdownDecoration(resource: Resource)
super.visit(node)
}
}
+
+ override def visit(node: SimpleNode) {
+ node.getType match {
+ case SimpleNode.Type.HRule if (sections) =>
+ printer.println.print("")
+ case _ => super.visit(node)
+ }
+ }
+
+
}
}
diff --git a/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecorator.scala b/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecorator.scala
index 4e46950..68d2edd 100644
--- a/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecorator.scala
+++ b/src/main/scala/nl/flotsam/monkeyman/decorator/markdown/MarkdownDecorator.scala
@@ -21,11 +21,11 @@ package nl.flotsam.monkeyman.decorator.markdown
import nl.flotsam.monkeyman.{Resource, ResourceDecorator}
-class MarkdownDecorator extends ResourceDecorator {
+class MarkdownDecorator(sections: Boolean) extends ResourceDecorator {
def decorate(resource: Resource) = {
if (resource.contentType == "text/x-web-markdown" || resource.path.endsWith(".md"))
- new MarkdownDecoration(resource)
+ new MarkdownDecoration(resource, sections)
else resource
}