]> luflow.net public git repositories - flow-web.git/blob - static/highlight/languages/routeros.js
Initial commit.
[flow-web.git] / static / highlight / languages / routeros.js
1 /*! `routeros` grammar compiled for Highlight.js 11.11.1 */
2 (function(){
3 var hljsGrammar = (function () {
4 'use strict';
5
6 /*
7 Language: MikroTik RouterOS script
8 Author: Ivan Dementev <ivan_div@mail.ru>
9 Description: Scripting host provides a way to automate some router maintenance tasks by means of executing user-defined scripts bounded to some event occurrence
10 Website: https://wiki.mikrotik.com/wiki/Manual:Scripting
11 Category: scripting
12 */
13
14 // Colors from RouterOS terminal:
15 // green - #0E9A00
16 // teal - #0C9A9A
17 // purple - #99069A
18 // light-brown - #9A9900
19
20 function routeros(hljs) {
21 const STATEMENTS = 'foreach do while for if from to step else on-error and or not in';
22
23 // Global commands: Every global command should start with ":" token, otherwise it will be treated as variable.
24 const GLOBAL_COMMANDS = 'global local beep delay put len typeof pick log time set find environment terminal error execute parse resolve toarray tobool toid toip toip6 tonum tostr totime';
25
26 // Common commands: Following commands available from most sub-menus:
27 const COMMON_COMMANDS = 'add remove enable disable set get print export edit find run debug error info warning';
28
29 const LITERALS = 'true false yes no nothing nil null';
30
31 const OBJECTS = 'traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw';
32
33 const VAR = {
34 className: 'variable',
35 variants: [
36 { begin: /\$[\w\d#@][\w\d_]*/ },
37 { begin: /\$\{(.*?)\}/ }
38 ]
39 };
40
41 const QUOTE_STRING = {
42 className: 'string',
43 begin: /"/,
44 end: /"/,
45 contains: [
46 hljs.BACKSLASH_ESCAPE,
47 VAR,
48 {
49 className: 'variable',
50 begin: /\$\(/,
51 end: /\)/,
52 contains: [ hljs.BACKSLASH_ESCAPE ]
53 }
54 ]
55 };
56
57 const APOS_STRING = {
58 className: 'string',
59 begin: /'/,
60 end: /'/
61 };
62
63 return {
64 name: 'MikroTik RouterOS script',
65 aliases: [ 'mikrotik' ],
66 case_insensitive: true,
67 keywords: {
68 $pattern: /:?[\w-]+/,
69 literal: LITERALS,
70 keyword: STATEMENTS + ' :' + STATEMENTS.split(' ').join(' :') + ' :' + GLOBAL_COMMANDS.split(' ').join(' :')
71 },
72 contains: [
73 { // illegal syntax
74 variants: [
75 { // -- comment
76 begin: /\/\*/,
77 end: /\*\//
78 },
79 { // Stan comment
80 begin: /\/\//,
81 end: /$/
82 },
83 { // HTML tags
84 begin: /<\//,
85 end: />/
86 }
87 ],
88 illegal: /./
89 },
90 hljs.COMMENT('^#', '$'),
91 QUOTE_STRING,
92 APOS_STRING,
93 VAR,
94 // attribute=value
95 {
96 // > is to avoid matches with => in other grammars
97 begin: /[\w-]+=([^\s{}[\]()>]+)/,
98 relevance: 0,
99 returnBegin: true,
100 contains: [
101 {
102 className: 'attribute',
103 begin: /[^=]+/
104 },
105 {
106 begin: /=/,
107 endsWithParent: true,
108 relevance: 0,
109 contains: [
110 QUOTE_STRING,
111 APOS_STRING,
112 VAR,
113 {
114 className: 'literal',
115 begin: '\\b(' + LITERALS.split(' ').join('|') + ')\\b'
116 },
117 {
118 // Do not format unclassified values. Needed to exclude highlighting of values as built_in.
119 begin: /("[^"]*"|[^\s{}[\]]+)/ }
120 /*
121 {
122 // IPv4 addresses and subnets
123 className: 'number',
124 variants: [
125 {begin: IPADDR_wBITMASK+'(,'+IPADDR_wBITMASK+')*'}, //192.168.0.0/24,1.2.3.0/24
126 {begin: IPADDR+'-'+IPADDR}, // 192.168.0.1-192.168.0.3
127 {begin: IPADDR+'(,'+IPADDR+')*'}, // 192.168.0.1,192.168.0.34,192.168.24.1,192.168.0.1
128 ]
129 },
130 {
131 // MAC addresses and DHCP Client IDs
132 className: 'number',
133 begin: /\b(1:)?([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]){1,2}\b/,
134 },
135 */
136 ]
137 }
138 ]
139 },
140 {
141 // HEX values
142 className: 'number',
143 begin: /\*[0-9a-fA-F]+/
144 },
145 {
146 begin: '\\b(' + COMMON_COMMANDS.split(' ').join('|') + ')([\\s[(\\]|])',
147 returnBegin: true,
148 contains: [
149 {
150 className: 'built_in', // 'function',
151 begin: /\w+/
152 }
153 ]
154 },
155 {
156 className: 'built_in',
157 variants: [
158 { begin: '(\\.\\./|/|\\s)((' + OBJECTS.split(' ').join('|') + ');?\\s)+' },
159 {
160 begin: /\.\./,
161 relevance: 0
162 }
163 ]
164 }
165 ]
166 };
167 }
168
169 return routeros;
170
171 })();
172
173 hljs.registerLanguage('routeros', hljsGrammar);
174 })();