diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 2c04af3e..269c82ee 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -2,6 +2,10 @@ import { defineConfig } from 'vitepress' import fs from 'node:fs' import path from 'node:path' +const llvmGrammar = JSON.parse( + fs.readFileSync(path.resolve(__dirname, 'llvm.tmLanguage.json'), 'utf-8') +) + export default defineConfig({ title: 'ChadScript', description: 'Compile TypeScript to native binaries via LLVM', @@ -9,6 +13,10 @@ export default defineConfig({ base: '/ChadScript/', appearance: 'dark', + markdown: { + languages: [llvmGrammar], + }, + transformPageData(pageData) { const mdPath = path.resolve(__dirname, '..', pageData.relativePath) try { diff --git a/docs/.vitepress/llvm.tmLanguage.json b/docs/.vitepress/llvm.tmLanguage.json new file mode 100644 index 00000000..ce882a3a --- /dev/null +++ b/docs/.vitepress/llvm.tmLanguage.json @@ -0,0 +1,18 @@ +{ + "name": "llvm", + "scopeName": "source.llvm", + "patterns": [ + { "match": ";.*$", "name": "comment.line.llvm" }, + { "match": "\\b(define|declare|global|constant|private|internal|external|unnamed_addr|align|to|nuw|nsw|exact|inbounds|volatile|tail|musttail|notail)\\b", "name": "keyword.other.llvm" }, + { "match": "\\b(ret|br|switch|invoke|resume|unreachable|call|alloca|load|store|getelementptr|extractvalue|insertvalue|extractelement|insertelement|shufflevector|phi|select|icmp|fcmp|add|sub|mul|udiv|sdiv|urem|srem|fadd|fsub|fmul|fdiv|frem|shl|lshr|ashr|and|or|xor|trunc|zext|sext|fptrunc|fpext|fptoui|fptosi|uitofp|sitofp|ptrtoint|inttoptr|bitcast|addrspacecast)\\b", "name": "keyword.control.llvm" }, + { "match": "\\b(i1|i8|i16|i32|i64|i128|float|double|void|label|metadata|token|ptr)\\b", "name": "storage.type.llvm" }, + { "match": "\\b(eq|ne|ugt|uge|ult|ule|sgt|sge|slt|sle|oeq|ogt|oge|olt|ole|one|ord|ueq|une|uno|true|false|null|zeroinitializer|undef|poison)\\b", "name": "constant.language.llvm" }, + { "match": "@[a-zA-Z$._][a-zA-Z$._0-9]*", "name": "entity.name.function.llvm" }, + { "match": "%[a-zA-Z$._][a-zA-Z$._0-9]*", "name": "variable.other.llvm" }, + { "match": "%[0-9]+", "name": "variable.other.llvm" }, + { "match": "\\b-?[0-9]+\\.?[0-9]*([eE][+-]?[0-9]+)?\\b", "name": "constant.numeric.llvm" }, + { "match": "c\"[^\"]*\"", "name": "string.quoted.double.llvm" }, + { "match": "\"[^\"]*\"", "name": "string.quoted.double.llvm" }, + { "match": "^[a-zA-Z$._][a-zA-Z$._0-9]*:", "name": "entity.name.label.llvm" } + ] +} diff --git a/docs/.vitepress/theme/ExampleTabs.vue b/docs/.vitepress/theme/ExampleTabs.vue index 7943be9f..4a21c97a 100644 --- a/docs/.vitepress/theme/ExampleTabs.vue +++ b/docs/.vitepress/theme/ExampleTabs.vue @@ -1,8 +1,12 @@