185 lines
5.3 KiB
JavaScript
185 lines
5.3 KiB
JavaScript
module.exports = function(hljs) {
|
|
var LASSO_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*';
|
|
var LASSO_ANGLE_RE = '<\\?(lasso(script)?|=)';
|
|
var LASSO_CLOSE_RE = '\\]|\\?>';
|
|
var LASSO_KEYWORDS = {
|
|
literal:
|
|
'true false none minimal full all void ' +
|
|
'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',
|
|
built_in:
|
|
'array date decimal duration integer map pair string tag xml null ' +
|
|
'boolean bytes keyword list locale queue set stack staticarray ' +
|
|
'local var variable global data self inherited currentcapture givenblock',
|
|
keyword:
|
|
'error_code error_msg error_pop error_push error_reset cache ' +
|
|
'database_names database_schemanames database_tablenames define_tag ' +
|
|
'define_type email_batch encode_set html_comment handle handle_error ' +
|
|
'header if inline iterate ljax_target link link_currentaction ' +
|
|
'link_currentgroup link_currentrecord link_detail link_firstgroup ' +
|
|
'link_firstrecord link_lastgroup link_lastrecord link_nextgroup ' +
|
|
'link_nextrecord link_prevgroup link_prevrecord log loop ' +
|
|
'namespace_using output_none portal private protect records referer ' +
|
|
'referrer repeating resultset rows search_args search_arguments ' +
|
|
'select sort_args sort_arguments thread_atomic value_list while ' +
|
|
'abort case else if_empty if_false if_null if_true loop_abort ' +
|
|
'loop_continue loop_count params params_up return return_value ' +
|
|
'run_children soap_definetag soap_lastrequest soap_lastresponse ' +
|
|
'tag_name ascending average by define descending do equals ' +
|
|
'frozen group handle_failure import in into join let match max ' +
|
|
'min on order parent protected provide public require returnhome ' +
|
|
'skip split_thread sum take thread to trait type where with ' +
|
|
'yield yieldhome'
|
|
};
|
|
var HTML_COMMENT = hljs.COMMENT(
|
|
'<!--',
|
|
'-->',
|
|
{
|
|
relevance: 0
|
|
}
|
|
);
|
|
var LASSO_NOPROCESS = {
|
|
className: 'preprocessor',
|
|
begin: '\\[noprocess\\]',
|
|
starts: {
|
|
className: 'markup',
|
|
end: '\\[/noprocess\\]',
|
|
returnEnd: true,
|
|
contains: [HTML_COMMENT]
|
|
}
|
|
};
|
|
var LASSO_START = {
|
|
className: 'preprocessor',
|
|
begin: '\\[/noprocess|' + LASSO_ANGLE_RE
|
|
};
|
|
var LASSO_DATAMEMBER = {
|
|
className: 'variable',
|
|
begin: '\'' + LASSO_IDENT_RE + '\''
|
|
};
|
|
var LASSO_CODE = [
|
|
hljs.COMMENT(
|
|
'/\\*\\*!',
|
|
'\\*/'
|
|
),
|
|
hljs.C_LINE_COMMENT_MODE,
|
|
hljs.C_BLOCK_COMMENT_MODE,
|
|
hljs.inherit(hljs.C_NUMBER_MODE, {begin: hljs.C_NUMBER_RE + '|(infinity|nan)\\b'}),
|
|
hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
|
|
hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
|
|
{
|
|
className: 'string',
|
|
begin: '`', end: '`'
|
|
},
|
|
{
|
|
className: 'variable',
|
|
variants: [
|
|
{
|
|
begin: '[#$]' + LASSO_IDENT_RE
|
|
},
|
|
{
|
|
begin: '#', end: '\\d+',
|
|
illegal: '\\W'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
className: 'tag',
|
|
begin: '::\\s*', end: LASSO_IDENT_RE,
|
|
illegal: '\\W'
|
|
},
|
|
{
|
|
className: 'attribute',
|
|
variants: [
|
|
{
|
|
begin: '-(?!infinity)' + hljs.UNDERSCORE_IDENT_RE,
|
|
relevance: 0
|
|
},
|
|
{
|
|
begin: '(\\.\\.\\.)'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
className: 'subst',
|
|
variants: [
|
|
{
|
|
begin: '->\\s*',
|
|
contains: [LASSO_DATAMEMBER]
|
|
},
|
|
{
|
|
begin: '->|\\\\|&&?|\\|\\||!(?!=|>)|(and|or|not)\\b',
|
|
relevance: 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
className: 'built_in',
|
|
begin: '\\.\\.?\\s*',
|
|
relevance: 0,
|
|
contains: [LASSO_DATAMEMBER]
|
|
},
|
|
{
|
|
className: 'class',
|
|
beginKeywords: 'define',
|
|
returnEnd: true, end: '\\(|=>',
|
|
contains: [
|
|
hljs.inherit(hljs.TITLE_MODE, {begin: hljs.UNDERSCORE_IDENT_RE + '(=(?!>))?'})
|
|
]
|
|
}
|
|
];
|
|
return {
|
|
aliases: ['ls', 'lassoscript'],
|
|
case_insensitive: true,
|
|
lexemes: LASSO_IDENT_RE + '|&[lg]t;',
|
|
keywords: LASSO_KEYWORDS,
|
|
contains: [
|
|
{
|
|
className: 'preprocessor',
|
|
begin: LASSO_CLOSE_RE,
|
|
relevance: 0,
|
|
starts: {
|
|
className: 'markup',
|
|
end: '\\[|' + LASSO_ANGLE_RE,
|
|
returnEnd: true,
|
|
relevance: 0,
|
|
contains: [HTML_COMMENT]
|
|
}
|
|
},
|
|
LASSO_NOPROCESS,
|
|
LASSO_START,
|
|
{
|
|
className: 'preprocessor',
|
|
begin: '\\[no_square_brackets',
|
|
starts: {
|
|
end: '\\[/no_square_brackets\\]', // not implemented in the language
|
|
lexemes: LASSO_IDENT_RE + '|&[lg]t;',
|
|
keywords: LASSO_KEYWORDS,
|
|
contains: [
|
|
{
|
|
className: 'preprocessor',
|
|
begin: LASSO_CLOSE_RE,
|
|
relevance: 0,
|
|
starts: {
|
|
className: 'markup',
|
|
end: '\\[noprocess\\]|' + LASSO_ANGLE_RE,
|
|
returnEnd: true,
|
|
contains: [HTML_COMMENT]
|
|
}
|
|
},
|
|
LASSO_NOPROCESS,
|
|
LASSO_START
|
|
].concat(LASSO_CODE)
|
|
}
|
|
},
|
|
{
|
|
className: 'preprocessor',
|
|
begin: '\\[',
|
|
relevance: 0
|
|
},
|
|
{
|
|
className: 'shebang',
|
|
begin: '^#!.+lasso9\\b',
|
|
relevance: 10
|
|
}
|
|
].concat(LASSO_CODE)
|
|
};
|
|
}; |