123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /*
- Language: Microtik RouterOS script
- Author: Ivan Dementev <ivan_div@mail.ru>
- Description: Scripting host provides a way to automate some router maintenance tasks by means of executing user-defined scripts bounded to some event occurrence
- Website: https://wiki.mikrotik.com/wiki/Manual:Scripting
- */
- // Colors from RouterOS terminal:
- // green - #0E9A00
- // teal - #0C9A9A
- // purple - #99069A
- // light-brown - #9A9900
- function routeros(hljs) {
- const 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.
- 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';
- // Common commands: Following commands available from most sub-menus:
- const COMMON_COMMANDS = 'add remove enable disable set get print export edit find run debug error info warning';
- const LITERALS = 'true false yes no nothing nil null';
- 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';
- const VAR = {
- className: 'variable',
- variants: [
- {
- begin: /\$[\w\d#@][\w\d_]*/
- },
- {
- begin: /\$\{(.*?)\}/
- }
- ]
- };
- const QUOTE_STRING = {
- className: 'string',
- begin: /"/,
- end: /"/,
- contains: [
- hljs.BACKSLASH_ESCAPE,
- VAR,
- {
- className: 'variable',
- begin: /\$\(/,
- end: /\)/,
- contains: [ hljs.BACKSLASH_ESCAPE ]
- }
- ]
- };
- const APOS_STRING = {
- className: 'string',
- begin: /'/,
- end: /'/
- };
- return {
- name: 'Microtik RouterOS script',
- aliases: [
- 'mikrotik'
- ],
- case_insensitive: true,
- keywords: {
- $pattern: /:?[\w-]+/,
- literal: LITERALS,
- keyword: STATEMENTS + ' :' + STATEMENTS.split(' ').join(' :') + ' :' + GLOBAL_COMMANDS.split(' ').join(' :')
- },
- contains: [
- { // illegal syntax
- variants: [
- { // -- comment
- begin: /\/\*/,
- end: /\*\//
- },
- { // Stan comment
- begin: /\/\//,
- end: /$/
- },
- { // HTML tags
- begin: /<\//,
- end: />/
- }
- ],
- illegal: /./
- },
- hljs.COMMENT('^#', '$'),
- QUOTE_STRING,
- APOS_STRING,
- VAR,
- // attribute=value
- {
- // > is to avoid matches with => in other grammars
- 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'
- },
- {
- // Do not format unclassified values. Needed to exclude highlighting of values as built_in.
- begin: /("[^"]*"|[^\s{}[\]]+)/
- }
- /*
- {
- // 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/,
- },
- */
- ]
- }
- ]
- },
- {
- // 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)+'
- },
- {
- begin: /\.\./,
- relevance: 0
- }
- ]
- }
- ]
- };
- }
- module.exports = routeros;
|