##// END OF EJS Templates
Update LICENSE.md to include license information about Codemirror 3.15...
Update LICENSE.md to include license information about Codemirror 3.15 Add information to the LICENSE.md file to include the information provided in the codemirror-3.15/LICENSE file. Also, note that other license and copyright information also appears in .../public/js/mode/ sub-directories.

File last commit:

r4026:a60a0e90 default
r4121:8c543e37 rhodecode-2.2.5-gpl
Show More
livescript.ls
266 lines | 6.0 KiB | text/x-livescript | LiveScriptLexer
/**
* Link to the project's GitHub page:
* https://github.com/duralog/CodeMirror
*/
CodeMirror.defineMode 'livescript', (conf) ->
tokenBase = (stream, state) ->
#indent =
if next_rule = state.next or \start
state.next = state.next
if Array.isArray nr = Rules[next_rule]
for r in nr
if r.regex and 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 and stream.match r.regex
state.next = r.next
return r.token
else
stream.next!
return \error
stream.next!
return 'error'
external = {
startState: (basecolumn) ->
{
next: \start
lastToken: null
}
token: (stream, state) ->
style = tokenBase stream, state #tokenLexer stream, state
state.lastToken = {
style: style
indent: stream.indentation!
content: stream.current!
}
style.replace /\./g, ' '
indent: (state, textAfter) ->
# XXX this won't work with backcalls
indentation = state.lastToken.indent
if state.lastToken.content.match indenter then indentation += 2
return indentation
}
external
### Highlight Rules
# taken from mode-ls.ls
indenter = // (?
: [({[=:]
| [-~]>
| \b (?: e(?:lse|xport) | d(?:o|efault) | t(?:ry|hen) | finally |
import (?:\s* all)? | const | var |
let | new | catch (?:\s* #identifier)? )
) \s* $ //
identifier = /(?![\d\s])[$\w\xAA-\uFFDC](?:(?!\s)[$\w\xAA-\uFFDC]|-[A-Za-z])*/$
keywordend = /(?![$\w]|-[A-Za-z]|\s*:(?![:=]))/$
stringfill = token: \string, regex: '.+'
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 optimization, precompile the regexps
for idx, r of Rules
if Array.isArray r
for rr, i in r
if rr.regex then Rules[idx][i].regex = new RegExp '^'+rr.regex
else if r.regex then Rules[idx].regex = new RegExp '^'+r.regex
CodeMirror.defineMIME 'text/x-livescript', 'livescript'