mirror of https://github.com/jkjoy/sunpeiwen.git
154 lines
2.8 KiB
JavaScript
154 lines
2.8 KiB
JavaScript
|
/*
|
||
|
Language: ActionScript
|
||
|
Author: Alexander Myadzel <myadzel@gmail.com>
|
||
|
Category: scripting
|
||
|
Audit: 2020
|
||
|
*/
|
||
|
|
||
|
/** @type LanguageFn */
|
||
|
function actionscript(hljs) {
|
||
|
const regex = hljs.regex;
|
||
|
const IDENT_RE = /[a-zA-Z_$][a-zA-Z0-9_$]*/;
|
||
|
const PKG_NAME_RE = regex.concat(
|
||
|
IDENT_RE,
|
||
|
regex.concat("(\\.", IDENT_RE, ")*")
|
||
|
);
|
||
|
const IDENT_FUNC_RETURN_TYPE_RE = /([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/;
|
||
|
|
||
|
const AS3_REST_ARG_MODE = {
|
||
|
className: 'rest_arg',
|
||
|
begin: /[.]{3}/,
|
||
|
end: IDENT_RE,
|
||
|
relevance: 10
|
||
|
};
|
||
|
|
||
|
const KEYWORDS = [
|
||
|
"as",
|
||
|
"break",
|
||
|
"case",
|
||
|
"catch",
|
||
|
"class",
|
||
|
"const",
|
||
|
"continue",
|
||
|
"default",
|
||
|
"delete",
|
||
|
"do",
|
||
|
"dynamic",
|
||
|
"each",
|
||
|
"else",
|
||
|
"extends",
|
||
|
"final",
|
||
|
"finally",
|
||
|
"for",
|
||
|
"function",
|
||
|
"get",
|
||
|
"if",
|
||
|
"implements",
|
||
|
"import",
|
||
|
"in",
|
||
|
"include",
|
||
|
"instanceof",
|
||
|
"interface",
|
||
|
"internal",
|
||
|
"is",
|
||
|
"namespace",
|
||
|
"native",
|
||
|
"new",
|
||
|
"override",
|
||
|
"package",
|
||
|
"private",
|
||
|
"protected",
|
||
|
"public",
|
||
|
"return",
|
||
|
"set",
|
||
|
"static",
|
||
|
"super",
|
||
|
"switch",
|
||
|
"this",
|
||
|
"throw",
|
||
|
"try",
|
||
|
"typeof",
|
||
|
"use",
|
||
|
"var",
|
||
|
"void",
|
||
|
"while",
|
||
|
"with"
|
||
|
];
|
||
|
const LITERALS = [
|
||
|
"true",
|
||
|
"false",
|
||
|
"null",
|
||
|
"undefined"
|
||
|
];
|
||
|
|
||
|
return {
|
||
|
name: 'ActionScript',
|
||
|
aliases: [ 'as' ],
|
||
|
keywords: {
|
||
|
keyword: KEYWORDS,
|
||
|
literal: LITERALS
|
||
|
},
|
||
|
contains: [
|
||
|
hljs.APOS_STRING_MODE,
|
||
|
hljs.QUOTE_STRING_MODE,
|
||
|
hljs.C_LINE_COMMENT_MODE,
|
||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||
|
hljs.C_NUMBER_MODE,
|
||
|
{
|
||
|
match: [
|
||
|
/\bpackage/,
|
||
|
/\s+/,
|
||
|
PKG_NAME_RE
|
||
|
],
|
||
|
className: {
|
||
|
1: "keyword",
|
||
|
3: "title.class"
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
match: [
|
||
|
/\b(?:class|interface|extends|implements)/,
|
||
|
/\s+/,
|
||
|
IDENT_RE
|
||
|
],
|
||
|
className: {
|
||
|
1: "keyword",
|
||
|
3: "title.class"
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
className: 'meta',
|
||
|
beginKeywords: 'import include',
|
||
|
end: /;/,
|
||
|
keywords: { keyword: 'import include' }
|
||
|
},
|
||
|
{
|
||
|
beginKeywords: 'function',
|
||
|
end: /[{;]/,
|
||
|
excludeEnd: true,
|
||
|
illegal: /\S/,
|
||
|
contains: [
|
||
|
hljs.inherit(hljs.TITLE_MODE, { className: "title.function" }),
|
||
|
{
|
||
|
className: 'params',
|
||
|
begin: /\(/,
|
||
|
end: /\)/,
|
||
|
contains: [
|
||
|
hljs.APOS_STRING_MODE,
|
||
|
hljs.QUOTE_STRING_MODE,
|
||
|
hljs.C_LINE_COMMENT_MODE,
|
||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||
|
AS3_REST_ARG_MODE
|
||
|
]
|
||
|
},
|
||
|
{ begin: regex.concat(/:\s*/, IDENT_FUNC_RETURN_TYPE_RE) }
|
||
|
]
|
||
|
},
|
||
|
hljs.METHOD_GUARD
|
||
|
],
|
||
|
illegal: /#/
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export { actionscript as default };
|