diff --git a/core/src/main/scala/com/lightbend/paradox/markdown/Directive.scala b/core/src/main/scala/com/lightbend/paradox/markdown/Directive.scala
index b0972858..e7b35c69 100644
--- a/core/src/main/scala/com/lightbend/paradox/markdown/Directive.scala
+++ b/core/src/main/scala/com/lightbend/paradox/markdown/Directive.scala
@@ -298,15 +298,8 @@ case class SnipDirective(page: Page, variables: Map[String, String])
try {
val labels = node.attributes.values("identifier").asScala
val source = resolvedSource(node, page)
- val file =
- if (source startsWith "$") {
- val baseKey = source.drop(1).takeWhile(_ != '$')
- val base = new File(PropertyUrl(s"snip.$baseKey.base_dir", variables.get).base.trim)
- val effectiveBase = if (base.isAbsolute) base else new File(page.file.getParentFile, base.toString)
- new File(effectiveBase, source.drop(baseKey.length + 2))
- } else new File(page.file.getParentFile, source)
- val text = Snippet(file, labels)
- val lang = Option(node.attributes.value("type")).getOrElse(Snippet.language(file))
+ val (text, snippetLang) = Snippet("snip", source, labels, page, variables)
+ val lang = Option(node.attributes.value("type")).getOrElse(snippetLang)
val group = Option(node.attributes.value("group")).getOrElse("")
new VerbatimGroupNode(text, lang, group).accept(visitor)
} catch {
@@ -344,25 +337,17 @@ case class FiddleDirective(page: Page, variables: Map[String, String])
val extraParams = node.attributes.value("extraParams", "theme=light")
val cssStyle = node.attributes.value("cssStyle", "overflow: hidden;")
val source = resolvedSource(node, page)
- val file = if (source startsWith "$") {
- val baseKey = source.drop(1).takeWhile(_ != '$')
- val base = new File(PropertyUrl(s"fiddle.$baseKey.base_dir", variables.get).base.trim)
- val effectiveBase = if (base.isAbsolute) base else new File(page.file.getParentFile, base.toString)
- new File(effectiveBase, source.drop(baseKey.length + 2))
- } else new File(page.file.getParentFile, source)
- val text = Snippet(file, labels)
- val lang = Option(node.attributes.value("type")).getOrElse(Snippet.language(file))
+ val (text, _) = Snippet("fiddle", source, labels, page, variables)
val fiddleSource = java.net.URLEncoder.encode(
- """
- |import fiddle.Fiddle, Fiddle.println
- | @scalajs.js.annotation.JSExport
- | object ScalaFiddle {
- | // $FiddleStart
- |""".stripMargin + text + """
- | // $FiddleEnd
- | }
- """.stripMargin, "UTF-8")
+ """import fiddle.Fiddle, Fiddle.println
+ |@scalajs.js.annotation.JSExport
+ |object ScalaFiddle {
+ | // $FiddleStart
+ |""".stripMargin + text + """
+ | // $FiddleEnd
+ |}
+ |""".stripMargin, "UTF-8")
printer.println.print(s"""
diff --git a/core/src/main/scala/com/lightbend/paradox/markdown/Snippet.scala b/core/src/main/scala/com/lightbend/paradox/markdown/Snippet.scala
index 9a63d6b2..6bdb399c 100644
--- a/core/src/main/scala/com/lightbend/paradox/markdown/Snippet.scala
+++ b/core/src/main/scala/com/lightbend/paradox/markdown/Snippet.scala
@@ -24,7 +24,19 @@ object Snippet {
class SnippetException(message: String) extends RuntimeException(message)
- def apply(file: File, labels: Seq[String]): String = labels match {
+ def apply(propPrefix: String, source: String, labels: Seq[String], page: Page, variables: Map[String, String]): (String, String) = {
+ val file =
+ if (source startsWith "$") {
+ val baseKey = source.drop(1).takeWhile(_ != '$')
+ val base = new File(PropertyUrl(s"$propPrefix.$baseKey.base_dir", variables.get).base.trim)
+ val effectiveBase = if (base.isAbsolute) base else new File(page.file.getParentFile, base.toString)
+ new File(effectiveBase, source.drop(baseKey.length + 2))
+ } else new File(page.file.getParentFile, source)
+
+ (extract(file, labels), language(file))
+ }
+
+ def extract(file: File, labels: Seq[String]): String = labels match {
case Seq() => extract(file, _ => true, _ => false, addFilteredLine).snippetLines.mkString("\n")
case _ => labels.map(label => extract(file, label)).mkString("\n")
}
diff --git a/core/src/test/scala/com/lightbend/paradox/markdown/FiddleDirectiveSpec.scala b/core/src/test/scala/com/lightbend/paradox/markdown/FiddleDirectiveSpec.scala
index 3f5f6140..34b05c66 100644
--- a/core/src/test/scala/com/lightbend/paradox/markdown/FiddleDirectiveSpec.scala
+++ b/core/src/test/scala/com/lightbend/paradox/markdown/FiddleDirectiveSpec.scala
@@ -28,7 +28,7 @@ class FiddleDirectiveSpec extends MarkdownBaseSpec {
|@@fiddle [FiddleDirectiveSpec.scala](./FiddleDirectiveSpec.scala) { #fiddle_code extraParams=theme=light&layout=v75 cssStyle=width:100%; }
""").values.head shouldEqual html("""
|
""".stripMargin)
}
@@ -39,7 +39,7 @@ class FiddleDirectiveSpec extends MarkdownBaseSpec {
|@@fiddle [FiddleDirectiveSpec.scala](./FiddleDirectiveSpec.scala) { #fiddle_code width=100px height=100px extraParams=theme=light&layout=v75 cssStyle=width:100%; }
""").values.head shouldEqual html("""
|
""".stripMargin)
}
@@ -50,7 +50,7 @@ class FiddleDirectiveSpec extends MarkdownBaseSpec {
|@@fiddle [FiddleDirectiveSpec.scala](./FiddleDirectiveSpec.scala) { #fiddle_code baseUrl=http://shadowscalafiddle.io width=100px height=100px extraParams=theme=light&layout=v75 cssStyle=width:100%; }
""").values.head shouldEqual html("""
|
""".stripMargin)
}