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.
141 lines
2.9 KiB
141 lines
2.9 KiB
4 weeks ago
|
/*
|
||
|
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;
|