(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);