From 8ec739bd037bf0d92b525cb8ea20f929052e0d9b Mon Sep 17 00:00:00 2001 From: Gustavo Rodrigues Date: Fri, 18 Apr 2014 18:17:31 -0300 Subject: [PATCH] Update to 0.03 Improves maintainability by using the LiveScript mode from CodeMirror instead of re-defining it. --- main.js | 262 +-------------------------------------------------- package.json | 11 ++- 2 files changed, 13 insertions(+), 260 deletions(-) diff --git a/main.js b/main.js index 0062d9b..55d1b76 100644 --- a/main.js +++ b/main.js @@ -3,263 +3,11 @@ define(function (require, exports, module) { var LanguageManager = brackets.getModule("language/LanguageManager"); - - (function() { - CodeMirror.defineMode('livescript', function() { - var tokenBase, external; - tokenBase = function(stream, state) { - var next_rule, nr, i$, len$, r, m; - if (next_rule = state.next || 'start') { - state.next = state.next; - if (Array.isArray(nr = Rules[next_rule])) { - for (i$ = 0, len$ = nr.length; i$ < len$; ++i$) { - r = nr[i$]; - if (r.regex && (m = stream.match(r.regex))) { - state.next = r.next; - return r.token; - } - } - stream.next(); - return 'error'; - } - if (stream.match(r = Rules[next_rule])) { - if (r.regex && stream.match(r.regex)) { - state.next = r.next; - return r.token; - } else { - stream.next(); - return 'error'; - } - } - } - stream.next(); - return 'error'; - }; - external = { - startState: function() { - return { - next: 'start', - lastToken: null - }; - }, - token: function(stream, state) { - var style; - style = tokenBase(stream, state); - state.lastToken = { - style: style, - indent: stream.indentation(), - content: stream.current() - }; - return style.replace(/\./g, ' '); - }, - indent: function(state) { - var indentation; - indentation = state.lastToken.indent; - if (state.lastToken.content.match(indenter)) { - indentation += 2; - } - return indentation; - } - }; - return external; - }); - - var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; - var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); - var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; - var stringfill = { - token: 'string', - regex: '.+' - }; - var Rules = { - start: [{ - token: 'comment.doc', - regex: '/\\*', - next: 'comment' - }, { - token: 'comment', - regex: '#.*' - }, { - token: 'keyword', - regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend - }, { - token: 'constant.language', - regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend - }, { - token: 'invalid.illegal', - regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend - }, { - token: 'language.support.class', - regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend - }, { - token: 'language.support.function', - regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend - }, { - token: 'variable.language', - regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend - }, { - token: 'identifier', - regex: identifier + '\\s*:(?![:=])' - }, { - token: 'variable', - regex: identifier - }, { - token: 'keyword.operator', - regex: '(?:\\.{3}|\\s+\\?)' - }, { - token: 'keyword.variable', - regex: '(?:@+|::|\\.\\.)', - next: 'key' - }, { - token: 'keyword.operator', - regex: '\\.\\s*', - next: 'key' - }, { - token: 'string', - regex: '\\\\\\S[^\\s,;)}\\]]*' - }, { - token: 'string.doc', - regex: '\'\'\'', - next: 'qdoc' - }, { - token: 'string.doc', - regex: '"""', - next: 'qqdoc' - }, { - token: 'string', - regex: '\'', - next: 'qstring' - }, { - token: 'string', - regex: '"', - next: 'qqstring' - }, { - token: 'string', - regex: '`', - next: 'js' - }, { - token: 'string', - regex: '<\\[', - next: 'words' - }, { - token: 'string.regex', - regex: '//', - next: 'heregex' - }, { - token: 'string.regex', - regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', - next: 'key' - }, { - token: 'constant.numeric', - regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' - }, { - token: 'lparen', - regex: '[({[]' - }, { - token: 'rparen', - regex: '[)}\\]]', - next: 'key' - }, { - token: 'keyword.operator', - regex: '\\S+' - }, { - token: 'text', - regex: '\\s+' - }], - heregex: [{ - token: 'string.regex', - regex: '.*?//[gimy$?]{0,4}', - next: 'start' - }, { - token: 'string.regex', - regex: '\\s*#{' - }, { - token: 'comment.regex', - regex: '\\s+(?:#.*)?' - }, { - token: 'string.regex', - regex: '\\S+' - }], - key: [{ - token: 'keyword.operator', - regex: '[.?@!]+' - }, { - token: 'identifier', - regex: identifier, - next: 'start' - }, { - token: 'text', - regex: '.', - next: 'start' - }], - comment: [{ - token: 'comment.doc', - regex: '.*?\\*/', - next: 'start' - }, { - token: 'comment.doc', - regex: '.+' - }], - qdoc: [{ - token: 'string', - regex: ".*?'''", - next: 'key' - }, - stringfill], - qqdoc: [{ - token: 'string', - regex: '.*?"""', - next: 'key' - }, - stringfill], - qstring: [{ - token: 'string', - regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', - next: 'key' - }, - stringfill], - qqstring: [{ - token: 'string', - regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', - next: 'key' - }, - stringfill], - js: [{ - token: 'string', - regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', - next: 'key' - }, - stringfill], - words: [{ - token: 'string', - regex: '.*?\\]>', - next: 'key' - }, - stringfill] - }; - for (var idx in Rules) { - var r = Rules[idx]; - if (Array.isArray(r)) { - for (var i = 0, len = r.length; i < len; ++i) { - var rr = r[i]; - if (rr.regex) { - Rules[idx][i].regex = new RegExp('^' + rr.regex); - } - } - } else if (r.regex) { - Rules[idx].regex = new RegExp('^' + r.regex); - } - } - })(); - - CodeMirror.defineMIME('text/x-livescript', 'livescript'); - - LanguageManager.defineLanguage("livescript", { - name: "Livescript", - mode: "livescript", - fileExtensions: ["ls"], - blockComment: ["#","#"], - lineComment: ["//","//"] + name: "Livescript", + mode: "livescript", + fileExtensions: ["ls"], + blockComment: ["/*","*/"], + lineComment: ["#", "#"] }); }); \ No newline at end of file diff --git a/package.json b/package.json index e9fd633..75839ec 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,15 @@ { "name": "brackets-livescript", - "title": "Livescript Syntax for brackets", + "title": "LiveScript Syntax for brackets", "homepage": "https://github.com/devinceble/brackets-livescript", - "description": "Provides livescript syntax highlight via a CodeMirror mode for Brackets.", - "version": "0.0.2", + "description": "Provides LiveScript syntax highlight via a CodeMirror mode for Brackets.", + "version": "0.0.3", "author": "Leivince John Marte", + "contributors": ["Leivince John Marte", { + "name": "Gustavo Rodrigues", + "email": "qgustavor@gmail.com", + "url": "http://qgustavor.tk/" + }], "license": "MIT", "engines": { "brackets": ">=0.31.0"