diff options
Diffstat (limited to 'node_modules/highlight.js/lib/languages/routeros.js')
-rw-r--r-- | node_modules/highlight.js/lib/languages/routeros.js | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/node_modules/highlight.js/lib/languages/routeros.js b/node_modules/highlight.js/lib/languages/routeros.js new file mode 100644 index 000000000..55ad00f49 --- /dev/null +++ b/node_modules/highlight.js/lib/languages/routeros.js @@ -0,0 +1,158 @@ +module.exports = // Colors from RouterOS terminal: +// green - #0E9A00 +// teal - #0C9A9A +// purple - #99069A +// light-brown - #9A9900 + +function(hljs) { + + var STATEMENTS = 'foreach do while for if from to step else on-error and or not in'; + + // Global commands: Every global command should start with ":" token, otherwise it will be treated as variable. + var 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'; + + // Common commands: Following commands available from most sub-menus: + var COMMON_COMMANDS = 'add remove enable disable set get print export edit find run debug error info warning'; + + var LITERALS = 'true false yes no nothing nil null'; + + var 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 firewall 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'; + + // print parameters + // Several parameters are available for print command: + // ToDo: var PARAMETERS_PRINT = 'append as-value brief detail count-only file follow follow-only from interval terse value-list without-paging where info'; + // ToDo: var OPERATORS = '&& and ! not || or in ~ ^ & << >> + - * /'; + // ToDo: var TYPES = 'num number bool boolean str string ip ip6-prefix id time array'; + // ToDo: The following tokens serve as delimiters in the grammar: () [] {} : ; $ / + + var VAR_PREFIX = 'global local set for foreach'; + + var VAR = { + className: 'variable', + variants: [ + {begin: /\$[\w\d#@][\w\d_]*/}, + {begin: /\$\{(.*?)}/} + ] + }; + + var QUOTE_STRING = { + className: 'string', + begin: /"/, end: /"/, + contains: [ + hljs.BACKSLASH_ESCAPE, + VAR, + { + className: 'variable', + begin: /\$\(/, end: /\)/, + contains: [hljs.BACKSLASH_ESCAPE] + } + ] + }; + + var APOS_STRING = { + className: 'string', + begin: /'/, end: /'/ + }; + + var IPADDR = '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b'; + var IPADDR_wBITMASK = IPADDR+'/(3[0-2]|[1-2][0-9]|\\d)'; + ////////////////////////////////////////////////////////////////////// + return { + aliases: ['routeros', 'mikrotik'], + case_insensitive: true, + lexemes: /:?[\w-]+/, + keywords: { + literal: LITERALS, + keyword: STATEMENTS + ' :' + STATEMENTS.split(' ').join(' :') + ' :' + GLOBAL_COMMANDS.split(' ').join(' :'), + }, + contains: [ + { // недопустимые конструкции + variants: [ + { begin: /^@/, end: /$/, }, // dns + { begin: /\/\*/, end: /\*\//, }, // -- comment + { begin: /%%/, end: /$/, }, // -- comment + { begin: /^'/, end: /$/, }, // Monkey one line comment + { begin: /^\s*\/[\w-]+=/, end: /$/, }, // jboss-cli + { begin: /\/\//, end: /$/, }, // Stan comment + { begin: /^\[\</, end: /\>\]$/, }, // F# class declaration? + { begin: /<\//, end: />/, }, // HTML tags + { begin: /^facet /, end: /\}/, }, // roboconf - лютый костыль ))) + { begin: '^1\\.\\.(\\d+)$', end: /$/, }, // tap + ], + illegal: /./, + }, + hljs.COMMENT('^#', '$'), + QUOTE_STRING, + APOS_STRING, + VAR, + { // attribute=value + begin: /[\w-]+\=([^\s\{\}\[\]\(\)]+)/, + relevance: 0, + returnBegin: true, + contains: [ + { + className: 'attribute', + begin: /[^=]+/ + }, + { + begin: /=/, + endsWithParent: true, + relevance: 0, + contains: [ + QUOTE_STRING, + APOS_STRING, + VAR, + { + className: 'literal', + begin: '\\b(' + LITERALS.split(' ').join('|') + ')\\b', + }, + /*{ + // IPv4 addresses and subnets + className: 'number', + variants: [ + {begin: IPADDR_wBITMASK+'(,'+IPADDR_wBITMASK+')*'}, //192.168.0.0/24,1.2.3.0/24 + {begin: IPADDR+'-'+IPADDR}, // 192.168.0.1-192.168.0.3 + {begin: IPADDR+'(,'+IPADDR+')*'}, // 192.168.0.1,192.168.0.34,192.168.24.1,192.168.0.1 + ] + }, // */ + /*{ + // MAC addresses and DHCP Client IDs + className: 'number', + begin: /\b(1:)?([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]){1,2}\b/, + }, //*/ + { + // Не форматировать не классифицированные значения. Необходимо для исключения подсветки значений как built_in. + // className: 'number', + begin: /("[^"]*"|[^\s\{\}\[\]]+)/, + }, //*/ + ] + } //*/ + ] + },//*/ + { + // HEX values + className: 'number', + begin: /\*[0-9a-fA-F]+/, + }, //*/ + + { + begin: '\\b(' + COMMON_COMMANDS.split(' ').join('|') + ')([\\s\[\(]|\])', + returnBegin: true, + contains: [ + { + className: 'builtin-name', //'function', + begin: /\w+/, + }, + ], + }, + + { + className: 'built_in', + variants: [ + {begin: '(\\.\\./|/|\\s)((' + OBJECTS.split(' ').join('|') + ');?\\s)+',relevance: 10,}, + {begin: /\.\./,}, + ], + },//*/ + ] + }; +};
\ No newline at end of file |