123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // 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:
- // \{-(?:[^-{]|-(?!\})|\{(?!-)|<SELF>)*-\}
- '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;
|