export function registerLogLanguage()

in src/pr/logs.js [51:114]


export function registerLogLanguage(monaco, groupRanges) {
  // Register a new language
  monaco.languages.register({ id: "logText" });

  // Register a tokens provider for the language
  monaco.languages.setMonarchTokensProvider("logText", {
    tokenizer: {
      root: [
        [/\[30;1m.*?\[0m/, "black"],
        [/\[31;1m.*?\[0m/, "red"],
        [/\[32;1m.*?\[0m/, "green"],
        [/\[33;1m.*?\[0m/, "yellow"],
        [/\[34;1m.*?\[0m/, "blue"],
        [/\[35;1m.*?\[0m/, "magenta"],
        [/\[36;1m.*?\[0m/, "cyan"],
        [/\[37;1m.*?\[0m/, "white"],

        [/\[30m.*?\[0m/, "black"],
        [/\[31m.*?\[0m/, "red"],
        [/\[32m.*?\[0m/, "green"],
        [/\[33m.*?\[0m/, "yellow"],
        [/\[34m.*?\[0m/, "blue"],
        [/\[35m.*?\[0m/, "magenta"],
        [/\[36m.*?\[0m/, "cyan"],
        [/\[37m.*?\[0m/, "white"],

        [/\[0;1;30m.*?\[0m/, "black"],
        [/\[0;1;31m.*?\[0m/, "red"],
        [/\[0;1;32m.*?\[0m/, "green"],
        [/\[0;1;33m.*?\[0m/, "yellow"],
        [/\[0;1;34m.*?\[0m/, "blue"],
        [/\[0;1;35m.*?\[0m/, "magenta"],
        [/\[0;1;36m.*?\[0m/, "cyan"],
        [/\[0;1;37m.*?\[0m/, "white"],

        [/\[1m.*?\[0m/, "cyan"],
        [/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7}Z/, "hidden"],
      ],
    },
  });

  // Define a new theme that contains only rules that match this language
  monaco.editor.defineTheme("logTheme", {
    base: "vs-dark",
    inherit: true,
    rules: [
      { token: "black", foreground: "000000", fontStyle: "bold" },
      { token: "red", foreground: "af0000", fontStyle: "bold" },
      { token: "green", foreground: "87d700", fontStyle: "bold" },
      { token: "yellow", foreground: "d7d700", fontStyle: "bold" },
      { token: "blue", foreground: "5fd7ff", fontStyle: "bold" },
      { token: "magenta", foreground: "8700af", fontStyle: "bold" },
      { token: "cyan", foreground: "00af87", fontStyle: "bold" },
      { token: "white", foreground: "ffffff", fontStyle: "bold" },
      { token: "hidden", foreground: "5f5f5f" },
    ],
  });

  monaco.languages.registerFoldingRangeProvider("logText", {
    provideFoldingRanges: function (model, context, token) {
      return groupRanges;
    },
  });
}