32 lines
1.0 KiB
Plaintext
32 lines
1.0 KiB
Plaintext
# @title CoffeeScript
|
|
# @matchext coffee
|
|
# @matchprogram coffee
|
|
|
|
# CoffeeScript lang definition file
|
|
|
|
# first check if the input matches a comment
|
|
include "script_comment.lang"
|
|
|
|
keyword =
|
|
"true|false|null|this|new|delete|typeof|in|instanceof|return|throw|break|continue|debugger|if|else|switch|for|while|do|try|catch|finally|class|extends|super|undefined|then|unless|until|loop|of|by|when|and|or|is|isnt|not|yes|no|on|off"
|
|
|
|
# next check if it matches a division operator, which can occur only
|
|
# after a number, an identifier, or certain symbols
|
|
(symbol,normal,symbol) = `(\+\+|--|\)|\])(\s*)(/=?(?![*/]))`
|
|
(number,normal,symbol) =
|
|
`(0x[[:xdigit:]]+|(?:[[:digit:]]*\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?)(\s*)(/(?![*/]))`
|
|
(normal,symbol) = `([[:alpha:]$_][[:alnum:]$_]*\s*)(/=?(?![*/]))`
|
|
|
|
# finally check if it matches a regular expression
|
|
regexp = '/(\\.|[^*\\/])(\\.|[^\\/])*/[gim]*'
|
|
|
|
comment delim '(^\###)' '^(\###)' multiline
|
|
|
|
include "number.lang"
|
|
|
|
include "c_string.lang"
|
|
|
|
include "symbols.lang"
|
|
|
|
include "function.lang"
|