(function (Prism) { // Many of the following regexes will contain negated lookaheads like `[ \t]+(?![ \t])`. This is a trick to ensure // that quantifiers behave *atomically*. Atomic quantifiers are necessary to prevent exponential backtracking. var spaceAfterBackSlash = /\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source; // At least one space, comment, or line break var space = /(?:[ \t]+(?![ \t])(?:)?|)/.source.replace( //g, function () { return spaceAfterBackSlash; } ); var string = /"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/ .source; var option = /--[\w-]+=(?:|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace( //g, function () { return string; } ); var stringRule = { pattern: RegExp(string), greedy: true, }; var commentRule = { pattern: /(^[ \t]*)#.*/m, lookbehind: true, greedy: true, }; /** * @param {string} source * @param {string} flags * @returns {RegExp} */ function re(source, flags) { source = source .replace(//g, function () { return option; }) .replace(//g, function () { return space; }); return RegExp(source, flags); } Prism.languages.docker = { instruction: { pattern: /(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im, lookbehind: true, greedy: true, inside: { options: { pattern: re( /(^(?:ONBUILD)?\w+)(?:)*/.source, 'i' ), lookbehind: true, greedy: true, inside: { property: { pattern: /(^|\s)--[\w-]+/, lookbehind: true, }, string: [ stringRule, { pattern: /(=)(?!["'])(?:[^\s\\]|\\.)+/, lookbehind: true, }, ], operator: /\\$/m, punctuation: /=/, }, }, keyword: [ { // https://docs.docker.com/engine/reference/builder/#healthcheck pattern: re( /(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\b/ .source, 'i' ), lookbehind: true, greedy: true, }, { // https://docs.docker.com/engine/reference/builder/#from pattern: re( /(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\]+)AS/ .source, 'i' ), lookbehind: true, greedy: true, }, { // https://docs.docker.com/engine/reference/builder/#onbuild pattern: re(/(^ONBUILD)\w+/.source, 'i'), lookbehind: true, greedy: true, }, { pattern: /^\w+/, greedy: true, }, ], comment: commentRule, string: stringRule, variable: /\$(?:\w+|\{[^{}"'\\]*\})/, operator: /\\$/m, }, }, comment: commentRule, }; Prism.languages.dockerfile = Prism.languages.docker; })(Prism); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
Prism.languages.hcl = {
  comment: /(?:\/\/|#).*|\/\*[\s\S]*?(?:\*\/|$)/,
  heredoc: {
    pattern: /<<-?(\w+\b)[\s\S]*?^[ \t]*\1/m,
    greedy: !0,
    alias: 'string',
  },
  keyword: [
    {
      pattern:
        /(?:data|resource)\s+(?:"(?:\\[\s\S]|[^\\"])*")(?=\s+"[\w-]+"\s+\{)/i,
      inside: {
        type: {
          pattern: /(resource|data|\s+)(?:"(?:\\[\s\S]|[^\\"])*")/i,
          lookbehind: !0,
          alias: 'variable',
        },
      },
    },
    {
      pattern:
        /(?:backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+(?=\{)/i,
      inside: {
        type: {
          pattern:
            /(backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+/i,
          lookbehind: !0,
          alias: 'variable',
        },
      },
    },
    /[\w-]+(?=\s+\{)/,
  ],
  property: [/[-\w\.]+(?=\s*=(?!=))/, /"(?:\\[\s\S]|[^\\"])+"(?=\s*[:=])/],
  string: {
    pattern:
      /"(?:[^\\$"]|\\[\s\S]|\$(?:(?=")|\$+(?!\$)|[^"${])|\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\})*"/,
    greedy: !0,
    inside: {
      interpolation: {
        pattern: /(^|[^$])\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\}/,
        lookbehind: !0,
        inside: {
          type: {
            pattern:
              /(\b(?:count|data|local|module|path|self|terraform|var)\b\.)[\w\*]+/i,
            lookbehind: !0,
            alias: 'variable',
          },
          keyword: /\b(?:count|data|local|module|path|self|terraform|var)\b/i,
          function: /\w+(?=\()/,
          string: { pattern: /"(?:\\[\s\S]|[^\\"])*"/, greedy: !0 },
          number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,
          punctuation: /[!\$#%&'()*+,.\/;<=>@\[\\\]^`{|}~?:]/,
        },
      },
    },
  },
  number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,
  boolean: /\b(?:false|true)\b/i,
  punctuation: /[=\[\]{}]/,
};