diff --git a/docs/src/main/tut/docs/settings.md b/docs/src/main/tut/docs/settings.md index e17ff2c4..1f51d443 100644 --- a/docs/src/main/tut/docs/settings.md +++ b/docs/src/main/tut/docs/settings.md @@ -154,6 +154,24 @@ micrositeHighlightTheme := "monokai" ``` [Available themes: https://cdnjs.com/libraries/highlight.js/](https://cdnjs.com/libraries/highlight.js/) +- `micrositeHighlightLanguages`: by default, Highlight.js is configured to support syntax highlighting for `java`, `scala` and `bash`. You can add additional languages: + +``` +micrositeHighlightTheme ++= Seq("protobuf", "thrift") +``` + +Then, use it as follows: + +~~~ +```protobuf +message MyMessage { + optional int32 i = 1; +} +``` +~~~ + +[Available languages: https://cdnjs.com/libraries/highlight.js/](https://cdnjs.com/libraries/highlight.js/) + - `micrositeImgDirectory`: the plugin provides some basic images, but you can add new images to personalize the microsite. This is the property where you can specify where they will be placed. The images in this folder will be automatically copied by the plugin, and they will be placed together with the rest of the Jekyll resources. By default, its value is `(resourceDirectory in Compile).value / "microsite" / "img"` but you can override it, for instance: ``` diff --git a/src/main/scala/microsites/MicrositeKeys.scala b/src/main/scala/microsites/MicrositeKeys.scala index e6c1cc79..8830e50e 100644 --- a/src/main/scala/microsites/MicrositeKeys.scala +++ b/src/main/scala/microsites/MicrositeKeys.scala @@ -77,6 +77,8 @@ trait MicrositeKeys { val micrositeDocumentationLabelDescription: SettingKey[String] = settingKey[String]("Microsite site documentation Label Description") val micrositeHighlightTheme: SettingKey[String] = settingKey[String]("Microsite Highlight Theme") + val micrositeHighlightLanguages: SettingKey[Seq[String]] = + settingKey[Seq[String]]("Microsite Highlight Languages") val micrositeConfigYaml: SettingKey[ConfigYml] = settingKey[ConfigYml]("Microsite _config.yml file configuration.") val micrositeImgDirectory: SettingKey[File] = settingKey[File]( @@ -193,6 +195,7 @@ trait MicrositeAutoImportSettings extends MicrositeKeys { ), visualSettings = MicrositeVisualSettings( highlightTheme = micrositeHighlightTheme.value, + highlightLanguages = micrositeHighlightLanguages.value, palette = micrositePalette.value, favicons = micrositeFavicons.value, shareOnSocial = micrositeShareOnSocial.value diff --git a/src/main/scala/microsites/MicrositesPlugin.scala b/src/main/scala/microsites/MicrositesPlugin.scala index 9eeaf947..4eb4ffcd 100644 --- a/src/main/scala/microsites/MicrositesPlugin.scala +++ b/src/main/scala/microsites/MicrositesPlugin.scala @@ -66,6 +66,7 @@ object MicrositesPlugin extends AutoPlugin { micrositeTwitterCreator := "", micrositeShareOnSocial := true, micrositeHighlightTheme := "default", + micrositeHighlightLanguages := Seq("scala", "java", "bash"), micrositeConfigYaml := ConfigYml( yamlPath = Some((resourceDirectory in Compile).value / "microsite" / "_config.yml")), micrositeImgDirectory := (resourceDirectory in Compile).value / "microsite" / "img", diff --git a/src/main/scala/microsites/layouts/Layout.scala b/src/main/scala/microsites/layouts/Layout.scala index 3241cd6e..68e3571a 100644 --- a/src/main/scala/microsites/layouts/Layout.scala +++ b/src/main/scala/microsites/layouts/Layout.scala @@ -205,17 +205,25 @@ abstract class Layout(config: MicrositeSettings) { ) } else Nil + val BuiltinLanguages = Set("scala", "java", "bash") + + val languages = + config.visualSettings.highlightLanguages.map(lang => s"'$lang'").mkString("[", ",", "]") + + val languageScripts = + config.visualSettings.highlightLanguages.filterNot(BuiltinLanguages.contains).map { lang => + script( + src := s"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/${lang}.min.js") + } + List( script(src := "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"), script( src := "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"), - script(src := "{{site.url}}{{site.baseurl}}/highlight/highlight.pack.js"), - script("""hljs.configure({ - |languages:['scala','java','bash'] - |}); - |hljs.initHighlighting(); - """.stripMargin) - ) ++ customJsList ++ customCDNList ++ gitSidecar + script(src := "{{site.url}}{{site.baseurl}}/highlight/highlight.pack.js") + ) ++ languageScripts ++ List(script(s"""hljs.configure({languages:${languages}}); + |hljs.initHighlighting(); + """.stripMargin)) ++ customJsList ++ customCDNList ++ gitSidecar } def kazariEnableScript: TypedTag[String] = script(s""" diff --git a/src/main/scala/microsites/microsites.scala b/src/main/scala/microsites/microsites.scala index acc59286..e807cf01 100644 --- a/src/main/scala/microsites/microsites.scala +++ b/src/main/scala/microsites/microsites.scala @@ -74,6 +74,7 @@ case class MicrositeFavicon(filename: String, sizeDescription: String) case class MicrositeVisualSettings( highlightTheme: String, + highlightLanguages: Seq[String], palette: Map[String, String], favicons: Seq[MicrositeFavicon], shareOnSocial: Boolean) diff --git a/src/sbt-test/microsites/microsites-config-keys/build.sbt b/src/sbt-test/microsites/microsites-config-keys/build.sbt index db209d5d..671bb0bf 100644 --- a/src/sbt-test/microsites/microsites-config-keys/build.sbt +++ b/src/sbt-test/microsites/microsites-config-keys/build.sbt @@ -17,6 +17,7 @@ micrositeTwitter := "@47deg" micrositeBaseUrl := "/test-microsite" micrositeDocumentationUrl := "/api" micrositeHighlightTheme := "just-another-theme" +micrositeHighlightLanguages := Seq("scala", "bash", "protobuf") micrositeGithubOwner := "47deg" micrositeGithubRepo := "sbt-microsites" micrositePalette := Map( diff --git a/src/test/scala/microsites/util/Arbitraries.scala b/src/test/scala/microsites/util/Arbitraries.scala index f5874993..387dac51 100644 --- a/src/test/scala/microsites/util/Arbitraries.scala +++ b/src/test/scala/microsites/util/Arbitraries.scala @@ -114,6 +114,7 @@ trait Arbitraries { twitterCreator ← Arbitrary.arbitrary[String] analytics ← Arbitrary.arbitrary[String] highlightTheme ← Arbitrary.arbitrary[String] + highlightLanguages ← Arbitrary.arbitrary[Seq[String]] micrositeConfigYaml ← configYamlArbitrary.arbitrary micrositeImgDirectory ← Arbitrary.arbitrary[File] micrositeCssDirectory ← Arbitrary.arbitrary[File] @@ -158,7 +159,12 @@ trait Arbitraries { twitter, twitterCreator, analytics), - MicrositeVisualSettings(highlightTheme, palette, favicon, shareOnSocial), + MicrositeVisualSettings( + highlightTheme, + highlightLanguages, + palette, + favicon, + shareOnSocial), MicrositeTemplateTexts(micrositeFooterText), micrositeConfigYaml, MicrositeFileLocations(