diff --git a/hugo/src/main/scala/com/ossuminc/riddl/hugo/HugoPass.scala b/hugo/src/main/scala/com/ossuminc/riddl/hugo/HugoPass.scala index 7bd8f4d..88466d2 100644 --- a/hugo/src/main/scala/com/ossuminc/riddl/hugo/HugoPass.scala +++ b/hugo/src/main/scala/com/ossuminc/riddl/hugo/HugoPass.scala @@ -19,6 +19,7 @@ import com.ossuminc.riddl.passes.symbols.Symbols.ParentStack import com.ossuminc.riddl.passes.validate.ValidationPass import com.ossuminc.riddl.stats.StatsPass import com.ossuminc.riddl.utils.{PathUtils, Tar, Timer, TreeCopyFileVisitor, Zip} +import com.ossuminc.riddl.hugo.themes.* import java.io.File import java.net.URL @@ -88,7 +89,12 @@ case class HugoPass( next.resolve(par) } val path = parDir.resolve(fileName) - val mdw = MarkdownWriter(path, commonOptions, symbolsOutput, refMap, usage, this) + val mdw: MarkdownWriter = options.hugoThemeName match { + case Some(GeekDocTheme.name) | None => GeekDocTheme(path, commonOptions, symbolsOutput, refMap, usage, this) + case Some(DotdockTheme.name) => DotdockTheme(path, commonOptions, symbolsOutput, refMap, usage, this) + case Some(s) => messages.addError((0, 0), s"Hugo theme named '$s' is not supported, using GeekDoc ") + GeekDocTheme(path, commonOptions, symbolsOutput, refMap, usage, this) + } addFile(mdw) mdw } diff --git a/hugo/src/main/scala/com/ossuminc/riddl/hugo/MarkdownWriter.scala b/hugo/src/main/scala/com/ossuminc/riddl/hugo/MarkdownWriter.scala index b4b1628..a3f1616 100644 --- a/hugo/src/main/scala/com/ossuminc/riddl/hugo/MarkdownWriter.scala +++ b/hugo/src/main/scala/com/ossuminc/riddl/hugo/MarkdownWriter.scala @@ -25,7 +25,7 @@ import com.ossuminc.riddl.utils.TextFileWriter import java.nio.file.Path import scala.annotation.unused -case class MarkdownWriter( +abstract class MarkdownWriter( filePath: Path, commonOptions: CommonOptions, symbolsOutput: SymbolsOutput, diff --git a/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/DotdockTheme.scala b/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/DotdockTheme.scala new file mode 100644 index 0000000..9510cbd --- /dev/null +++ b/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/DotdockTheme.scala @@ -0,0 +1,38 @@ +package com.ossuminc.riddl.hugo.themes + +import com.ossuminc.riddl.hugo.{MarkdownWriter, PassUtilities} +import com.ossuminc.riddl.language.CommonOptions +import com.ossuminc.riddl.passes.resolve.{ReferenceMap, Usages} +import com.ossuminc.riddl.passes.symbols.SymbolsOutput + +import java.nio.file.Path + +object DotdockTheme { + val name = "DotDock" +} + +/** Theme extensions to the Markdown writer for the Dotdock Hugo theme + * + * @param filePath + * Path to the file being written + * @param commonOptions + * The common options to consider when writing + * @param symbolsOutput + * The symbol table + * @param refMap + * The reference map for looking up references + * @param usage + * The usage statistics + * @param passUtilities + * The PassUtilities from running the various passes + */ +case class DotdockTheme( + filePath: Path, + commonOptions: CommonOptions, + symbolsOutput: SymbolsOutput, + refMap: ReferenceMap, + usage: Usages, + passUtilities: PassUtilities +) extends MarkdownWriter(filePath, commonOptions, symbolsOutput, refMap, usage, passUtilities) { + final val name: String = DotdockTheme.name +} diff --git a/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/GeekDocTheme.scala b/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/GeekDocTheme.scala index b60c607..c56ec42 100644 --- a/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/GeekDocTheme.scala +++ b/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/GeekDocTheme.scala @@ -1,7 +1,25 @@ package com.ossuminc.riddl.hugo.themes -import com.ossuminc.riddl.hugo.MarkdownWriter +import com.ossuminc.riddl.hugo.{MarkdownWriter, PassUtilities} +import com.ossuminc.riddl.language.CommonOptions +import com.ossuminc.riddl.passes.resolve.{ReferenceMap, Usages} +import com.ossuminc.riddl.passes.symbols.SymbolsOutput -case class GeekDocTheme(mdw: MarkdownWriter) extends ThemeWriter(mdw) { - def name: String = "GeekDoc" +import java.nio.file.Path + +object GeekDocTheme { + val name: String = "GeekDoc" +} + +/** Theme extension to the MardownWriter for the Hugo GeekDoc theme */ +case class GeekDocTheme( + filePath: Path, + commonOptions: CommonOptions, + symbolsOutput: SymbolsOutput, + refMap: ReferenceMap, + usage: Usages, + passUtilities: PassUtilities +) extends MarkdownWriter(filePath, commonOptions, symbolsOutput, refMap, usage, passUtilities) with ThemeWriter { + + def themeName: String = GeekDocTheme.name } diff --git a/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/ThemeWriter.scala b/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/ThemeWriter.scala index a3f7e8f..7490544 100644 --- a/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/ThemeWriter.scala +++ b/hugo/src/main/scala/com/ossuminc/riddl/hugo/themes/ThemeWriter.scala @@ -2,7 +2,7 @@ package com.ossuminc.riddl.hugo.themes import com.ossuminc.riddl.hugo.MarkdownWriter -trait ThemeWriter(mdw: MarkdownWriter) { - - def name: String +trait ThemeWriter { this: MarkdownWriter => + + def themeName: String } diff --git a/hugo/src/test/scala/com/ossuminc/riddl/hugo/HugoTestBase.scala b/hugo/src/test/scala/com/ossuminc/riddl/hugo/HugoTestBase.scala index 7fcf56c..090e11a 100644 --- a/hugo/src/test/scala/com/ossuminc/riddl/hugo/HugoTestBase.scala +++ b/hugo/src/test/scala/com/ossuminc/riddl/hugo/HugoTestBase.scala @@ -1,5 +1,6 @@ package com.ossuminc.riddl.hugo +import com.ossuminc.riddl.hugo.themes.GeekDocTheme import com.ossuminc.riddl.language.{CommonOptions, Messages} import com.ossuminc.riddl.language.Messages.Messages import com.ossuminc.riddl.language.AST.Root @@ -49,7 +50,7 @@ abstract class HugoTestBase extends ValidatingTest { def outputs: PassesOutput = passesResult.outputs def options: HugoCommand.Options = HugoCommand.Options() protected val messages: Messages.Accumulator = Messages.Accumulator(commonOptions) - MarkdownWriter(filePath, commonOptions, symbols, refMap, usages, pu) + GeekDocTheme(filePath, commonOptions, symbols, refMap, usages, pu) } def makeMDWFor(input: String): (PassesResult, Root, MarkdownWriter) = { diff --git a/project/Deps.scala b/project/Deps.scala index fe98f4a..e003c07 100644 --- a/project/Deps.scala +++ b/project/Deps.scala @@ -22,5 +22,5 @@ object Deps { ) val pureconfig: Seq[ModuleID] = - Seq[ModuleID]("com.github.pureconfig" %% "pureconfig-core" % V.pureconfig) + Seq[ModuleID ]("com.github.pureconfig" %% "pureconfig-core" % V.pureconfig) } diff --git a/project/plugins.sbt b/project/plugins.sbt index 34be355..e8d823e 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,5 +1,5 @@ -addSbtPlugin("com.ossuminc" % "sbt-ossuminc" % "0.8.3") +addSbtPlugin("com.ossuminc" % "sbt-ossuminc" % "0.9.5") // This enables sbt-bloop to create bloop config files for Metals editors // Uncomment locally if you use metals, otherwise don't slow down other