UNPKG

@tanstack/highlight

Version:

Tiny class-based syntax highlighting for documentation.

19 lines (18 loc) • 1.88 kB
import { defineLanguage } from '../core.js'; import { patternTokenizer } from '../internal/patterns.js'; export const cpp = defineLanguage({ name: 'cpp', aliases: ['c++', 'cc', 'cxx', 'hpp', 'hxx'], tokenize: patternTokenizer([ [/\/\/(?:\\\r?\n|[^\n])*|\/\*[\s\S]*?\*\/|(?:u8|u|U|L)?R"([^ ()\\\t\r\n]{0,16})\([\s\S]*?\)\1"|(?:u8|u|U|L)?"(?:\\[\s\S]|[^"\\])*"|(?<![\w'])(?:u8|u|U|L)?'(?:\\.|[^'\\\r\n])*'/g, (match) => match[0].startsWith('/') ? 'comment' : 'string'], [/^[ \t]*#[ \t]*include[ \t]*(<[^>\r\n]+>)/gm, 'string', 1], [/^[ \t]*(#[ \t]*[A-Za-z_]\w*)/gm, 'meta', 1], [/\b(?:alignas|alignof|and|and_eq|asm|auto|bitand|bitor|break|case|catch|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|dynamic_cast|else|enum|explicit|export|extern|for|friend|goto|if|inline|mutable|namespace|new|noexcept|not|not_eq|operator|or|or_eq|private|protected|public|register|reinterpret_cast|requires|return|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|using|virtual|volatile|while|xor|xor_eq)\b/g, 'keyword'], [/\b(?:true|false|nullptr|NULL)\b/g, 'literal'], [/\b(?:bool|char|char8_t|char16_t|char32_t|double|float|int|long|short|signed|unsigned|void|wchar_t)\b/g, 'type'], [/\b(?:class|struct|enum|union)\s+([A-Za-z_]\w*)/g, 'type', 1], [/(?:^|[^\w.])((?:0[xX][\da-fA-F](?:'?[\da-fA-F])*(?:\.(?:[\da-fA-F]'?)*)?(?:[pP][+-]?\d(?:'?\d)*)?|0[bB][01](?:'?[01])*|(?:\d(?:'?\d)*(?:\.(?:\d(?:'?\d)*)?)?|\.\d(?:'?\d)*)(?:[eE][+-]?\d(?:'?\d)*)?)(?:[uUlLfFzZ]+|_[A-Za-z_]\w*)?)(?![\w.])/g, 'number', 1], [/\b[A-Za-z_]\w*(?=\s*\()/g, 'function'], [/<=>|->\*?|\.\*|::|<<=?|>>=?|\+\+|--|&&|\|\||[+\-*/%&|^!<>=]=?|[~?:]/g, 'operator'], ]), });