diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 067dc566..5df59e4b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,35 +22,19 @@ jobs: uses: actions/setup-node@v4 with: node-version: 20 + - name: Setup Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Install mdbook + run: | + cargo install mdbook --no-default-features --features search --vers "^0.4" --locked + cargo install mdbook-variables --vers "^0.2" --locked + export PATH="$PATH:$HOME/.cargo/bin" + mdbook --version - name: Build and test run: | sbt -v scalafmtSbtCheck scalafmtCheckAll scripted makeSite - - name: Pandoc English - if: ${{ github.event_name == 'push' && github.repository == 'sbt/website' && github.ref == 'refs/heads/1.x' }} - uses: eed3si9n/pandoc@master - with: - args: '--pdf-engine=xelatex --toc -s -o target/pamflet/sbt-reference.pdf target/pamflet/Combined+Pages+Pdf.md' - - - name: Pandoc Japanese - if: ${{ github.event_name == 'push' && github.repository == 'sbt/website' && github.ref == 'refs/heads/1.x' }} - uses: eed3si9n/pandoc@master - with: - args: '--pdf-engine=xelatex -V CJKmainfont="Noto Sans JP" --toc -s -o target/pamflet/ja/sbt-reference.pdf target/pamflet/ja/Combined+Pages+Pdf.md' - - - name: Pandoc Chinese - if: ${{ github.event_name == 'push' && github.repository == 'sbt/website' && github.ref == 'refs/heads/1.x' }} - uses: eed3si9n/pandoc@master - with: - args: '--pdf-engine=xelatex -V CJKmainfont="Noto Sans SC" --toc -s -o target/pamflet/zh-cn/sbt-reference.pdf target/pamflet/zh-cn/Combined+Pages+Pdf.md' - - - name: Pandoc Spanish - if: ${{ github.event_name == 'push' && github.repository == 'sbt/website' && github.ref == 'refs/heads/1.x' }} - uses: eed3si9n/pandoc@master - with: - args: '--pdf-engine=xelatex --toc -s -o target/pamflet/es/sbt-reference.pdf target/pamflet/es/Combined+Pages+Pdf.md' - # https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets - name: Deploy to GH Pages if: ${{ github.event_name == 'push' && github.repository == 'sbt/website' && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/1.x' || github.ref == 'refs/heads/1.x-beta') }} diff --git a/.gitignore b/.gitignore index 6deaf8c5..0b302eea 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ node_modules # Production build +book # Generated files .docusaurus diff --git a/book.toml b/book.toml new file mode 100644 index 00000000..804a9399 --- /dev/null +++ b/book.toml @@ -0,0 +1,18 @@ +[book] +authors = ["Eugene Yokota"] +language = "en" +multilingual = false +src = "src/reference" +title = "The book of sbt" + +[output.html] +theme = "theme" +additional-css = ["src/reference/custom-2024.css"] +cname = "www.scala-sbt.org" + +[preprocessor.variables] + +[preprocessor.variables.variables] +sbt_version = "2.0.0-alpha7" +sbt_runner_version = "1.9.8" +scala3ExampleVersion = "3.3.1" diff --git a/build.sbt b/build.sbt index b8061e5b..d646f796 100644 --- a/build.sbt +++ b/build.sbt @@ -11,53 +11,23 @@ ThisBuild / scalafmtOnCompile := true lazy val root = (project in file(".")) .enablePlugins( (if (isDevelopBranch) Seq(DocusaurusSitePlugin) else Seq()) ++ - Seq(LowTechSnippetPamfletPlugin, ScriptedPlugin): _* + Seq(MdBookSitePlugin, ScriptedPlugin, SitePreviewPlugin): _* ) .settings( name := "website", siteEmail := "eed3si9n" + "@gmail.com", // Reference - Pamflet / sourceDirectory := baseDirectory.value / "src" / "reference", - Pamflet / siteSubdirName := s"""$targetSbtBinaryVersion/docs""", + MdBook / siteSubdirName := s"""$targetSbtBinaryVersion/docs/en""", tutorialSubDirName := s"""$targetSbtBinaryVersion/tutorial""", landingSubDirName := "", // Redirects redirectSettings, - SiteHelpers.addMappingsToSiteDir(Redirect / mappings, Pamflet / siteSubdirName), + // SiteHelpers.addMappingsToSiteDir(Redirect / mappings, Pamflet / siteSubdirName), SiteHelpers.addMappingsToSiteDir(RedirectLanding / mappings, landingSubDirName), - redirectTutorialSettings, - SiteHelpers.addMappingsToSiteDir(RedirectTutorial / mappings, tutorialSubDirName), + // redirectTutorialSettings, + // SiteHelpers.addMappingsToSiteDir(RedirectTutorial / mappings, tutorialSubDirName), // GitHub Pages. See project/Docs.scala customGhPagesSettings, - Pamflet / mappings := { - val xs = (Pamflet / mappings).value - Pdf.cleanupCombinedPages(xs) ++ xs - }, - if (scala.sys.BooleanProp.keyExists("sbt.website.generate_pdf")) - Def settings ( - // NOTE - PDF settings must be done externally like this because pdf generation generically looks - // through `mappings in Config` for Combined+Pages.md to generate PDF from, and therefore we - // can't create a circular dependency by adding it back into the original mappings. - Pdf.settings, - Pdf.settingsFor(Pamflet, "sbt-reference"), - SiteHelpers.addMappingsToSiteDir( - Pamflet / Pdf.generatePdf / mappings, - Pamflet / siteSubdirName, - ) - ) - else if (scala.sys.BooleanProp.keyExists("sbt.website.detect_pdf")) - Def.settings( - // assume PDF files were created in another Docker container - Pamflet / Pdf.detectPdf := ((Pamflet / target).value ** "*.pdf").get, - Pamflet / Pdf.detectPdf / mappings := { - (Pamflet / Pdf.detectPdf).value pair Path.relativeTo((Pamflet / target).value) - }, - SiteHelpers.addMappingsToSiteDir( - Pamflet / Pdf.detectPdf / mappings, - Pamflet / siteSubdirName, - ) - ) - else Nil, fileEncoding := { sys.props("file.encoding") match { case "UTF-8" => "UTF-8" @@ -71,5 +41,3 @@ lazy val root = (project in file(".")) scriptedBufferLog := false, isGenerateSiteMap := true ) - -// diff --git a/docusaurus.config.js b/docusaurus.config.js index c6d8ae93..800e8beb 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -72,14 +72,6 @@ const config = { 'classic', /** @type {import('@docusaurus/preset-classic').Options} */ ({ - docs: { - routeBasePath: '2.x/docs/', - sidebarPath: './sidebars.js', - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/sbt/website/tree/develop', - }, theme: { customCss: './src/css/custom.css', }, @@ -115,8 +107,7 @@ const config = { position: 'left', }, { - type: 'docSidebar', - sidebarId: 'tutorialSidebar', + href: 'https://www.scala-sbt.org/2.x/docs/en/', label: 'Doc Beta', position: 'right', }, diff --git a/project/Docs.scala b/project/Docs.scala index a59fec13..f9a92049 100644 --- a/project/Docs.scala +++ b/project/Docs.scala @@ -34,7 +34,8 @@ object Docs { // - src/reference/template.properties lazy val targetSbtBinaryVersion = { if (isBetaBranch) "1.x-beta" - else "1.x" + else if (is1xBranch) "1.x" + else "2.x" } // to avoid duplicates, tell Google to only index /1.x/** diff --git a/project/MdBookSitePlugin.scala b/project/MdBookSitePlugin.scala new file mode 100644 index 00000000..2ea0d1ac --- /dev/null +++ b/project/MdBookSitePlugin.scala @@ -0,0 +1,41 @@ +import sbt.* +import Keys.* +import com.typesafe.sbt.site.SitePlugin.autoImport.siteSubdirName +import com.typesafe.sbt.site.SitePlugin +import com.typesafe.sbt.site.util.SiteHelpers +import scala.annotation.nowarn + +object MdBookSitePlugin extends AutoPlugin { + override def requires = SitePlugin + override def trigger = noTrigger + override def projectSettings = mdbookSettings(Compile) + + object autoImport { + val MdBook = config("mdbook") + val mdbookBuild = taskKey[File]("") + val mdbookDirectory = settingKey[File]("Directory where docs are located") + } + import autoImport.* + + @nowarn + def mdbookSettings(config: Configuration): Seq[Setting[_]] = + inConfig(if (config == Compile) MdBook else config)( + List( + siteSubdirName := "", + mdbookDirectory := baseDirectory.value, + config / mdbookBuild := { + import scala.sys.process.* + val dir = mdbookDirectory.value + Process(List("mdbook", "build"), cwd = dir).! + val out = dir / "book" + out + }, + ) + ) ++ + SiteHelpers.watchSettings(ThisScope.in(config, mdbookBuild.key)) ++ + SiteHelpers.addMappingsToSiteDir( + (config / mdbookBuild) + .map(SiteHelpers.selectSubpaths(_, AllPassFilter)), + (if (config == Compile) MdBook else config) / siteSubdirName + ) +} diff --git a/project/plugins.sbt b/project/plugins.sbt index 39264f42..604615d0 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,5 +1,4 @@ -addSbtPlugin("com.github.sbt" % "sbt-site-paradox" % "1.5.0") +ThisBuild / libraryDependencySchemes += "org.scala-lang.modules" %% "scala-xml" % VersionScheme.Always +addSbtPlugin("com.github.sbt" % "sbt-site" % "1.5.0") addSbtPlugin("com.github.sbt" % "sbt-ghpages" % "0.7.0") -libraryDependencies += "org.foundweekends" %% "pamflet-library" % "0.11.0" addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2") -addSbtPlugin("com.lightbend.paradox" % "sbt-paradox" % "0.6.9") diff --git a/src/reference/README.md b/src/reference/README.md new file mode 100644 index 00000000..6d5affd1 --- /dev/null +++ b/src/reference/README.md @@ -0,0 +1,17 @@ +The sbt book +============ + +![sbt logo](files/sbt-logo.svg) + +sbt is a simple build tool for Scala and Java. +sbt downloads your library dependencies via Coursier, +incrementally compiles and tests your projects, +integrates with IDEs like IntelliJ and VS Code, +makes JAR packages, and publishes them to [Maven Central](https://central.sonatype.com/), +JVM community's package registry. + +```scala +scalaVersion := "{{scala3ExampleVersion}}" +``` + +You just need one line of `build.sbt` to get started with Scala. diff --git a/src/reference/SUMMARY.md b/src/reference/SUMMARY.md new file mode 100644 index 00000000..82e21865 --- /dev/null +++ b/src/reference/SUMMARY.md @@ -0,0 +1,14 @@ +# Summary + +[Introduction](README.md) + +# Quick Start + +- [Installing sbt runner](Setup.md) +- [sbt by example](sbt-by-example.md) + +---- + +# Appendix + +- [Setup notes](setup-notes.md) diff --git a/src/reference/Setup.md b/src/reference/Setup.md new file mode 100644 index 00000000..f766f7f7 --- /dev/null +++ b/src/reference/Setup.md @@ -0,0 +1,56 @@ +Installing sbt runner +===================== + +To build an sbt project, you'll need to take these steps: + +- Install JDK (We recommend Eclipse Adoptium Temurin JDK 8, 11, or 17, or Zulu JDK 8 for macOS with ARM chips). +- Install sbt runner. + +sbt runner is a script that invokes a declared version of sbt, downloading it beforehand if necessary. This allows build authors to precisely control +the sbt version, instead of relying on users' machine environment. + +### Prerequisites + +sbt runs on all major operating systems; however, it requires JDK 8 or higher to run. + +```bash +java -version +# openjdk version "1.8.0_352" +``` + +### Install sbt with **cs setup** + +Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. + +```bash +cs setup +``` + +This should install the latest stable version of `sbt`. + +### Installing from SDKMAN + +To install both JDK and sbt, consider using [SDKMAN](https://sdkman.io/). + +```bash +sdk install java $(sdk list java | grep -o "\b8\.[0-9]*\.[0-9]*\-tem" | head -1) +sdk install sbt +``` + +### Universal packages + +- [sbt-{{sbt_runner_version}}.zip][ZIP] +- [sbt-{{sbt_runner_version}}.tgz][TGZ] +- [sbt-{{sbt_runner_version}}.msi][MSI] + +Verify the sbt runner +--------------------- + +```bash +sbt --script-version +# {{sbt_runner_version}} +``` + + [MSI]: https://github.com/sbt/sbt/releases/download/v{{sbt_runner_version}}/sbt-{{sbt_runner_version}}.msi + [ZIP]: https://github.com/sbt/sbt/releases/download/v{{sbt_runner_version}}/sbt-{{sbt_runner_version}}.zip + [TGZ]: https://github.com/sbt/sbt/releases/download/v{{sbt_runner_version}}/sbt-{{sbt_runner_version}}.tgz diff --git a/src/reference/custom-2024.css b/src/reference/custom-2024.css new file mode 100644 index 00000000..6b71502c --- /dev/null +++ b/src/reference/custom-2024.css @@ -0,0 +1,7 @@ +html { + font-family: "Helvetica Neue", "Roboto", "Arial", sans-serif; +} + +pre { + border: solid 1px lightgray; +} diff --git a/src/reference/00-Getting-Started/02-sbt-by-example.md b/src/reference/sbt-by-example.md similarity index 94% rename from src/reference/00-Getting-Started/02-sbt-by-example.md rename to src/reference/sbt-by-example.md index 35696a54..6fc0e8fd 100644 --- a/src/reference/00-Getting-Started/02-sbt-by-example.md +++ b/src/reference/sbt-by-example.md @@ -1,37 +1,32 @@ ---- -out: sbt-by-example.html ---- [Basic-Def]: Basic-Def.html - [Setup]: Setup.html + [Setup]: Setup.md [Running]: Running.html [Essential-sbt]: https://www.scalawilliam.com/essential-sbt/ sbt by example -------------- -This page assumes you've [installed sbt 1][Setup]. +This page assumes you've [installed sbt runner][Setup]. Let's start with examples rather than explaining how sbt works or why. ### Create a minimum sbt build -``` -\$ mkdir foo-build -\$ cd foo-build -\$ touch build.sbt +```bash +mkdir foo-build +cd foo-build +touch build.sbt +mkdir project +echo "sbt.version={{sbt_version}}" > project/build.properties ``` ### Start sbt shell -``` -\$ sbt -[info] Updated file /tmp/foo-build/project/build.properties: set sbt.version to 1.9.3 -[info] welcome to sbt 1.9.3 (Eclipse Adoptium Java 17.0.8) -[info] Loading project definition from /tmp/foo-build/project -[info] loading settings for project foo-build from build.sbt ... -[info] Set current project to foo-build (in build file:/tmp/foo-build/) -[info] sbt server started at local:///Users/eed3si9n/.sbt/1.0/server/abc4fb6c89985a00fd95/sock +```bash +$ sbt +[info] welcome to sbt {{sbt_version}} (Azul Systems, Inc. Java 1.8.0_352) +.... [info] started sbt server sbt:foo-build> ``` @@ -48,8 +43,8 @@ sbt:foo-build> exit As a convention, we will use the `sbt:...>` or `>` prompt to mean that we're in the sbt interactive shell. -``` -\$ sbt +```bash +$ sbt sbt:foo-build> compile ``` @@ -453,10 +448,10 @@ sbt:Hello> dist Here's how you can run the packaged app: ``` -\$ /tmp/someother -\$ cd /tmp/someother -\$ unzip -o -d /tmp/someother /tmp/foo-build/target/universal/hello-0.1.0-SNAPSHOT.zip -\$ ./hello-0.1.0-SNAPSHOT/bin/hello +$ /tmp/someother +$ cd /tmp/someother +$ unzip -o -d /tmp/someother /tmp/foo-build/target/universal/hello-0.1.0-SNAPSHOT.zip +$ ./hello-0.1.0-SNAPSHOT/bin/hello Hello! The current temperature in New York is 22.7 C. ``` @@ -473,7 +468,7 @@ sbt:Hello> Docker/publishLocal Here's how to run the Dockerized app: ``` -\$ docker run hello:0.1.0-SNAPSHOT +$ docker run hello:0.1.0-SNAPSHOT Hello! The current temperature in New York is 22.7 C. ``` @@ -528,7 +523,7 @@ sbt:Hello> inspect tree dist You can also run sbt in batch mode, passing sbt commands directly from the terminal. ``` -\$ sbt clean "testOnly HelloSuite" +$ sbt clean "testOnly HelloSuite" ``` **Note**: Running in batch mode requires JVM spinup and JIT each time, @@ -541,7 +536,7 @@ or a continuous test like `~testQuick`. You can use the sbt `new` command to quickly setup a simple "Hello world" build. ``` -\$ sbt new scala/scala-seed.g8 +$ sbt new scala/scala-seed.g8 .... A minimal Scala project. diff --git a/docs/getting-started/01-setup.mdx b/src/reference/setup-notes.md similarity index 55% rename from docs/getting-started/01-setup.mdx rename to src/reference/setup-notes.md index 8b2ba2c2..889c647f 100644 --- a/docs/getting-started/01-setup.mdx +++ b/src/reference/setup-notes.md @@ -1,66 +1,19 @@ ---- -sidebar_position: 1 -title: Installing sbt runner -slug: /setup ---- +Setup Notes +=========== -import { sbtVersion, windowsBuild, downloadUrl } from '@site/variables'; -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -Installing sbt runner -===================== - -To build an sbt project, you'll need to take these steps: - -- Install JDK (We recommend Eclipse Adoptium Temurin JDK 8, 11, or 17, or Zulu JDK 8 for macOS with ARM chips). -- Install sbt runner. - -sbt runner is a script that invokes a declared version of sbt, downloading it beforehand if necessary. This allows build authors to precisely control -the sbt version, instead of relying on users' machine environment. - -Prerequisites -------------- - -sbt runs on all major operating systems. It requires JDK 8 or higher to run. - -```bash -$ java -version -openjdk version "1.8.0_352" -``` - -Install sbt with **cs setup** ------------------------------ - -Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. - -```bash -cs setup -``` - -This should install the latest stable version of `sbt`. - -Installing from SDKMAN ----------------------- - -To install both JDK and sbt, consider using [SDKMAN](https://sdkman.io/). - -``` -$ sdk install java $(sdk list java | grep -o "\b8\.[0-9]*\.[0-9]*\-tem" | head -1) -$ sdk install sbt -``` - -Using Coursier or SDKMAN has two advantages. +See [Installing sbt runner](Setup.md) for the instruction on general setup. Using Coursier or SDKMAN has two advantages. 1. They will install the official packaging by Eclipse Adoptium etc, as opposed to the ["mystery meat OpenJDK builds"](https://mail.openjdk.java.net/pipermail/jdk8u-dev/2019-May/009330.html). 2. They will install `tgz` packaging of sbt that contains all JAR files. (DEB and RPM packages do not to save bandwidth) +This page describes alternative ways of installing the sbt runner. Note that some of the third-party packages may not provide the latest version. + OS specific setup ----------------- - - -### Homebrew +### macOS + +#### Homebrew ```bash $ brew install sbt @@ -69,35 +22,28 @@ $ brew install sbt :::warning Homebrew maintainers have added a dependency to JDK 13 because they want to use more brew dependencies ([brew#50649](https://github.com/Homebrew/homebrew-core/issues/50649)). This causes sbt to use JDK 13 even when `java` available on PATH is JDK 8 or 11. To prevent `sbt` from running on JDK 13, install [jEnv](https://www.jenv.be/) or switch to using [SDKMAN](https://sdkman.io/). ::: - - -- sbt-{windowsBuild}.msi -- sbt-{windowsBuild}.msi.sha256 -- sbt-{windowsBuild}.msi.asc +### Windows -:::note -Third-party packages may not provide the latest version. Please make -sure to report any issues with these packages to the relevant maintainers. -::: +- [sbt-{{sbtRunnerVersion}}.msi](https://github.com/sbt/sbt/releases/download/v{{sbtRunnerVersion}}/sbt-{{sbtRunnerVersion}}.msi) -### [Chocolatey](https://chocolatey.org/packages/sbt) +#### [Chocolatey](https://chocolatey.org/packages/sbt) ``` > choco install sbt ``` -### [Scoop](https://scoop.sh/) +#### [Scoop](https://scoop.sh/) ``` > scoop install sbt ``` - - -### Ubuntu and other Debian-based distributions +### Linux + +#### Ubuntu and other Debian-based distributions -[DEB][DEB] package is officially supported by sbt. +[DEB][DEB] package is officially supported by sbt, but it does not contain JAR files to save bandwidth. Ubuntu and other Debian-based distributions use the DEB format, but usually you don't install your software from a local DEB file. Instead they come with package managers both for the command line (e.g. `apt-get`, `aptitude`) or with a graphical user interface (e.g. Synaptic). Run the following from the terminal to install `sbt` (You'll need superuser privileges to do so, hence the `sudo`). @@ -117,15 +63,13 @@ Package managers will check a number of configured repositories for packages to Once `sbt` is installed, you'll be able to manage the package in `aptitude` or Synaptic after you updated their package cache. You should also be able to see the added repository at the bottom of the list in System Settings -> Software & Updates -> Other Software: -![Ubuntu Software & Updates Screenshot](/img/ubuntu-sources.png "Ubuntu Software & Updates Screenshot") +![Ubuntu Software & Updates Screenshot](/files/ubuntu-sources.png "Ubuntu Software & Updates Screenshot") -:::note `sudo apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823` may not work on Ubuntu Bionic LTS (18.04) since it's using a buggy GnuPG, so we are advising to use web API to download the public key in the above. -::: -### Red Hat Enterprise Linux and other RPM-based distributions +#### Red Hat Enterprise Linux and other RPM-based distributions -[RPM][RPM] package is officially supported by sbt. +[RPM][RPM] package is officially supported by sbt, but it does not contain JAR files to save bandwidth. Red Hat Enterprise Linux and other RPM-based distributions use the RPM format. Run the following from the terminal to install `sbt` (You'll need superuser privileges to do so, hence the `sudo`). @@ -146,26 +90,6 @@ sudo rm -f /etc/yum.repos.d/bintray-rpm.repo curl -L https://www.scala-sbt.org/sbt-rpm.repo > sbt-rpm.repo sudo mv sbt-rpm.repo /etc/yum.repos.d/ sudo dnf install sbt -``` - - - - -Universal packages ------------------- - -- sbt-{sbtVersion}.zip -- sbt-{sbtVersion}.zip.sha256 -- sbt-{sbtVersion}.zip.asc -- sbt-{sbtVersion}.tgz -- sbt-{sbtVersion}.tgz.sha256 -- sbt-{sbtVersion}.tgz.asc - -Verify the sbt runner ---------------------- - -```bash -$ sbt --script-version ``` [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi diff --git a/theme/highlight.css b/theme/highlight.css new file mode 100644 index 00000000..7024045d --- /dev/null +++ b/theme/highlight.css @@ -0,0 +1,125 @@ +/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/ + +.hljs { + color: #24292e; + background: #ffffff; +} + +.hljs-doctag, +.hljs-keyword, +.hljs-meta .hljs-keyword, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-variable.language_ { + /* prettylights-syntax-keyword */ + color: #d73a49; +} + +.hljs-title, +.hljs-title.class_, +.hljs-title.class_.inherited__, +.hljs-title.function_ { + /* prettylights-syntax-entity */ + color: #6f42c1; +} + +.hljs-attr, +.hljs-attribute, +.hljs-literal, +.hljs-meta, +.hljs-number, +.hljs-operator, +.hljs-variable, +.hljs-selector-attr, +.hljs-selector-class, +.hljs-selector-id { + /* prettylights-syntax-constant */ + color: #005cc5; +} + +.hljs-regexp, +.hljs-string, +.hljs-meta .hljs-string { + /* prettylights-syntax-string */ + color: #032f62; +} + +.hljs-built_in, +.hljs-symbol { + /* prettylights-syntax-variable */ + color: #e36209; +} + +.hljs-comment, +.hljs-code, +.hljs-formula { + /* prettylights-syntax-comment */ + color: #6a737d; +} + +.hljs-name, +.hljs-quote, +.hljs-selector-tag, +.hljs-selector-pseudo { + /* prettylights-syntax-entity-tag */ + color: #22863a; +} + +.hljs-subst { + /* prettylights-syntax-storage-modifier-import */ + color: #24292e; +} + +.hljs-section { + /* prettylights-syntax-markup-heading */ + color: #005cc5; + font-weight: bold; +} + +.hljs-bullet { + /* prettylights-syntax-markup-list */ + color: #735c0f; +} + +.hljs-emphasis { + /* prettylights-syntax-markup-italic */ + color: #24292e; + font-style: italic; +} + +.hljs-strong { + /* prettylights-syntax-markup-bold */ + color: #24292e; + font-weight: bold; +} + +.hljs-addition { + /* prettylights-syntax-markup-inserted */ + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + /* prettylights-syntax-markup-deleted */ + color: #b31d28; + background-color: #ffeef0; +} + +.hljs-char.escape_, +.hljs-link, +.hljs-params, +.hljs-property, +.hljs-punctuation, +.hljs-tag { + /* purposely ignored */ +}