2023-10-03 11:14:36 +08:00
|
|
|
(function (Prism) {
|
|
|
|
var escapes = /\\(?:["'\\abefnrtv]|0[0-7]{2}|U[\dA-Fa-f]{6}|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2})/;
|
|
|
|
|
|
|
|
Prism.languages.odin = {
|
|
|
|
/**
|
|
|
|
* The current implementation supports only 1 level of nesting.
|
|
|
|
*
|
|
|
|
* @author Michael Schmidt
|
|
|
|
* @author edukisto
|
|
|
|
*/
|
|
|
|
'comment': [
|
|
|
|
{
|
|
|
|
pattern: /\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,
|
|
|
|
greedy: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
pattern: /#![^\n\r]*/,
|
|
|
|
greedy: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
pattern: /\/\/[^\n\r]*/,
|
|
|
|
greedy: true
|
|
|
|
}
|
|
|
|
],
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Should be found before strings because of '"'"- and '`'`-like sequences.
|
|
|
|
*/
|
|
|
|
'char': {
|
|
|
|
pattern: /'(?:\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\n\r'\\])'/,
|
|
|
|
greedy: true,
|
|
|
|
inside: {
|
|
|
|
'symbol': escapes
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
'string': [
|
|
|
|
{
|
|
|
|
pattern: /`[^`]*`/,
|
|
|
|
greedy: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
pattern: /"(?:\\.|[^\n\r"\\])*"/,
|
|
|
|
greedy: true,
|
|
|
|
inside: {
|
|
|
|
'symbol': escapes
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
|
|
|
|
'directive': {
|
|
|
|
pattern: /#\w+/,
|
|
|
|
alias: 'property'
|
|
|
|
},
|
|
|
|
|
|
|
|
'number': /\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.(?!\.)\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?(?!\w)/,
|
|
|
|
|
|
|
|
'discard': {
|
|
|
|
pattern: /\b_\b/,
|
|
|
|
alias: 'keyword'
|
|
|
|
},
|
|
|
|
|
|
|
|
'procedure-definition': {
|
|
|
|
pattern: /\b\w+(?=[ \t]*(?::\s*){2}proc\b)/,
|
|
|
|
alias: 'function'
|
|
|
|
},
|
|
|
|
|
|
|
|
'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* false, nil, true can be used as procedure names. "_" and keywords can't.
|
|
|
|
*/
|
|
|
|
'procedure-name': {
|
|
|
|
pattern: /\b\w+(?=[ \t]*\()/,
|
|
|
|
alias: 'function'
|
|
|
|
},
|
|
|
|
|
|
|
|
'boolean': /\b(?:false|nil|true)\b/,
|
|
|
|
|
|
|
|
'constant-parameter-sign': {
|
|
|
|
pattern: /\$/,
|
|
|
|
alias: 'important'
|
|
|
|
},
|
|
|
|
|
|
|
|
'undefined': {
|
|
|
|
pattern: /---/,
|
|
|
|
alias: 'operator'
|
|
|
|
},
|
|
|
|
|
|
|
|
'arrow': {
|
|
|
|
pattern: /->/,
|
|
|
|
alias: 'punctuation'
|
|
|
|
},
|
|
|
|
|
|
|
|
'operator': /\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,
|
|
|
|
|
|
|
|
'punctuation': /[(),.:;@\[\]{}]/
|
|
|
|
};
|
|
|
|
}(Prism));
|