From 20e10322ff484c404e037bba473953248f7836ea Mon Sep 17 00:00:00 2001 From: Danil Ovchinnikov Date: Fri, 15 May 2026 00:12:58 +0300 Subject: [PATCH] feat: add support Tolk grammar --- components/prism-tolk.js | 71 ++++++++++++++++++++++++++++++++++++++++ generate.js | 1 + 2 files changed, 72 insertions(+) create mode 100644 components/prism-tolk.js diff --git a/components/prism-tolk.js b/components/prism-tolk.js new file mode 100644 index 0000000..db4dbca --- /dev/null +++ b/components/prism-tolk.js @@ -0,0 +1,71 @@ +/** + * @file Prism.js definition for Tolk + * @link https://docs.ton.org/tolk/overview + * @version 1.4.0 + * @author Danil Ovchinnikov (https://github.com/Danil42Russia) + * @license MIT + */ +(function(Prism) { + Prism.languages.tolk = { + 'comment': { + pattern: /\/\/.*/, + greedy: true, + }, + + 'block-comment': { + pattern: /\/\*[\s\S]*?(?:\*\/|$)/, + greedy: true, + }, + + 'string': [ + { + pattern: /"""(?:\\[\s\S]|(?!""")[\s\S])*(?:"""|$)/, + greedy: true, + }, + { + pattern: /"(?:\\.|[^"\\\r\n])*(?:"|$)/, + greedy: true, + }, + ], + + 'attr-name': /@[a-zA-Z0-9_.]+/, + + 'number': [ + /\b0x[0-9A-Fa-f_]+\b/, + /\b0b[01_]+\b/, + /\b\d[\d_]*\b/, + ], + + 'boolean': /\b(?:false|null|true)\b/, + + 'constant': /\b[A-Z][A-Z0-9_]*_[A-Z0-9_]*\b/, + + 'keyword': [ + /!is\b/, + /\b(?:as|asm|assert|break|builtin|catch|const|continue|contract|do|else|enum|fun|get|global|if|import|is|lazy|match|mutate|private|readonly|repeat|return|self|struct|throw|tolk|try|type|val|var|while)\b/, + ], + + 'function': [ + /`[^`\r\n]+`(?=\s*(?:<[^(){};\r\n]*>\s*)?\()/, + /\b[a-zA-Z_$][a-zA-Z0-9_$]*\b(?=\s*(?:<[^(){};\r\n]*>\s*)?\()/, + ], + + 'builtin': [ + /\b(?:Cell|address|any_address|array|blockchain|bool|builder|cell|coins|continuation|contract|debug|dict|lisp_list|map|never|random|reflect|slice|string|tuple|unknown|void)\b/, + /\b(?:int\d*|uint\d+|varint\d+|varuint\d+|bits\d+|bytes\d+)\b/, + ], + + 'class-name': /\b[A-Z][a-zA-Z0-9_$]*\b/, + + 'property': { + pattern: /(\.)(?:`[^`\r\n]+`|[a-zA-Z_$][a-zA-Z0-9_$]*)/, + lookbehind: true, + }, + + 'operator': /<<=|>>=|<=>|~>>|\^>>|==|!=|<=|>=|<<|>>|&&|\|\||~\/|\^\/|\+=|-=|\*=|\/=|%=|&=|\|=|\^=|->|=>|\+\+|--|\?\?|[+\-*\/%?=<>!&|^~]/, + + 'punctuation': /[.,;:(){}\[\]]/, + + 'symbol': /`[^`\r\n]+`/, + }; +}(Prism)); diff --git a/generate.js b/generate.js index d8ea193..aa8a878 100644 --- a/generate.js +++ b/generate.js @@ -227,6 +227,7 @@ async function generate() { loadLocalLanguage('./components/prism-fift.js', 'fift', 'Fift', 'fift') loadLocalLanguage('./components/prism-func.js', 'func', 'FunC', 'func') loadLocalLanguage('./components/prism-tact.js', 'tact', 'Tact', 'tact') + loadLocalLanguage('./components/prism-tolk.js', 'tolk', 'Tolk', 'tolk') Object.keys(Prism.languages).forEach(lng => { if (unsupported.includes(lng) || !components.languages[lng]) {