diff --git a/tools/daggosaurus/docusaurus.config.js b/tools/daggosaurus/docusaurus.config.js index 9bc03075..6ec71a69 100644 --- a/tools/daggosaurus/docusaurus.config.js +++ b/tools/daggosaurus/docusaurus.config.js @@ -19,7 +19,7 @@ module.exports = { themeConfig: { sidebarCollapsible: false, prism: { - defaultLanguage: "go", + theme: require("prism-react-renderer/themes/vsDark"), }, navbar: { logo: { diff --git a/tools/daggosaurus/src/theme/prism-include-languages.js b/tools/daggosaurus/src/theme/prism-include-languages.js new file mode 100644 index 00000000..0089f195 --- /dev/null +++ b/tools/daggosaurus/src/theme/prism-include-languages.js @@ -0,0 +1,24 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; +import siteConfig from "@generated/docusaurus.config"; + +const prismIncludeLanguages = (PrismObject) => { + if (ExecutionEnvironment.canUseDOM) { + const { + themeConfig: { prism: { additionalLanguages = [] } = {} }, + } = siteConfig; + window.Prism = PrismObject; + additionalLanguages.forEach((lang) => { + require(`prismjs/components/prism-${lang}`); // eslint-disable-line + }); + require("./prism.cue.js"); + delete window.Prism; + } +}; + +export default prismIncludeLanguages; diff --git a/tools/daggosaurus/src/theme/prism.cue.js b/tools/daggosaurus/src/theme/prism.cue.js new file mode 100644 index 00000000..cdeb4c0a --- /dev/null +++ b/tools/daggosaurus/src/theme/prism.cue.js @@ -0,0 +1,32 @@ +Prism.languages.cue = Prism.languages.extend("clike", { + // https://github.com/PrismJS/prism/blob/master/components/prism-swift.js + string: { + pattern: /(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/, + greedy: true, + inside: { + interpolation: { + pattern: /\\\#*\((?:[^()]|\([^)]+\))+\)/, + inside: { + delimiter: { + pattern: /^\\\#*\(|\)$/, + alias: "variable", + }, + }, + }, + }, + }, + + // https://cuelang.org/docs/references/spec/#values + keyword: /\b(?:package|import|if|else|for|in|let)\b/, + boolean: /\b(?:true|false)\b/, + constant: /\b(?:_\|_|_)\b/, + + // https://github.com/PrismJS/prism/blob/master/components/prism-go.js + number: /(?:\b0x[a-f\d]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[-+]?\d+)?)i?/i, + operator: + /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./, + + // https://cuelang.org/docs/references/spec/#predeclared-identifiers + builtin: + /\b(?:len|null|bool|int|float|string|bytes|number|u?int(?:8|16|32|64|128)?|rune|float(?:32|64))\b/, +});