diff --git a/src/languages/parser3.js b/src/languages/parser3.js index 18ee3634ae..278c5f0b08 100644 --- a/src/languages/parser3.js +++ b/src/languages/parser3.js @@ -7,16 +7,17 @@ Category: template */ export default function(hljs) { - var CURLY_SUBCOMMENT = hljs.COMMENT( + const CURLY_SUBCOMMENT = hljs.COMMENT( /\{/, /\}/, { - contains: ['self'] + contains: [ 'self' ] } ); return { name: 'Parser3', - subLanguage: 'xml', relevance: 0, + subLanguage: 'xml', + relevance: 0, contains: [ hljs.COMMENT('^#', '$'), hljs.COMMENT( @@ -24,9 +25,7 @@ export default function(hljs) { /\}/, { relevance: 10, - contains: [ - CURLY_SUBCOMMENT - ] + contains: [ CURLY_SUBCOMMENT ] } ), { diff --git a/src/languages/pf.js b/src/languages/pf.js index 6c16cac0b0..301050fbd4 100644 --- a/src/languages/pf.js +++ b/src/languages/pf.js @@ -7,22 +7,24 @@ Category: config */ export default function(hljs) { - var MACRO = { + const MACRO = { className: 'variable', begin: /\$[\w\d#@][\w\d_]*/ }; - var TABLE = { + const TABLE = { className: 'variable', - begin: /<(?!\/)/, end: />/ + begin: /<(?!\/)/, + end: />/ }; - var QUOTE_STRING = { + const QUOTE_STRING = { className: 'string', - begin: /"/, end: /"/ + begin: /"/, + end: /"/ }; return { name: 'Packet Filter config', - aliases: ['pf.conf'], + aliases: [ 'pf.conf' ], keywords: { $pattern: /[a-z0-9_<>-]+/, built_in: /* block match pass are "actions" in pf.conf(5), the rest are diff --git a/src/languages/pgsql.js b/src/languages/pgsql.js index 78a0744924..9858da526f 100644 --- a/src/languages/pgsql.js +++ b/src/languages/pgsql.js @@ -17,12 +17,12 @@ Description: */ export default function(hljs) { - var COMMENT_MODE = hljs.COMMENT('--', '$'); - var UNQUOTED_IDENT = '[a-zA-Z_][a-zA-Z_0-9$]*'; - var DOLLAR_STRING = '\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$'; - var LABEL = '<<\\s*' + UNQUOTED_IDENT + '\\s*>>'; + const COMMENT_MODE = hljs.COMMENT('--', '$'); + const UNQUOTED_IDENT = '[a-zA-Z_][a-zA-Z_0-9$]*'; + const DOLLAR_STRING = '\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$'; + const LABEL = '<<\\s*' + UNQUOTED_IDENT + '\\s*>>'; - var SQL_KW = + const SQL_KW = // https://www.postgresql.org/docs/11/static/sql-keywords-appendix.html // https://www.postgresql.org/docs/11/static/sql-commands.html // SQL commands (starting words) @@ -68,16 +68,16 @@ export default function(hljs) { // actually literals, but look better this way (due to IS TRUE, IS FALSE, ISNULL etc) 'TRUE FALSE NAN INFINITY '; - var ROLE_ATTRS = // only those not in keywrods already + const ROLE_ATTRS = // only those not in keywrods already 'SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT ' + 'LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS '; - var PLPGSQL_KW = + const PLPGSQL_KW = 'ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS ' + 'STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT ' + 'OPEN '; - var TYPES = + const TYPES = // https://www.postgresql.org/docs/11/static/datatype.html 'BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR ' + 'CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 ' + @@ -93,20 +93,20 @@ export default function(hljs) { // OID-types 'OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 ' + 'REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ';// + - // some types from standard extensions - 'HSTORE|10 LO LTREE|10 '; + // some types from standard extensions + 'HSTORE|10 LO LTREE|10 '; - var TYPES_RE = + const TYPES_RE = TYPES.trim() - .split(' ') - .map( function(val) { return val.split('|')[0]; } ) - .join('|'); + .split(' ') + .map(function(val) { return val.split('|')[0]; }) + .join('|'); - var SQL_BI = + const SQL_BI = 'CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP ' + 'CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC '; - var PLPGSQL_BI = + const PLPGSQL_BI = 'FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 ' + 'TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ' + // get diagnostics @@ -114,7 +114,7 @@ export default function(hljs) { 'PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 ' + 'PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 '; - var PLPGSQL_EXCEPTIONS = + const PLPGSQL_EXCEPTIONS = // exceptions https://www.postgresql.org/docs/current/static/errcodes-appendix.html 'SQLSTATE SQLERRM|10 ' + 'SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING ' + @@ -192,7 +192,7 @@ export default function(hljs) { 'RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED ' + 'INDEX_CORRUPTED '; - var FUNCTIONS = + const FUNCTIONS = // https://www.postgresql.org/docs/11/static/functions-aggregate.html 'ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG ' + 'JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG ' + @@ -283,224 +283,348 @@ export default function(hljs) { // 'GROUPING CAST '; - var FUNCTIONS_RE = + const FUNCTIONS_RE = FUNCTIONS.trim() - .split(' ') - .map( function(val) { return val.split('|')[0]; } ) - .join('|'); + .split(' ') + .map(function(val) { return val.split('|')[0]; }) + .join('|'); - return { - name: 'PostgreSQL', - aliases: ['postgres','postgresql'], - case_insensitive: true, - keywords: { - keyword: + return { + name: 'PostgreSQL', + aliases: [ + 'postgres', + 'postgresql' + ], + case_insensitive: true, + keywords: { + keyword: SQL_KW + PLPGSQL_KW + ROLE_ATTRS, - built_in: - SQL_BI + PLPGSQL_BI + PLPGSQL_EXCEPTIONS, - }, - // Forbid some cunstructs from other languages to improve autodetect. In fact - // "[a-z]:" is legal (as part of array slice), but improbabal. - illegal: /:==|\W\s*\(\*|(^|\s)\$[a-z]|\{\{|[a-z]:\s*$|\.\.\.|TO:|DO:/, - contains: [ - // special handling of some words, which are reserved only in some contexts - { - className: 'keyword', - variants: [ - { begin: /\bTEXT\s*SEARCH\b/ }, - { begin: /\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/ }, - { begin: /\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/ }, - { begin: /\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/ }, - { begin: /\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/ }, - { begin: /\bNULLS\s+(FIRST|LAST)\b/ }, - { begin: /\bEVENT\s+TRIGGER\b/ }, - { begin: /\b(MAPPING|OR)\s+REPLACE\b/ }, - { begin: /\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/ }, - { begin: /\b(SHARE|EXCLUSIVE)\s+MODE\b/ }, - { begin: /\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/ }, - { begin: /\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/ }, - { begin: /\bPRESERVE\s+ROWS\b/ }, - { begin: /\bDISCARD\s+PLANS\b/ }, - { begin: /\bREFERENCING\s+(OLD|NEW)\b/ }, - { begin: /\bSKIP\s+LOCKED\b/ }, - { begin: /\bGROUPING\s+SETS\b/ }, - { begin: /\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/ }, - { begin: /\b(WITH|WITHOUT)\s+HOLD\b/ }, - { begin: /\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/ }, - { begin: /\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/ }, - { begin: /\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/ }, - { begin: /\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/ }, - { begin: /\bIS\s+(NOT\s+)?UNKNOWN\b/ }, - { begin: /\bSECURITY\s+LABEL\b/ }, - { begin: /\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/ }, - { begin: /\bWITH\s+(NO\s+)?DATA\b/ }, - { begin: /\b(FOREIGN|SET)\s+DATA\b/ }, - { begin: /\bSET\s+(CATALOG|CONSTRAINTS)\b/ }, - { begin: /\b(WITH|FOR)\s+ORDINALITY\b/ }, - { begin: /\bIS\s+(NOT\s+)?DOCUMENT\b/ }, - { begin: /\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/ }, - { begin: /\b(STRIP|PRESERVE)\s+WHITESPACE\b/ }, - { begin: /\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/ }, - { begin: /\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/ }, - { begin: /\bAT\s+TIME\s+ZONE\b/ }, - { begin: /\bGRANTED\s+BY\b/ }, - { begin: /\bRETURN\s+(QUERY|NEXT)\b/ }, - { begin: /\b(ATTACH|DETACH)\s+PARTITION\b/ }, - { begin: /\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/ }, - { begin: /\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/ }, - { begin: /\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/ } - ] - }, - // functions named as keywords, followed by '(' - { - begin: /\b(FORMAT|FAMILY|VERSION)\s*\(/, - //keywords: { built_in: 'FORMAT FAMILY VERSION' } - }, - // INCLUDE ( ... ) in index_parameters in CREATE TABLE - { - begin: /\bINCLUDE\s*\(/, - keywords: 'INCLUDE' - }, - // not highlight RANGE if not in frame_clause (not 100% correct, but seems satisfactory) - { - begin: /\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/ - }, - // disable highlighting in commands CREATE AGGREGATE/COLLATION/DATABASE/OPERTOR/TEXT SEARCH .../TYPE - // and in PL/pgSQL RAISE ... USING - { - begin: /\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/ - }, - // PG_smth; HAS_some_PRIVILEGE - { - //className: 'built_in', - begin: /\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/, - relevance: 10 + built_in: + SQL_BI + PLPGSQL_BI + PLPGSQL_EXCEPTIONS + }, + // Forbid some cunstructs from other languages to improve autodetect. In fact + // "[a-z]:" is legal (as part of array slice), but improbabal. + illegal: /:==|\W\s*\(\*|(^|\s)\$[a-z]|\{\{|[a-z]:\s*$|\.\.\.|TO:|DO:/, + contains: [ + // special handling of some words, which are reserved only in some contexts + { + className: 'keyword', + variants: [ + { + begin: /\bTEXT\s*SEARCH\b/ }, - // extract { - begin: /\bEXTRACT\s*\(/, - end: /\bFROM\b/, - returnEnd: true, - keywords: { - //built_in: 'EXTRACT', - type: 'CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS ' + - 'MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR ' + - 'TIMEZONE_MINUTE WEEK YEAR' - } + begin: /\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/ }, - // xmlelement, xmlpi - special NAME { - begin: /\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/, - keywords: { - //built_in: 'XMLELEMENT XMLPI', - keyword: 'NAME' - } + begin: /\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/ }, - // xmlparse, xmlserialize { - begin: /\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/, - keywords: { - //built_in: 'XMLPARSE XMLSERIALIZE', - keyword: 'DOCUMENT CONTENT' - } + begin: /\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/ }, - // Sequences. We actually skip everything between CACHE|INCREMENT|MAXVALUE|MINVALUE and - // nearest following numeric constant. Without with trick we find a lot of "keywords" - // in 'avrasm' autodetection test... { - beginKeywords: 'CACHE INCREMENT MAXVALUE MINVALUE', - end: hljs.C_NUMBER_RE, - returnEnd: true, - keywords: 'BY CACHE INCREMENT MAXVALUE MINVALUE' + begin: /\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/ }, - // WITH|WITHOUT TIME ZONE as part of datatype { - className: 'type', - begin: /\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/ + begin: /\bNULLS\s+(FIRST|LAST)\b/ }, - // INTERVAL optional fields { - className: 'type', - begin: /\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/ + begin: /\bEVENT\s+TRIGGER\b/ }, - // Pseudo-types which allowed only as return type { - begin: /\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/, - keywords: { - keyword: 'RETURNS', - type: 'LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER' - } + begin: /\b(MAPPING|OR)\s+REPLACE\b/ }, - // Known functions - only when followed by '(' { - begin: '\\b(' + FUNCTIONS_RE + ')\\s*\\(' - //keywords: { built_in: FUNCTIONS } + begin: /\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/ }, - // Types { - begin: '\\.(' + TYPES_RE + ')\\b' // prevent highlight as type, say, 'oid' in 'pgclass.oid' + begin: /\b(SHARE|EXCLUSIVE)\s+MODE\b/ }, { - begin: '\\b(' + TYPES_RE + ')\\s+PATH\\b', // in XMLTABLE - keywords: { - keyword: 'PATH', // hopefully no one would use PATH type in XMLTABLE... - type: TYPES.replace('PATH ','') - } + begin: /\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/ }, { - className: 'type', - begin: '\\b(' + TYPES_RE + ')\\b' + begin: /\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/ }, - // Strings, see https://www.postgresql.org/docs/11/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS { - className: 'string', - begin: '\'', end: '\'', - contains: [{begin: '\'\''}] + begin: /\bPRESERVE\s+ROWS\b/ }, { - className: 'string', - begin: '(e|E|u&|U&)\'', end: '\'', - contains: [{begin: '\\\\.'}], - relevance: 10 + begin: /\bDISCARD\s+PLANS\b/ + }, + { + begin: /\bREFERENCING\s+(OLD|NEW)\b/ + }, + { + begin: /\bSKIP\s+LOCKED\b/ + }, + { + begin: /\bGROUPING\s+SETS\b/ + }, + { + begin: /\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/ + }, + { + begin: /\b(WITH|WITHOUT)\s+HOLD\b/ + }, + { + begin: /\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/ + }, + { + begin: /\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/ + }, + { + begin: /\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/ + }, + { + begin: /\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/ + }, + { + begin: /\bIS\s+(NOT\s+)?UNKNOWN\b/ + }, + { + begin: /\bSECURITY\s+LABEL\b/ + }, + { + begin: /\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/ + }, + { + begin: /\bWITH\s+(NO\s+)?DATA\b/ + }, + { + begin: /\b(FOREIGN|SET)\s+DATA\b/ + }, + { + begin: /\bSET\s+(CATALOG|CONSTRAINTS)\b/ + }, + { + begin: /\b(WITH|FOR)\s+ORDINALITY\b/ + }, + { + begin: /\bIS\s+(NOT\s+)?DOCUMENT\b/ + }, + { + begin: /\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/ + }, + { + begin: /\b(STRIP|PRESERVE)\s+WHITESPACE\b/ + }, + { + begin: /\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/ + }, + { + begin: /\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/ + }, + { + begin: /\bAT\s+TIME\s+ZONE\b/ + }, + { + begin: /\bGRANTED\s+BY\b/ + }, + { + begin: /\bRETURN\s+(QUERY|NEXT)\b/ }, - hljs.END_SAME_AS_BEGIN({ - begin: DOLLAR_STRING, - end: DOLLAR_STRING, - contains: [ - { - // actually we want them all except SQL; listed are those with known implementations - // and XML + JSON just in case - subLanguage: ['pgsql','perl','python','tcl','r','lua','java','php','ruby','bash','scheme','xml','json'], - endsWithParent: true - } - ] - }), - // identifiers in quotes - { - begin: '"', end: '"', - contains: [{begin: '""'}] - }, - // numbers - hljs.C_NUMBER_MODE, - // comments - hljs.C_BLOCK_COMMENT_MODE, - COMMENT_MODE, - // PL/pgSQL staff - // %ROWTYPE, %TYPE, $n - { - className: 'meta', - variants: [ - {begin: '%(ROW)?TYPE', relevance: 10}, // %TYPE, %ROWTYPE - {begin: '\\$\\d+'}, // $n - {begin: '^#\\w', end: '$'} // #compiler option - ] - }, - // <> - { - className: 'symbol', - begin: LABEL, + { + begin: /\b(ATTACH|DETACH)\s+PARTITION\b/ + }, + { + begin: /\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/ + }, + { + begin: /\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/ + }, + { + begin: /\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/ + } + ] + }, + // functions named as keywords, followed by '(' + { + begin: /\b(FORMAT|FAMILY|VERSION)\s*\(/ + // keywords: { built_in: 'FORMAT FAMILY VERSION' } + }, + // INCLUDE ( ... ) in index_parameters in CREATE TABLE + { + begin: /\bINCLUDE\s*\(/, + keywords: 'INCLUDE' + }, + // not highlight RANGE if not in frame_clause (not 100% correct, but seems satisfactory) + { + begin: /\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/ + }, + // disable highlighting in commands CREATE AGGREGATE/COLLATION/DATABASE/OPERTOR/TEXT SEARCH .../TYPE + // and in PL/pgSQL RAISE ... USING + { + begin: /\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/ + }, + // PG_smth; HAS_some_PRIVILEGE + { + // className: 'built_in', + begin: /\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/, + relevance: 10 + }, + // extract + { + begin: /\bEXTRACT\s*\(/, + end: /\bFROM\b/, + returnEnd: true, + keywords: { + // built_in: 'EXTRACT', + type: 'CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS ' + + 'MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR ' + + 'TIMEZONE_MINUTE WEEK YEAR' + } + }, + // xmlelement, xmlpi - special NAME + { + begin: /\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/, + keywords: { + // built_in: 'XMLELEMENT XMLPI', + keyword: 'NAME' + } + }, + // xmlparse, xmlserialize + { + begin: /\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/, + keywords: { + // built_in: 'XMLPARSE XMLSERIALIZE', + keyword: 'DOCUMENT CONTENT' + } + }, + // Sequences. We actually skip everything between CACHE|INCREMENT|MAXVALUE|MINVALUE and + // nearest following numeric constant. Without with trick we find a lot of "keywords" + // in 'avrasm' autodetection test... + { + beginKeywords: 'CACHE INCREMENT MAXVALUE MINVALUE', + end: hljs.C_NUMBER_RE, + returnEnd: true, + keywords: 'BY CACHE INCREMENT MAXVALUE MINVALUE' + }, + // WITH|WITHOUT TIME ZONE as part of datatype + { + className: 'type', + begin: /\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/ + }, + // INTERVAL optional fields + { + className: 'type', + begin: /\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/ + }, + // Pseudo-types which allowed only as return type + { + begin: /\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/, + keywords: { + keyword: 'RETURNS', + type: 'LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER' + } + }, + // Known functions - only when followed by '(' + { + begin: '\\b(' + FUNCTIONS_RE + ')\\s*\\(' + // keywords: { built_in: FUNCTIONS } + }, + // Types + { + begin: '\\.(' + TYPES_RE + ')\\b' // prevent highlight as type, say, 'oid' in 'pgclass.oid' + }, + { + begin: '\\b(' + TYPES_RE + ')\\s+PATH\\b', // in XMLTABLE + keywords: { + keyword: 'PATH', // hopefully no one would use PATH type in XMLTABLE... + type: TYPES.replace('PATH ', '') + } + }, + { + className: 'type', + begin: '\\b(' + TYPES_RE + ')\\b' + }, + // Strings, see https://www.postgresql.org/docs/11/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS + { + className: 'string', + begin: '\'', + end: '\'', + contains: [ + { + begin: '\'\'' + } + ] + }, + { + className: 'string', + begin: '(e|E|u&|U&)\'', + end: '\'', + contains: [ + { + begin: '\\\\.' + } + ], + relevance: 10 + }, + hljs.END_SAME_AS_BEGIN({ + begin: DOLLAR_STRING, + end: DOLLAR_STRING, + contains: [ + { + // actually we want them all except SQL; listed are those with known implementations + // and XML + JSON just in case + subLanguage: [ + 'pgsql', + 'perl', + 'python', + 'tcl', + 'r', + 'lua', + 'java', + 'php', + 'ruby', + 'bash', + 'scheme', + 'xml', + 'json' + ], + endsWithParent: true + } + ] + }), + // identifiers in quotes + { + begin: '"', + end: '"', + contains: [ + { + begin: '""' + } + ] + }, + // numbers + hljs.C_NUMBER_MODE, + // comments + hljs.C_BLOCK_COMMENT_MODE, + COMMENT_MODE, + // PL/pgSQL staff + // %ROWTYPE, %TYPE, $n + { + className: 'meta', + variants: [ + { // %TYPE, %ROWTYPE + begin: '%(ROW)?TYPE', relevance: 10 + }, + { // $n + begin: '\\$\\d+' + }, + { // #compiler option + begin: '^#\\w', + end: '$' } ] + }, + // <> + { + className: 'symbol', + begin: LABEL, + relevance: 10 + } + ] }; } diff --git a/src/languages/php-template.js b/src/languages/php-template.js index dfebbf6be5..b26e75f835 100644 --- a/src/languages/php-template.js +++ b/src/languages/php-template.js @@ -18,11 +18,33 @@ export default function(hljs) { contains: [ // We don't want the php closing tag ?> to close the PHP block when // inside any of the following blocks: - {begin: '/\\*', end: '\\*/', skip: true}, - {begin: 'b"', end: '"', skip: true}, - {begin: 'b\'', end: '\'', skip: true}, - hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null, className: null, contains: null, skip: true}), - hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null, className: null, contains: null, skip: true}) + { + begin: '/\\*', + end: '\\*/', + skip: true + }, + { + begin: 'b"', + end: '"', + skip: true + }, + { + begin: 'b\'', + end: '\'', + skip: true + }, + hljs.inherit(hljs.APOS_STRING_MODE, { + illegal: null, + className: null, + contains: null, + skip: true + }), + hljs.inherit(hljs.QUOTE_STRING_MODE, { + illegal: null, + className: null, + contains: null, + skip: true + }) ] } ] diff --git a/src/languages/plaintext.js b/src/languages/plaintext.js index ab7a700efb..f4f5985173 100644 --- a/src/languages/plaintext.js +++ b/src/languages/plaintext.js @@ -6,9 +6,12 @@ Category: common */ export default function(hljs) { - return { - name: 'Plain text', - aliases: ['text', 'txt'], - disableAutodetect: true - }; + return { + name: 'Plain text', + aliases: [ + 'text', + 'txt' + ], + disableAutodetect: true + }; } diff --git a/src/languages/pony.js b/src/languages/pony.js index 8f13eb87a9..87a6ad375c 100644 --- a/src/languages/pony.js +++ b/src/languages/pony.js @@ -7,7 +7,7 @@ Website: https://www.ponylang.io */ export default function(hljs) { - var KEYWORDS = { + const KEYWORDS = { keyword: 'actor addressof and as be break class compile_error compile_intrinsic ' + 'consume continue delegate digestof do else elseif embed end error ' + @@ -20,36 +20,40 @@ export default function(hljs) { 'this false true' }; - var TRIPLE_QUOTE_STRING_MODE = { + const TRIPLE_QUOTE_STRING_MODE = { className: 'string', - begin: '"""', end: '"""', + begin: '"""', + end: '"""', relevance: 10 }; - var QUOTE_STRING_MODE = { + const QUOTE_STRING_MODE = { className: 'string', - begin: '"', end: '"', - contains: [hljs.BACKSLASH_ESCAPE] + begin: '"', + end: '"', + contains: [ hljs.BACKSLASH_ESCAPE ] }; - var SINGLE_QUOTE_CHAR_MODE = { + const SINGLE_QUOTE_CHAR_MODE = { className: 'string', - begin: '\'', end: '\'', - contains: [hljs.BACKSLASH_ESCAPE], + begin: '\'', + end: '\'', + contains: [ hljs.BACKSLASH_ESCAPE ], relevance: 0 }; - var TYPE_NAME = { + const TYPE_NAME = { className: 'type', begin: '\\b_?[A-Z][\\w]*', relevance: 0 }; - var PRIMED_NAME = { - begin: hljs.IDENT_RE + '\'', relevance: 0 + const PRIMED_NAME = { + begin: hljs.IDENT_RE + '\'', + relevance: 0 }; - var NUMBER_MODE = { + const NUMBER_MODE = { className: 'number', begin: '(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)', relevance: 0 diff --git a/src/languages/powershell.js b/src/languages/powershell.js index 5e80f4714d..3d10a7404f 100644 --- a/src/languages/powershell.js +++ b/src/languages/powershell.js @@ -7,13 +7,25 @@ Website: https://docs.microsoft.com/en-us/powershell/ */ export default function(hljs) { - - var TYPES = - ["string", "char", "byte", "int", "long", "bool", "decimal", "single", - "double", "DateTime", "xml", "array", "hashtable", "void"]; + const TYPES = [ + "string", + "char", + "byte", + "int", + "long", + "bool", + "decimal", + "single", + "double", + "DateTime", + "xml", + "array", + "hashtable", + "void" + ]; // https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx - var VALID_VERBS = + const VALID_VERBS = 'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|' + 'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|' + 'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|' + @@ -26,7 +38,7 @@ export default function(hljs) { 'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|' + 'Unprotect|Use|ForEach|Sort|Tee|Where'; - var COMPARISON_OPERATORS = + const COMPARISON_OPERATORS = '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|' + '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|' + '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|' + @@ -35,66 +47,91 @@ export default function(hljs) { '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|' + '-split|-wildcard|-xor'; - var KEYWORDS = { + const KEYWORDS = { $pattern: /-?[A-z\.\-]+\b/, - keyword: 'if else foreach return do while until elseif begin for trap data dynamicparam ' + - 'end break throw param continue finally in switch exit filter try process catch ' + - 'hidden static parameter', + keyword: + 'if else foreach return do while until elseif begin for trap data dynamicparam ' + + 'end break throw param continue finally in switch exit filter try process catch ' + + 'hidden static parameter', // "echo" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts - built_in: 'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp ' + - 'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx ' + - 'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group ' + - 'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi ' + - 'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh ' + - 'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp ' + - 'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp ' + - 'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write' + built_in: + 'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp ' + + 'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx ' + + 'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group ' + + 'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi ' + + 'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh ' + + 'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp ' + + 'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp ' + + 'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write' // TODO: 'validate[A-Z]+' can't work in keywords }; - var TITLE_NAME_RE = /\w[\w\d]*((-)[\w\d]+)*/; + const TITLE_NAME_RE = /\w[\w\d]*((-)[\w\d]+)*/; - var BACKTICK_ESCAPE = { + const BACKTICK_ESCAPE = { begin: '`[\\s\\S]', relevance: 0 }; - var VAR = { + const VAR = { className: 'variable', variants: [ - { begin: /\$\B/ }, - { className: 'keyword', begin: /\$this/ }, - { begin: /\$[\w\d][\w\d_:]*/ } + { + begin: /\$\B/ + }, + { + className: 'keyword', + begin: /\$this/ + }, + { + begin: /\$[\w\d][\w\d_:]*/ + } ] }; - var LITERAL = { + const LITERAL = { className: 'literal', begin: /\$(null|true|false)\b/ }; - var QUOTE_STRING = { + const QUOTE_STRING = { className: "string", - variants: [{ begin: /"/, end: /"/ }, { begin: /@"/, end: /^"@/ }], + variants: [ + { + begin: /"/, + end: /"/ + }, + { + begin: /@"/, + end: /^"@/ + } + ], contains: [ BACKTICK_ESCAPE, VAR, { className: 'variable', - begin: /\$[A-z]/, end: /[^A-z]/ + begin: /\$[A-z]/, + end: /[^A-z]/ } ] }; - var APOS_STRING = { + const APOS_STRING = { className: 'string', variants: [ - { begin: /'/, end: /'/ }, - { begin: /@'/, end: /^'@/ } + { + begin: /'/, + end: /'/ + }, + { + begin: /@'/, + end: /^'@/ + } ] }; - var PS_HELPTAGS = { + const PS_HELPTAGS = { className: "doctag", variants: [ /* no paramater help tags */ @@ -102,119 +139,171 @@ export default function(hljs) { begin: /\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ }, /* one parameter help tags */ - { begin: /\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/ } + { + begin: /\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/ + } ] }; - var PS_COMMENT = hljs.inherit( + const PS_COMMENT = hljs.inherit( hljs.COMMENT(null, null), { variants: [ /* single-line comment */ - { begin: /#/, end: /$/ }, + { + begin: /#/, + end: /$/ + }, /* multi-line comment */ - { begin: /<#/, end: /#>/ } + { + begin: /<#/, + end: /#>/ + } ], - contains: [PS_HELPTAGS] + contains: [ PS_HELPTAGS ] } ); - var CMDLETS = { + const CMDLETS = { className: 'built_in', variants: [ - { begin: '('.concat(VALID_VERBS, ')+(-)[\\w\\d]+') } + { + begin: '('.concat(VALID_VERBS, ')+(-)[\\w\\d]+') + } ] }; - var PS_CLASS = { + const PS_CLASS = { className: 'class', - beginKeywords: 'class enum', end: /\s*[{]/, excludeEnd: true, + beginKeywords: 'class enum', + end: /\s*[{]/, + excludeEnd: true, relevance: 0, - contains: [hljs.TITLE_MODE] + contains: [ hljs.TITLE_MODE ] }; - var PS_FUNCTION = { + const PS_FUNCTION = { className: 'function', - begin: /function\s+/, end: /\s*\{|$/, + begin: /function\s+/, + end: /\s*\{|$/, excludeEnd: true, returnBegin: true, relevance: 0, contains: [ - { begin: "function", relevance: 0, className: "keyword" }, - { className: "title", - begin: TITLE_NAME_RE, relevance:0 }, - { begin: /\(/, end: /\)/, className: "params", + { + begin: "function", + relevance: 0, + className: "keyword" + }, + { + className: "title", + begin: TITLE_NAME_RE, + relevance: 0 + }, + { + begin: /\(/, + end: /\)/, + className: "params", relevance: 0, - contains: [VAR] } + contains: [ VAR ] + } // CMDLETS ] }; // Using statment, plus type, plus assembly name. - var PS_USING = { - begin: /using\s/, end: /$/, + const PS_USING = { + begin: /using\s/, + end: /$/, returnBegin: true, contains: [ QUOTE_STRING, APOS_STRING, - { className: 'keyword', begin: /(using|assembly|command|module|namespace|type)/ } + { + className: 'keyword', + begin: /(using|assembly|command|module|namespace|type)/ + } ] }; // Comperison operators & function named parameters. - var PS_ARGUMENTS = { + const PS_ARGUMENTS = { variants: [ // PS literals are pretty verbose so it's a good idea to accent them a bit. - { className: 'operator', begin: '('.concat(COMPARISON_OPERATORS, ')\\b') }, - { className: 'literal', begin: /(-)[\w\d]+/, relevance:0 } + { + className: 'operator', + begin: '('.concat(COMPARISON_OPERATORS, ')\\b') + }, + { + className: 'literal', + begin: /(-)[\w\d]+/, + relevance: 0 + } ] }; - var STATIC_MEMBER = { + const STATIC_MEMBER = { className: 'selector-tag', - begin: /::\w+\b/, end: /$/, + begin: /::\w+\b/, + end: /$/, returnBegin: true, contains: [ - { className: 'attribute', begin: /\w+/, endsParent: true } + { + className: 'attribute', + begin: /\w+/, + endsParent: true + } ] }; - var HASH_SIGNS = { + const HASH_SIGNS = { className: 'selector-tag', begin: /@\B/, relevance: 0 }; - var PS_NEW_OBJECT_TYPE = { + const PS_NEW_OBJECT_TYPE = { className: 'built_in', - begin: /New-Object\s+\w/, end: /$/, + begin: /New-Object\s+\w/, + end: /$/, returnBegin: true, contains: [ - { begin: /New-Object\s+/, relevance: 0 }, - { className: 'meta', begin: /([\w\.])+/, endsParent: true } + { + begin: /New-Object\s+/, + relevance: 0 + }, + { + className: 'meta', + begin: /([\w\.])+/, + endsParent: true + } ] }; // It's a very general rule so I'll narrow it a bit with some strict boundaries // to avoid any possible false-positive collisions! - var PS_METHODS = { + const PS_METHODS = { className: 'function', - begin: /\[.*\]\s*[\w]+[ ]??\(/, end: /$/, + begin: /\[.*\]\s*[\w]+[ ]??\(/, + end: /$/, returnBegin: true, relevance: 0, contains: [ { - className: 'keyword', begin: '('.concat( - KEYWORDS.keyword.toString().replace(/\s/g, '|' - ), ')\\b'), + className: 'keyword', + begin: '('.concat( + KEYWORDS.keyword.toString().replace(/\s/g, '|' + ), ')\\b'), endsParent: true, relevance: 0 }, - hljs.inherit(hljs.TITLE_MODE, { endsParent: true }) + hljs.inherit(hljs.TITLE_MODE, { + endsParent: true + }) ] }; - var GENTLEMANS_SET = [ + const GENTLEMANS_SET = [ // STATIC_MEMBER, PS_METHODS, PS_COMMENT, @@ -229,24 +318,36 @@ export default function(hljs) { HASH_SIGNS ]; - var PS_TYPE = { - begin: /\[/, end: /\]/, + const PS_TYPE = { + begin: /\[/, + end: /\]/, excludeBegin: true, excludeEnd: true, relevance: 0, contains: [].concat( 'self', GENTLEMANS_SET, - { begin: "(" + TYPES.join("|") + ")", className: "built_in", relevance:0 }, - { className: 'type', begin: /[\.\w\d]+/, relevance: 0 } + { + begin: "(" + TYPES.join("|") + ")", + className: "built_in", + relevance: 0 + }, + { + className: 'type', + begin: /[\.\w\d]+/, + relevance: 0 + } ) }; - PS_METHODS.contains.unshift(PS_TYPE) + PS_METHODS.contains.unshift(PS_TYPE); return { name: 'PowerShell', - aliases: ["ps", "ps1"], + aliases: [ + "ps", + "ps1" + ], case_insensitive: true, keywords: KEYWORDS, contains: GENTLEMANS_SET.concat( diff --git a/src/languages/profile.js b/src/languages/profile.js index df2f005308..a7c504d434 100644 --- a/src/languages/profile.js +++ b/src/languages/profile.js @@ -10,25 +10,30 @@ export default function(hljs) { contains: [ hljs.C_NUMBER_MODE, { - begin: '[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}', end: ':', + begin: '[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}', + end: ':', excludeEnd: true }, { - begin: '(ncalls|tottime|cumtime)', end: '$', + begin: '(ncalls|tottime|cumtime)', + end: '$', keywords: 'ncalls tottime|10 cumtime|10 filename', relevance: 10 }, { - begin: 'function calls', end: '$', - contains: [hljs.C_NUMBER_MODE], + begin: 'function calls', + end: '$', + contains: [ hljs.C_NUMBER_MODE ], relevance: 10 }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, { className: 'string', - begin: '\\(', end: '\\)$', - excludeBegin: true, excludeEnd: true, + begin: '\\(', + end: '\\)$', + excludeBegin: true, + excludeEnd: true, relevance: 0 } ] diff --git a/src/languages/prolog.js b/src/languages/prolog.js index 33695ad090..0f6a05ac88 100644 --- a/src/languages/prolog.js +++ b/src/languages/prolog.js @@ -6,65 +6,70 @@ Website: https://en.wikipedia.org/wiki/Prolog */ export default function(hljs) { - - var ATOM = { + const ATOM = { begin: /[a-z][A-Za-z0-9_]*/, relevance: 0 }; - var VAR = { + const VAR = { className: 'symbol', variants: [ - {begin: /[A-Z][a-zA-Z0-9_]*/}, - {begin: /_[A-Za-z0-9_]*/}, + { + begin: /[A-Z][a-zA-Z0-9_]*/ + }, + { + begin: /_[A-Za-z0-9_]*/ + } ], relevance: 0 }; - var PARENTED = { + const PARENTED = { begin: /\(/, end: /\)/, relevance: 0 }; - var LIST = { + const LIST = { begin: /\[/, end: /\]/ }; - var LINE_COMMENT = { + const LINE_COMMENT = { className: 'comment', - begin: /%/, end: /$/, - contains: [hljs.PHRASAL_WORDS_MODE] + begin: /%/, + end: /$/, + contains: [ hljs.PHRASAL_WORDS_MODE ] }; - var BACKTICK_STRING = { + const BACKTICK_STRING = { className: 'string', - begin: /`/, end: /`/, - contains: [hljs.BACKSLASH_ESCAPE] + begin: /`/, + end: /`/, + contains: [ hljs.BACKSLASH_ESCAPE ] }; - var CHAR_CODE = { + const CHAR_CODE = { className: 'string', // 0'a etc. begin: /0'(\\'|.)/ }; - var SPACE_CODE = { + const SPACE_CODE = { className: 'string', begin: /0'\\s/ // 0'\s }; - var PRED_OP = { // relevance booster + const PRED_OP = { // relevance booster begin: /:-/ }; - var inner = [ + const inner = [ ATOM, VAR, @@ -87,7 +92,9 @@ export default function(hljs) { return { name: 'Prolog', contains: inner.concat([ - {begin: /\.$/} // relevance booster + { // relevance booster + begin: /\.$/ + } ]) }; } diff --git a/src/languages/puppet.js b/src/languages/puppet.js index c2f9fc2775..1b99cbc9b9 100644 --- a/src/languages/puppet.js +++ b/src/languages/puppet.js @@ -6,20 +6,19 @@ Category: config */ export default function(hljs) { - - var PUPPET_KEYWORDS = { + const PUPPET_KEYWORDS = { keyword: /* language keywords */ 'and case default else elsif false if in import enherits node or true undef unless main settings $string ', literal: /* metaparameters */ 'alias audit before loglevel noop require subscribe tag ' + - /* normal attributes */ + /* normal attributes */ 'owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check ' + - 'en_address ip_address realname command environment hour monute month monthday special target weekday '+ + 'en_address ip_address realname command environment hour monute month monthday special target weekday ' + 'creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore ' + 'links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source ' + - 'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid '+ + 'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ' + 'ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel ' + 'native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options ' + 'device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use ' + @@ -33,56 +32,78 @@ export default function(hljs) { built_in: /* core facts */ 'architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers ' + - 'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces '+ + 'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ' + 'ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion ' + 'kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease ' + 'lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major ' + - 'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease '+ - 'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion '+ - 'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced '+ - 'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime '+ + 'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease ' + + 'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion ' + + 'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced ' + + 'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime ' + 'uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version' }; - var COMMENT = hljs.COMMENT('#', '$'); + const COMMENT = hljs.COMMENT('#', '$'); - var IDENT_RE = '([A-Za-z_]|::)(\\w|::)*'; + const IDENT_RE = '([A-Za-z_]|::)(\\w|::)*'; - var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE}); + const TITLE = hljs.inherit(hljs.TITLE_MODE, { + begin: IDENT_RE + }); - var VARIABLE = {className: 'variable', begin: '\\$' + IDENT_RE}; + const VARIABLE = { + className: 'variable', + begin: '\\$' + IDENT_RE + }; - var STRING = { + const STRING = { className: 'string', - contains: [hljs.BACKSLASH_ESCAPE, VARIABLE], + contains: [ + hljs.BACKSLASH_ESCAPE, + VARIABLE + ], variants: [ - {begin: /'/, end: /'/}, - {begin: /"/, end: /"/} + { + begin: /'/, + end: /'/ + }, + { + begin: /"/, + end: /"/ + } ] }; return { name: 'Puppet', - aliases: ['pp'], + aliases: [ 'pp' ], contains: [ COMMENT, VARIABLE, STRING, { - beginKeywords: 'class', end: '\\{|;', + beginKeywords: 'class', + end: '\\{|;', illegal: /=/, - contains: [TITLE, COMMENT] + contains: [ + TITLE, + COMMENT + ] }, { - beginKeywords: 'define', end: /\{/, + beginKeywords: 'define', + end: /\{/, contains: [ { - className: 'section', begin: hljs.IDENT_RE, endsParent: true + className: 'section', + begin: hljs.IDENT_RE, + endsParent: true } ] }, { - begin: hljs.IDENT_RE + '\\s+\\{', returnBegin: true, + begin: hljs.IDENT_RE + '\\s+\\{', + returnBegin: true, end: /\S/, contains: [ { @@ -90,19 +111,21 @@ export default function(hljs) { begin: hljs.IDENT_RE }, { - begin: /\{/, end: /\}/, + begin: /\{/, + end: /\}/, keywords: PUPPET_KEYWORDS, relevance: 0, contains: [ STRING, COMMENT, { - begin:'[a-zA-Z_]+\\s*=>', - returnBegin: true, end: '=>', + begin: '[a-zA-Z_]+\\s*=>', + returnBegin: true, + end: '=>', contains: [ { className: 'attr', - begin: hljs.IDENT_RE, + begin: hljs.IDENT_RE } ] }, @@ -118,5 +141,5 @@ export default function(hljs) { relevance: 0 } ] - } + }; } diff --git a/src/languages/purebasic.js b/src/languages/purebasic.js index 96f13c6a91..d5f864ef04 100644 --- a/src/languages/purebasic.js +++ b/src/languages/purebasic.js @@ -9,12 +9,13 @@ Website: https://www.purebasic.com // Base deafult colors in PB IDE: background: #FFFFDF; foreground: #000000; export default function(hljs) { - var STRINGS = { // PB IDE color: #0080FF (Azure Radiance) + const STRINGS = { // PB IDE color: #0080FF (Azure Radiance) className: 'string', - begin: '(~)?"', end: '"', + begin: '(~)?"', + end: '"', illegal: '\\n' }; - var CONSTANTS = { // PB IDE color: #924B72 (Cannon Pink) + const CONSTANTS = { // PB IDE color: #924B72 (Cannon Pink) // "#" + a letter or underscore + letters, digits or underscores + (optional) "$" className: 'symbol', begin: '#[a-zA-Z_]\\w*\\$?' @@ -22,7 +23,10 @@ export default function(hljs) { return { name: 'PureBASIC', - aliases: ['pb', 'pbi'], + aliases: [ + 'pb', + 'pbi' + ], keywords: // PB IDE color: #006666 (Blue Stone) + Bold // Keywords from all version of PureBASIC 5.00 upward ... 'Align And Array As Break CallDebugger Case CompilerCase CompilerDefault ' + @@ -42,7 +46,9 @@ export default function(hljs) { 'UseModule Wend While With XIncludeFile XOr', contains: [ // COMMENTS | PB IDE color: #00AAAA (Persian Green) - hljs.COMMENT(';', '$', {relevance: 0}), + hljs.COMMENT(';', '$', { + relevance: 0 + }), { // PROCEDURES DEFINITIONS className: 'function', diff --git a/src/languages/python-repl.js b/src/languages/python-repl.js index ceb92d9574..7746c5c5c0 100644 --- a/src/languages/python-repl.js +++ b/src/languages/python-repl.js @@ -7,7 +7,7 @@ Category: common export default function(hljs) { return { - aliases: ['pycon'], + aliases: [ 'pycon' ], contains: [ { className: 'meta', @@ -16,14 +16,19 @@ export default function(hljs) { // this is purely for cleaner HTML output end: / |$/, starts: { - end: '$', subLanguage: 'python' + end: '$', + subLanguage: 'python' } }, variants: [ - { begin: /^>>>(?=[ ]|$)/ }, - { begin: /^\.\.\.(?=[ ]|$)/ } + { + begin: /^>>>(?=[ ]|$)/ + }, + { + begin: /^\.\.\.(?=[ ]|$)/ + } ] - }, + } ] - } + }; } diff --git a/src/languages/q.js b/src/languages/q.js index 5765429fa6..7b02be211a 100644 --- a/src/languages/q.js +++ b/src/languages/q.js @@ -5,26 +5,31 @@ Description: Q is a vector-based functional paradigm programming language built Author: Sergey Vidyuk Website: https://kx.com/connect-with-us/developers/ */ + export default function(hljs) { - var Q_KEYWORDS = { - $pattern: /(`?)[A-Za-z0-9_]+\b/, - keyword: - 'do while select delete by update from', - literal: - '0b 1b', - built_in: - 'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum', - type: - '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid' + const KEYWORDS = { + $pattern: /(`?)[A-Za-z0-9_]+\b/, + keyword: + 'do while select delete by update from', + literal: + '0b 1b', + built_in: + 'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum', + type: + '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid' }; + return { - name: 'Q', - aliases:['k', 'kdb'], - keywords: Q_KEYWORDS, - contains: [ - hljs.C_LINE_COMMENT_MODE, - hljs.QUOTE_STRING_MODE, - hljs.C_NUMBER_MODE - ] + name: 'Q', + aliases: [ + 'k', + 'kdb' + ], + keywords: KEYWORDS, + contains: [ + hljs.C_LINE_COMMENT_MODE, + hljs.QUOTE_STRING_MODE, + hljs.C_NUMBER_MODE + ] }; } diff --git a/src/languages/qml.js b/src/languages/qml.js index e61f9863ec..b96c415770 100644 --- a/src/languages/qml.js +++ b/src/languages/qml.js @@ -11,70 +11,70 @@ Category: scripting import * as regex from '../lib/regex.js'; export default function(hljs) { - var KEYWORDS = { - keyword: - 'in of on if for while finally var new function do return void else break catch ' + - 'instanceof with throw case default try this switch continue typeof delete ' + - 'let yield const export super debugger as async await import', - literal: - 'true false null undefined NaN Infinity', - built_in: - 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' + - 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' + - 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' + - 'TypeError URIError Number Math Date String RegExp Array Float32Array ' + - 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' + - 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' + - 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' + - 'Behavior bool color coordinate date double enumeration font geocircle georectangle ' + - 'geoshape int list matrix4x4 parent point quaternion real rect ' + - 'size string url variant vector2d vector3d vector4d ' + - 'Promise' - }; + const KEYWORDS = { + keyword: + 'in of on if for while finally var new function do return void else break catch ' + + 'instanceof with throw case default try this switch continue typeof delete ' + + 'let yield const export super debugger as async await import', + literal: + 'true false null undefined NaN Infinity', + built_in: + 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' + + 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' + + 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' + + 'TypeError URIError Number Math Date String RegExp Array Float32Array ' + + 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' + + 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' + + 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' + + 'Behavior bool color coordinate date double enumeration font geocircle georectangle ' + + 'geoshape int list matrix4x4 parent point quaternion real rect ' + + 'size string url variant vector2d vector3d vector4d ' + + 'Promise' + }; - var QML_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9\\._]*'; + const QML_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9\\._]*'; // Isolate property statements. Ends at a :, =, ;, ,, a comment or end of line. // Use property class. - var PROPERTY = { - className: 'keyword', - begin: '\\bproperty\\b', - starts: { - className: 'string', - end: '(:|=|;|,|//|/\\*|$)', - returnEnd: true - } + const PROPERTY = { + className: 'keyword', + begin: '\\bproperty\\b', + starts: { + className: 'string', + end: '(:|=|;|,|//|/\\*|$)', + returnEnd: true + } }; // Isolate signal statements. Ends at a ) a comment or end of line. // Use property class. - var SIGNAL = { - className: 'keyword', - begin: '\\bsignal\\b', - starts: { - className: 'string', - end: '(\\(|:|=|;|,|//|/\\*|$)', - returnEnd: true - } + const SIGNAL = { + className: 'keyword', + begin: '\\bsignal\\b', + starts: { + className: 'string', + end: '(\\(|:|=|;|,|//|/\\*|$)', + returnEnd: true + } }; // id: is special in QML. When we see id: we want to mark the id: as attribute and // emphasize the token following. - var ID_ID = { - className: 'attribute', - begin: '\\bid\\s*:', - starts: { - className: 'string', - end: QML_IDENT_RE, - returnEnd: false - } + const ID_ID = { + className: 'attribute', + begin: '\\bid\\s*:', + starts: { + className: 'string', + end: QML_IDENT_RE, + returnEnd: false + } }; // Find QML object attribute. An attribute is a QML identifier followed by :. // Unfortunately it's hard to know where it ends, as it may contain scalars, // objects, object definitions, or javascript. The true end is either when the parent // ends or the next attribute is detected. - var QML_ATTRIBUTE = { + const QML_ATTRIBUTE = { begin: QML_IDENT_RE + '\\s*:', returnBegin: true, contains: [ @@ -91,18 +91,21 @@ export default function(hljs) { // Find QML object. A QML object is a QML identifier followed by { and ends at the matching }. // All we really care about is finding IDENT followed by { and just mark up the IDENT and ignore the {. - var QML_OBJECT = { - begin: regex.concat(QML_IDENT_RE, /\s*\{/), end: /\{/, + const QML_OBJECT = { + begin: regex.concat(QML_IDENT_RE, /\s*\{/), + end: /\{/, returnBegin: true, relevance: 0, contains: [ - hljs.inherit(hljs.TITLE_MODE, {begin: QML_IDENT_RE}) + hljs.inherit(hljs.TITLE_MODE, { + begin: QML_IDENT_RE + }) ] }; return { name: 'QML', - aliases: ['qt'], + aliases: [ 'qt' ], case_insensitive: false, keywords: KEYWORDS, contains: [ @@ -114,12 +117,14 @@ export default function(hljs) { hljs.QUOTE_STRING_MODE, { // template string className: 'string', - begin: '`', end: '`', + begin: '`', + end: '`', contains: [ hljs.BACKSLASH_ESCAPE, { className: 'subst', - begin: '\\$\\{', end: '\\}' + begin: '\\$\\{', + end: '\\}' } ] }, @@ -128,9 +133,15 @@ export default function(hljs) { { className: 'number', variants: [ - { begin: '\\b(0[bB][01]+)' }, - { begin: '\\b(0[oO][0-7]+)' }, - { begin: hljs.C_NUMBER_RE } + { + begin: '\\b(0[bB][01]+)' + }, + { + begin: '\\b(0[oO][0-7]+)' + }, + { + begin: hljs.C_NUMBER_RE + } ], relevance: 0 }, @@ -142,7 +153,8 @@ export default function(hljs) { hljs.C_BLOCK_COMMENT_MODE, hljs.REGEXP_MODE, { // E4X / JSX - begin: /\s*[);\]]/, + begin: /\s*[);\]]/, relevance: 0, subLanguage: 'xml' } @@ -153,12 +165,17 @@ export default function(hljs) { PROPERTY, { className: 'function', - beginKeywords: 'function', end: /\{/, excludeEnd: true, + beginKeywords: 'function', + end: /\{/, + excludeEnd: true, contains: [ - hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}), + hljs.inherit(hljs.TITLE_MODE, { + begin: /[A-Za-z$_][0-9A-Za-z$_]*/ + }), { className: 'params', - begin: /\(/, end: /\)/, + begin: /\(/, + end: /\)/, excludeBegin: true, excludeEnd: true, contains: [ @@ -170,7 +187,9 @@ export default function(hljs) { illegal: /\[|%/ }, { - begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots + // hack: prevents detection of keywords after dots + begin: '\\.' + hljs.IDENT_RE, + relevance: 0 }, ID_ID, QML_ATTRIBUTE, diff --git a/src/languages/reasonml.js b/src/languages/reasonml.js index cbe629f506..b67c568712 100644 --- a/src/languages/reasonml.js +++ b/src/languages/reasonml.js @@ -6,29 +6,39 @@ Author: Gidi Meir Morris Category: functional */ export default function(hljs) { - function orReValues(ops){ + function orReValues(ops) { return ops - .map(function(op) { - return op - .split('') - .map(function(char) { - return '\\' + char; - }) - .join(''); - }) - .join('|'); + .map(function(op) { + return op + .split('') + .map(function(char) { + return '\\' + char; + }) + .join(''); + }) + .join('|'); } - var RE_IDENT = '~?[a-z$_][0-9a-zA-Z$_]*'; - var RE_MODULE_IDENT = '`?[A-Z$_][0-9a-zA-Z$_]*'; + const RE_IDENT = '~?[a-z$_][0-9a-zA-Z$_]*'; + const RE_MODULE_IDENT = '`?[A-Z$_][0-9a-zA-Z$_]*'; - var RE_PARAM_TYPEPARAM = '\'?[a-z$_][0-9a-z$_]*'; - var RE_PARAM_TYPE = '\s*:\s*[a-z$_][0-9a-z$_]*(\(\s*(' + RE_PARAM_TYPEPARAM + '\s*(,' + RE_PARAM_TYPEPARAM + ')*)?\s*\))?'; - var RE_PARAM = RE_IDENT + '(' + RE_PARAM_TYPE + ')?(' + RE_PARAM_TYPE + ')?'; - var RE_OPERATOR = "(" + orReValues(['||', '++', '**', '+.', '*', '/', '*.', '/.', '...']) + "|\\|>|&&|==|===)"; - var RE_OPERATOR_SPACED = "\\s+" + RE_OPERATOR + "\\s+"; + const RE_PARAM_TYPEPARAM = '\'?[a-z$_][0-9a-z$_]*'; + const RE_PARAM_TYPE = '\s*:\s*[a-z$_][0-9a-z$_]*(\(\s*(' + RE_PARAM_TYPEPARAM + '\s*(,' + RE_PARAM_TYPEPARAM + ')*)?\s*\))?'; + const RE_PARAM = RE_IDENT + '(' + RE_PARAM_TYPE + ')?(' + RE_PARAM_TYPE + ')?'; + const RE_OPERATOR = "(" + orReValues([ + '||', + '++', + '**', + '+.', + '*', + '/', + '*.', + '/.', + '...' + ]) + "|\\|>|&&|==|===)"; + const RE_OPERATOR_SPACED = "\\s+" + RE_OPERATOR + "\\s+"; - var KEYWORDS = { + const KEYWORDS = { keyword: 'and as asr assert begin class constraint do done downto else end exception external ' + 'for fun function functor if in include inherit initializer ' + @@ -40,12 +50,12 @@ export default function(hljs) { 'true false' }; - var RE_NUMBER = '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' + + const RE_NUMBER = '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' + '0[oO][0-7_]+[Lln]?|' + '0[bB][01_]+[Lln]?|' + '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)'; - var NUMBER_MODE = { + const NUMBER_MODE = { className: 'number', relevance: 0, variants: [ @@ -58,12 +68,12 @@ export default function(hljs) { ] }; - var OPERATOR_MODE = { + const OPERATOR_MODE = { className: 'operator', relevance: 0, begin: RE_OPERATOR }; - var LIST_CONTENTS_MODES = [ + const LIST_CONTENTS_MODES = [ { className: 'identifier', relevance: 0, @@ -73,12 +83,13 @@ export default function(hljs) { NUMBER_MODE ]; - var MODULE_ACCESS_CONTENTS = [ + const MODULE_ACCESS_CONTENTS = [ hljs.QUOTE_STRING_MODE, OPERATOR_MODE, { className: 'module', - begin: "\\b" + RE_MODULE_IDENT, returnBegin: true, + begin: "\\b" + RE_MODULE_IDENT, + returnBegin: true, end: "\.", contains: [ { @@ -90,10 +101,11 @@ export default function(hljs) { } ]; - var PARAMS_CONTENTS = [ + const PARAMS_CONTENTS = [ { className: 'module', - begin: "\\b" + RE_MODULE_IDENT, returnBegin: true, + begin: "\\b" + RE_MODULE_IDENT, + returnBegin: true, end: "\.", relevance: 0, contains: [ @@ -106,7 +118,7 @@ export default function(hljs) { } ]; - var PARAMS_MODE = { + const PARAMS_MODE = { begin: RE_IDENT, end: '(,|\\n|\\))', relevance: 0, @@ -123,7 +135,7 @@ export default function(hljs) { ] }; - var FUNCTION_BLOCK_MODE = { + const FUNCTION_BLOCK_MODE = { className: 'function', relevance: 0, keywords: KEYWORDS, @@ -144,7 +156,7 @@ export default function(hljs) { begin: RE_PARAM }, { - begin: /\(\s*\)/, + begin: /\(\s*\)/ } ] } @@ -159,9 +171,7 @@ export default function(hljs) { { className: 'params', relevance: 0, - variants: [ - PARAMS_MODE - ] + variants: [ PARAMS_MODE ] } ] }, @@ -172,7 +182,7 @@ export default function(hljs) { }; MODULE_ACCESS_CONTENTS.push(FUNCTION_BLOCK_MODE); - var CONSTRUCTOR_MODE = { + const CONSTRUCTOR_MODE = { className: 'constructor', begin: RE_MODULE_IDENT + '\\(', end: '\\)', @@ -188,7 +198,7 @@ export default function(hljs) { ] }; - var PATTERN_MATCH_BLOCK_MODE = { + const PATTERN_MATCH_BLOCK_MODE = { className: 'pattern-match', begin: '\\|', returnBegin: true, @@ -206,7 +216,7 @@ export default function(hljs) { ] }; - var MODULE_ACCESS_MODE = { + const MODULE_ACCESS_MODE = { className: 'module-access', keywords: KEYWORDS, returnBegin: true, @@ -239,11 +249,13 @@ export default function(hljs) { return { name: 'ReasonML', - aliases: ['re'], + aliases: [ 're' ], keywords: KEYWORDS, illegal: '(:-|:=|\\$\\{|\\+=)', contains: [ - hljs.COMMENT('/\\*', '\\*/', { illegal: '^(#,\\/\\/)' }), + hljs.COMMENT('/\\*', '\\*/', { + illegal: '^(#,\\/\\/)' + }), { className: 'character', begin: '\'(\\\\[^\']+|[^\'])\'', @@ -260,7 +272,7 @@ export default function(hljs) { className: 'literal', begin: '\\[\\|', end: '\\|\\]', - relevance: 0, + relevance: 0, contains: LIST_CONTENTS_MODES }, { diff --git a/src/languages/roboconf.js b/src/languages/roboconf.js index e4457af933..c915d4ab0e 100644 --- a/src/languages/roboconf.js +++ b/src/languages/roboconf.js @@ -7,11 +7,13 @@ Category: config */ export default function(hljs) { - var IDENTIFIER = '[a-zA-Z-_][^\\n{]+\\{'; + const IDENTIFIER = '[a-zA-Z-_][^\\n{]+\\{'; - var PROPERTY = { + const PROPERTY = { className: 'attribute', - begin: /[a-zA-Z-_]+/, end: /\s*:/, excludeEnd: true, + begin: /[a-zA-Z-_]+/, + end: /\s*:/, + excludeEnd: true, starts: { end: ';', relevance: 0, @@ -30,7 +32,10 @@ export default function(hljs) { return { name: 'Roboconf', - aliases: ['graph', 'instances'], + aliases: [ + 'graph', + 'instances' + ], case_insensitive: true, keywords: 'import', contains: [ diff --git a/src/languages/routeros.js b/src/languages/routeros.js index b3c6a64132..bbe5c3ac90 100644 --- a/src/languages/routeros.js +++ b/src/languages/routeros.js @@ -36,8 +36,12 @@ export default function(hljs) { const VAR = { className: 'variable', variants: [ - { begin: /\$[\w\d#@][\w\d_]*/ }, - { begin: /\$\{(.*?)\}/ } + { + begin: /\$[\w\d#@][\w\d_]*/ + }, + { + begin: /\$\{(.*?)\}/ + } ] }; @@ -52,7 +56,7 @@ export default function(hljs) { className: 'variable', begin: /\$\(/, end: /\)/, - contains: [hljs.BACKSLASH_ESCAPE] + contains: [ hljs.BACKSLASH_ESCAPE ] } ] }; @@ -68,7 +72,10 @@ export default function(hljs) { return { name: 'Microtik RouterOS script', - aliases: ['routeros', 'mikrotik'], + aliases: [ + 'routeros', + 'mikrotik' + ], case_insensitive: true, keywords: { $pattern: /:?[\w-]+/, @@ -78,9 +85,18 @@ export default function(hljs) { contains: [ { // illegal syntax variants: [ - { begin: /\/\*/, end: /\*\// }, // -- comment - { begin: /\/\//, end: /$/ }, // Stan comment - { begin: /<\//, end: />/ }, // HTML tags + { // -- comment + begin: /\/\*/, + end: /\*\// + }, + { // Stan comment + begin: /\/\//, + end: /$/ + }, + { // HTML tags + begin: /<\//, + end: />/ + } ], illegal: /./ }, diff --git a/src/languages/rsl.js b/src/languages/rsl.js index 6dbca51329..d5de88eab1 100644 --- a/src/languages/rsl.js +++ b/src/languages/rsl.js @@ -30,14 +30,17 @@ export default function(hljs) { hljs.C_NUMBER_MODE, { className: 'meta', - begin: '#', end: '$' + begin: '#', + end: '$' }, { className: 'class', - beginKeywords: 'surface displacement light volume imager', end: '\\(' + beginKeywords: 'surface displacement light volume imager', + end: '\\(' }, { - beginKeywords: 'illuminate illuminance gather', end: '\\(' + beginKeywords: 'illuminate illuminance gather', + end: '\\(' } ] }; diff --git a/src/languages/ruleslanguage.js b/src/languages/ruleslanguage.js index 12368949fe..664d8bdef5 100644 --- a/src/languages/ruleslanguage.js +++ b/src/languages/ruleslanguage.js @@ -10,46 +10,48 @@ export default function(hljs) { return { name: 'Oracle Rules Language', keywords: { - keyword: 'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE ' + - 'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 ' + - 'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 ' + - 'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 ' + - 'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 ' + - 'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 ' + - 'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 ' + - 'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 ' + - 'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 ' + - 'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 ' + - 'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 ' + - 'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 ' + - 'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 ' + - 'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 ' + - 'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 ' + - 'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER ' + - 'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE ' + - 'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH ' + - 'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND ' + - 'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ' + - 'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE ' + - 'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE ' + - 'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING ' + - 'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF ' + - 'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY ' + - 'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE ' + - 'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR ' + - 'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ' + - 'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE ' + - 'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE ' + - 'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL ' + - 'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN ' + - 'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING ' + - 'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM ' + - 'NUMDAYS READ_DATE STAGING', - built_in: 'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML ' + - 'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT ' + - 'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE ' + - 'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT ' + - 'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME' + keyword: + 'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE ' + + 'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 ' + + 'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 ' + + 'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 ' + + 'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 ' + + 'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 ' + + 'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 ' + + 'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 ' + + 'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 ' + + 'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 ' + + 'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 ' + + 'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 ' + + 'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 ' + + 'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 ' + + 'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 ' + + 'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER ' + + 'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE ' + + 'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH ' + + 'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND ' + + 'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ' + + 'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE ' + + 'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE ' + + 'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING ' + + 'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF ' + + 'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY ' + + 'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE ' + + 'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR ' + + 'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ' + + 'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE ' + + 'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE ' + + 'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL ' + + 'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN ' + + 'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING ' + + 'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM ' + + 'NUMDAYS READ_DATE STAGING', + built_in: + 'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML ' + + 'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT ' + + 'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE ' + + 'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT ' + + 'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME' }, contains: [ hljs.C_LINE_COMMENT_MODE, @@ -60,8 +62,13 @@ export default function(hljs) { { className: 'literal', variants: [ - {begin: '#\\s+[a-zA-Z .]*', relevance: 0}, // looks like #-comment - {begin: '#[a-zA-Z .]+'} + { // looks like #-comment + begin: '#\\s+[a-zA-Z .]*', + relevance: 0 + }, + { + begin: '#[a-zA-Z .]+' + } ] } ] diff --git a/src/languages/rust.js b/src/languages/rust.js index 7b429d96a6..39f3ef163c 100644 --- a/src/languages/rust.js +++ b/src/languages/rust.js @@ -7,13 +7,13 @@ Category: common, system */ export default function(hljs) { - var NUM_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\?'; - var KEYWORDS = + const NUM_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\?'; + const KEYWORDS = 'abstract as async await become box break const continue crate do dyn ' + 'else enum extern false final fn for if impl in let loop macro match mod ' + 'move mut override priv pub ref return self Self static struct super ' + 'trait true try type typeof unsafe unsized use virtual where while yield'; - var BUILTINS = + const BUILTINS = // functions 'drop ' + // types @@ -35,7 +35,7 @@ export default function(hljs) { 'unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!'; return { name: 'Rust', - aliases: ['rs'], + aliases: [ 'rs' ], keywords: { $pattern: hljs.IDENT_RE + '!?', keyword: @@ -48,13 +48,22 @@ export default function(hljs) { illegal: ''