| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | /*Language: Nginx configAuthor: Peter Leonov <gojpeg@yandex.ru>Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>Category: common, configWebsite: https://www.nginx.com*/function nginx(hljs) {  const VAR = {    className: 'variable',    variants: [      {        begin: /\$\d+/      },      {        begin: /\$\{/,        end: /\}/      },      {        begin: /[$@]/ + hljs.UNDERSCORE_IDENT_RE      }    ]  };  const DEFAULT = {    endsWithParent: true,    keywords: {      $pattern: '[a-z/_]+',      literal:        'on off yes no true false none blocked debug info notice warn error crit ' +        'select break last permanent redirect kqueue rtsig epoll poll /dev/poll'    },    relevance: 0,    illegal: '=>',    contains: [      hljs.HASH_COMMENT_MODE,      {        className: 'string',        contains: [          hljs.BACKSLASH_ESCAPE,          VAR        ],        variants: [          {            begin: /"/,            end: /"/          },          {            begin: /'/,            end: /'/          }        ]      },      // this swallows entire URLs to avoid detecting numbers within      {        begin: '([a-z]+):/',        end: '\\s',        endsWithParent: true,        excludeEnd: true,        contains: [ VAR ]      },      {        className: 'regexp',        contains: [          hljs.BACKSLASH_ESCAPE,          VAR        ],        variants: [          {            begin: "\\s\\^",            end: "\\s|\\{|;",            returnEnd: true          },          // regexp locations (~, ~*)          {            begin: "~\\*?\\s+",            end: "\\s|\\{|;",            returnEnd: true          },          // *.example.com          {            begin: "\\*(\\.[a-z\\-]+)+"          },          // sub.example.*          {            begin: "([a-z\\-]+\\.)+\\*"          }        ]      },      // IP      {        className: 'number',        begin: '\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b'      },      // units      {        className: 'number',        begin: '\\b\\d+[kKmMgGdshdwy]*\\b',        relevance: 0      },      VAR    ]  };  return {    name: 'Nginx config',    aliases: [ 'nginxconf' ],    contains: [      hljs.HASH_COMMENT_MODE,      {        begin: hljs.UNDERSCORE_IDENT_RE + '\\s+\\{',        returnBegin: true,        end: /\{/,        contains: [          {            className: 'section',            begin: hljs.UNDERSCORE_IDENT_RE          }        ],        relevance: 0      },      {        begin: hljs.UNDERSCORE_IDENT_RE + '\\s',        end: ';|\\{',        returnBegin: true,        contains: [          {            className: 'attribute',            begin: hljs.UNDERSCORE_IDENT_RE,            starts: DEFAULT          }        ],        relevance: 0      }    ],    illegal: '[^\\s\\}]'  };}module.exports = nginx;
 |