123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*
- Language: Nginx config
- Author: Peter Leonov <gojpeg@yandex.ru>
- Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>
- Category: config, web
- Website: https://www.nginx.com
- */
- /** @type LanguageFn */
- function nginx(hljs) {
- const regex = hljs.regex;
- const VAR = {
- className: 'variable',
- variants: [
- { begin: /\$\d+/ },
- { begin: /\$\{\w+\}/ },
- { begin: regex.concat(/[$@]/, hljs.UNDERSCORE_IDENT_RE) }
- ]
- };
- const LITERALS = [
- "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"
- ];
- const DEFAULT = {
- endsWithParent: true,
- keywords: {
- $pattern: /[a-z_]{2,}|\/dev\/poll/,
- literal: LITERALS
- },
- 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,
- {
- beginKeywords: "upstream location",
- end: /;|\{/,
- contains: DEFAULT.contains,
- keywords: { section: "upstream location" }
- },
- {
- className: 'section',
- begin: regex.concat(hljs.UNDERSCORE_IDENT_RE + regex.lookahead(/\s+\{/)),
- relevance: 0
- },
- {
- begin: regex.lookahead(hljs.UNDERSCORE_IDENT_RE + '\\s'),
- end: ';|\\{',
- contains: [
- {
- className: 'attribute',
- begin: hljs.UNDERSCORE_IDENT_RE,
- starts: DEFAULT
- }
- ],
- relevance: 0
- }
- ],
- illegal: '[^\\s\\}\\{]'
- };
- }
- export { nginx as default };
|