1 | /*
|
2 | Language: DNS Zone
|
3 | Author: Tim Schumacher <tim@datenknoten.me>
|
4 | Category: config
|
5 | Website: https://en.wikipedia.org/wiki/Zone_file
|
6 | */
|
7 |
|
8 | /** @type LanguageFn */
|
9 | function dns(hljs) {
|
10 | const KEYWORDS = [
|
11 | "IN",
|
12 | "A",
|
13 | "AAAA",
|
14 | "AFSDB",
|
15 | "APL",
|
16 | "CAA",
|
17 | "CDNSKEY",
|
18 | "CDS",
|
19 | "CERT",
|
20 | "CNAME",
|
21 | "DHCID",
|
22 | "DLV",
|
23 | "DNAME",
|
24 | "DNSKEY",
|
25 | "DS",
|
26 | "HIP",
|
27 | "IPSECKEY",
|
28 | "KEY",
|
29 | "KX",
|
30 | "LOC",
|
31 | "MX",
|
32 | "NAPTR",
|
33 | "NS",
|
34 | "NSEC",
|
35 | "NSEC3",
|
36 | "NSEC3PARAM",
|
37 | "PTR",
|
38 | "RRSIG",
|
39 | "RP",
|
40 | "SIG",
|
41 | "SOA",
|
42 | "SRV",
|
43 | "SSHFP",
|
44 | "TA",
|
45 | "TKEY",
|
46 | "TLSA",
|
47 | "TSIG",
|
48 | "TXT"
|
49 | ];
|
50 | return {
|
51 | name: 'DNS Zone',
|
52 | aliases: [
|
53 | 'bind',
|
54 | 'zone'
|
55 | ],
|
56 | keywords: KEYWORDS,
|
57 | contains: [
|
58 | hljs.COMMENT(';', '$', { relevance: 0 }),
|
59 | {
|
60 | className: 'meta',
|
61 | begin: /^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/
|
62 | },
|
63 | // IPv6
|
64 | {
|
65 | className: 'number',
|
66 | begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b'
|
67 | },
|
68 | // IPv4
|
69 | {
|
70 | className: 'number',
|
71 | begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b'
|
72 | },
|
73 | hljs.inherit(hljs.NUMBER_MODE, { begin: /\b\d+[dhwm]?/ })
|
74 | ]
|
75 | };
|
76 | }
|
77 |
|
78 | module.exports = dns;
|