diff options
Diffstat (limited to 'node_modules/highlight.js/lib/languages/moonscript.js')
-rw-r--r-- | node_modules/highlight.js/lib/languages/moonscript.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/node_modules/highlight.js/lib/languages/moonscript.js b/node_modules/highlight.js/lib/languages/moonscript.js new file mode 100644 index 000000000..9b9710ea4 --- /dev/null +++ b/node_modules/highlight.js/lib/languages/moonscript.js @@ -0,0 +1,111 @@ +module.exports = function(hljs) { + var KEYWORDS = { + keyword: + // Moonscript keywords + 'if then not for in while do return else elseif break continue switch and or ' + + 'unless when class extends super local import export from using', + literal: + 'true false nil', + built_in: + '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load ' + + 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require ' + + 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug ' + + 'io math os package string table' + }; + var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*'; + var SUBST = { + className: 'subst', + begin: /#\{/, end: /}/, + keywords: KEYWORDS + }; + var EXPRESSIONS = [ + hljs.inherit(hljs.C_NUMBER_MODE, + {starts: {end: '(\\s*/)?', relevance: 0}}), // a number tries to eat the following slash to prevent treating it as a regexp + { + className: 'string', + variants: [ + { + begin: /'/, end: /'/, + contains: [hljs.BACKSLASH_ESCAPE] + }, + { + begin: /"/, end: /"/, + contains: [hljs.BACKSLASH_ESCAPE, SUBST] + } + ] + }, + { + className: 'built_in', + begin: '@__' + hljs.IDENT_RE + }, + { + begin: '@' + hljs.IDENT_RE // relevance booster on par with CoffeeScript + }, + { + begin: hljs.IDENT_RE + '\\\\' + hljs.IDENT_RE // inst\method + } + ]; + SUBST.contains = EXPRESSIONS; + + var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE}); + var PARAMS_RE = '(\\(.*\\))?\\s*\\B[-=]>'; + var PARAMS = { + className: 'params', + begin: '\\([^\\(]', returnBegin: true, + /* We need another contained nameless mode to not have every nested + pair of parens to be called "params" */ + contains: [{ + begin: /\(/, end: /\)/, + keywords: KEYWORDS, + contains: ['self'].concat(EXPRESSIONS) + }] + }; + + return { + aliases: ['moon'], + keywords: KEYWORDS, + illegal: /\/\*/, + contains: EXPRESSIONS.concat([ + hljs.COMMENT('--', '$'), + { + className: 'function', // function: -> => + begin: '^\\s*' + JS_IDENT_RE + '\\s*=\\s*' + PARAMS_RE, end: '[-=]>', + returnBegin: true, + contains: [TITLE, PARAMS] + }, + { + begin: /[\(,:=]\s*/, // anonymous function start + relevance: 0, + contains: [ + { + className: 'function', + begin: PARAMS_RE, end: '[-=]>', + returnBegin: true, + contains: [PARAMS] + } + ] + }, + { + className: 'class', + beginKeywords: 'class', + end: '$', + illegal: /[:="\[\]]/, + contains: [ + { + beginKeywords: 'extends', + endsWithParent: true, + illegal: /[:="\[\]]/, + contains: [TITLE] + }, + TITLE + ] + }, + { + className: 'name', // table + begin: JS_IDENT_RE + ':', end: ':', + returnBegin: true, returnEnd: true, + relevance: 0 + } + ]) + }; +};
\ No newline at end of file |