// ABNF grammar: // https://github.com/dhall-lang/dhall-lang/blob/master/standard/dhall.abnf Prism.languages.dhall = { // Multi-line comments can be nested. E.g. {- foo {- bar -} -} // The multi-line pattern is essentially this: // \{-(?:[^-{]|-(?!\})|\{(?!-)|)*-\} 'comment': /--.*|\{-(?:[^-{]|-(?!\})|\{(?!-)|\{-(?:[^-{]|-(?!\})|\{(?!-))*-\})*-\}/, 'string': { pattern: /"(?:[^"\\]|\\.)*"|''(?:[^']|'(?!')|'''|''\$\{)*''(?!'|\$)/, greedy: true, inside: { 'interpolation': { pattern: /\$\{[^{}]*\}/, inside: { 'expression': { pattern: /(^\$\{)[\s\S]+(?=\}$)/, lookbehind: true, alias: 'language-dhall', inside: null // see blow }, 'punctuation': /\$\{|\}/ } } } }, 'label': { pattern: /`[^`]*`/, greedy: true }, 'url': { // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L596 pattern: /\bhttps?:\/\/[\w.:%!$&'*+;=@~-]+(?:\/[\w.:%!$&'*+;=@~-]*)*(?:\?[/?\w.:%!$&'*+;=@~-]*)?/, greedy: true }, 'env': { // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L661 pattern: /\benv:(?:(?!\d)\w+|"(?:[^"\\=]|\\.)*")/, greedy: true, inside: { 'function': /^env/, 'operator': /^:/, 'variable': /[\s\S]+/ } }, 'hash': { // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L725 pattern: /\bsha256:[\da-fA-F]{64}\b/, inside: { 'function': /sha256/, 'operator': /:/, 'number': /[\da-fA-F]{64}/ } }, // https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L359 'keyword': /\b(?:as|assert|else|forall|if|in|let|merge|missing|then|toMap|using|with)\b|\u2200/, 'builtin': /\b(?:None|Some)\b/, 'boolean': /\b(?:False|True)\b/, 'number': /\bNaN\b|-?\bInfinity\b|[+-]?\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/, 'operator': /\/\\|\/\/\\\\|&&|\|\||===|[!=]=|\/\/|->|\+\+|::|[+*#@=:?<>|\\\u2227\u2a53\u2261\u2afd\u03bb\u2192]/, 'punctuation': /\.\.|[{}\[\](),./]/, // we'll just assume that every capital word left is a type name 'class-name': /\b[A-Z]\w*\b/ }; Prism.languages.dhall.string.inside.interpolation.inside.expression.inside = Prism.languages.dhall;