You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
2.9 KiB
140 lines
2.9 KiB
/* |
|
Language: Nginx config |
|
Author: Peter Leonov <gojpeg@yandex.ru> |
|
Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org> |
|
Category: common, config |
|
Website: 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;
|
|
|