From c76f65aa1467da4adbbd88c1856973c15909248e Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Thu, 3 Jun 2021 18:01:17 -0700 Subject: [PATCH] docs: enable syntax highlighting for cue Signed-off-by: Andrea Luzzardi --- tools/daggosaurus/docusaurus.config.js | 2 +- .../src/theme/prism-include-languages.js | 24 ++++++++++++++ tools/daggosaurus/src/theme/prism.cue.js | 32 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 tools/daggosaurus/src/theme/prism-include-languages.js create mode 100644 tools/daggosaurus/src/theme/prism.cue.js 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/, +});