1
0
mirror of https://github.com/cmur2/language-zonefile.git synced 2024-12-22 02:54:25 +01:00

grammar: refactor internal structure removing duplication and allowing for new features

This commit is contained in:
cn 2017-11-26 17:05:39 +01:00
parent e95220d3a9
commit c476fe63f0
2 changed files with 70 additions and 50 deletions

View File

@ -5,6 +5,9 @@
NEW FEATURES: NEW FEATURES:
- Support toggling comments - Support toggling comments
- Support `CH` resource record class in addition to `IN`
- Support `"..."` strings correctly in resource data
- Support `\X` escape sequences in resource data
IMPROVEMENTS: IMPROVEMENTS:

View File

@ -4,63 +4,80 @@ fileTypes: [
'zone' 'zone'
'db' 'db'
] ]
patterns: [
{include: '#comments'}
{include: '#entries'}
]
repository:
comments:
patterns: [ patterns: [
{ {
match: ';.*' match: ';.*'
name: 'comment.line.semicolon.zonefile' name: 'comment.line.semicolon.zonefile'
} }
]
entries:
patterns: [
{ {
match: '@' match: '(\\$(ORIGIN|origin|TTL|ttl|INCLUDE|include))\\s+([^;]+)'
name: 'keyword.entry.control.zonefile'
}
{
match: '\\$(ORIGIN|origin|TTL|ttl|INCLUDE|include)\\s+([^;]*)'
name: 'keyword.entry.control.zonefile'
captures: captures:
'2': '1':
name: 'keyword.entry.control.zonefile'
'3':
name: 'variable.other.entry.control.zonefile' name: 'variable.other.entry.control.zonefile'
} }
{ {
match: '\\d+(H|h|D|d|W|w|M|m|Y|y)' begin: '((@)|([A-Za-z0-9_.-]+))?(\\s+\\d+[A-Za-z])?\\s+(IN|in|CH|ch)\\s+(\\w+)\\s+'
beginCaptures:
'2':
name: 'keyword.entry.resource.record.zonefile'
'3':
name: 'string.unquoted.domain.name.zonefile'
'4':
name: 'variable.other.ttl.zonefile' name: 'variable.other.ttl.zonefile'
'5':
name: 'keyword.class.zonefile'
'6':
name: 'keyword.resource.type.zonefile'
end: '\\n'
name: 'meta.entry.resource.record.zonefile'
patterns: [
{include: '#comments'}
{include: '#rdata'}
]
}
]
rdata:
patterns: [
{
match: '(\\\\([^\\d]|[\\d]{3,3}))'
name: 'string.unquoted.escape.zonefile'
captures:
'1':
name: 'constant.string.unquoted.escape.zonefile'
} }
{ {
begin: '([A-Za-z0-9_.-]*)\\s+(?:([0-9A-Za-z]*)\\s+)?([I|i][N|n]\\s+[A-Za-z0-9]+)\\s+(.*\\()' match: '"[^"]*"'
name: 'string.quoted.double.resource.data.zonefile'
}
{
begin: '(\\()'
beginCaptures: beginCaptures:
'1': '1':
name: 'string.unquoted.domain.name.zonefile' name: 'string.unquoted.resource.data.zonefile'
'2':
name: 'variable.other.ttl.zonefile'
'3':
name: 'keyword.resource.type.zonefile'
'4':
name: 'string.quoted.resource.data.zonefile'
end: '(\\))' end: '(\\))'
endCaptures: endCaptures:
'1': '1':
name: 'string.quoted.resource.data.zonefile' name: 'string.unquoted.resource.data.zonefile'
name: 'meta.entry.resource.record'
patterns: [ patterns: [
{ {include: '#comments'}
match: ';.*' {include: '#rdata'}
name: 'comment.line.semicolon.zonefile'
}
{
match: '[^\\)]+?'
name: 'string.quoted.resource.data.zonefile'
}
] ]
} }
{ {
match: '([A-Za-z0-9_.-]*)\\s+(?:([0-9A-Za-z]*)\\s+)?([I|i][N|n]\\s+[A-Za-z0-9]+)\\s+(.*)' match: '[^\\s]+?'
captures:
'1':
name: 'string.unquoted.domain.name.zonefile'
'2':
name: 'variable.other.ttl.zonefile'
'3':
name: 'keyword.resource.type.zonefile'
'4':
name: 'string.unquoted.resource.data.zonefile' name: 'string.unquoted.resource.data.zonefile'
} }
] ]