mirror of
https://github.com/JKorf/CryptoExchange.Net.git
synced 2026-08-22 22:02:59 +00:00
+148
@@ -0,0 +1,148 @@
|
||||
import { inherit } from './utils';
|
||||
import * as regex from './regex';
|
||||
|
||||
// Common regexps
|
||||
export const IDENT_RE = '[a-zA-Z]\\w*';
|
||||
export const UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*';
|
||||
export const NUMBER_RE = '\\b\\d+(\\.\\d+)?';
|
||||
export const C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
|
||||
export const BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
|
||||
export const RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
|
||||
|
||||
export const SHEBANG = (opts = {}) => {
|
||||
const beginShebang = /^#![ ]*\//;
|
||||
if (opts.binary) {
|
||||
opts.begin = regex.concat(
|
||||
beginShebang,
|
||||
/.*\b/,
|
||||
opts.binary,
|
||||
/\b.*/);
|
||||
}
|
||||
return inherit({
|
||||
className: 'meta',
|
||||
begin: beginShebang,
|
||||
end: /$/,
|
||||
relevance: 0,
|
||||
"on:begin": (m, resp) => {
|
||||
if (m.index !== 0) resp.ignoreMatch();
|
||||
}
|
||||
}, opts);
|
||||
};
|
||||
|
||||
// Common modes
|
||||
export const BACKSLASH_ESCAPE = {
|
||||
begin: '\\\\[\\s\\S]', relevance: 0
|
||||
};
|
||||
export const APOS_STRING_MODE = {
|
||||
className: 'string',
|
||||
begin: '\'',
|
||||
end: '\'',
|
||||
illegal: '\\n',
|
||||
contains: [BACKSLASH_ESCAPE]
|
||||
};
|
||||
export const QUOTE_STRING_MODE = {
|
||||
className: 'string',
|
||||
begin: '"',
|
||||
end: '"',
|
||||
illegal: '\\n',
|
||||
contains: [BACKSLASH_ESCAPE]
|
||||
};
|
||||
export const PHRASAL_WORDS_MODE = {
|
||||
begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
|
||||
};
|
||||
export const COMMENT = function(begin, end, inherits) {
|
||||
var mode = inherit(
|
||||
{
|
||||
className: 'comment',
|
||||
begin: begin,
|
||||
end: end,
|
||||
contains: []
|
||||
},
|
||||
inherits || {}
|
||||
);
|
||||
mode.contains.push(PHRASAL_WORDS_MODE);
|
||||
mode.contains.push({
|
||||
className: 'doctag',
|
||||
begin: '(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
|
||||
relevance: 0
|
||||
});
|
||||
return mode;
|
||||
};
|
||||
export const C_LINE_COMMENT_MODE = COMMENT('//', '$');
|
||||
export const C_BLOCK_COMMENT_MODE = COMMENT('/\\*', '\\*/');
|
||||
export const HASH_COMMENT_MODE = COMMENT('#', '$');
|
||||
export const NUMBER_MODE = {
|
||||
className: 'number',
|
||||
begin: NUMBER_RE,
|
||||
relevance: 0
|
||||
};
|
||||
export const C_NUMBER_MODE = {
|
||||
className: 'number',
|
||||
begin: C_NUMBER_RE,
|
||||
relevance: 0
|
||||
};
|
||||
export const BINARY_NUMBER_MODE = {
|
||||
className: 'number',
|
||||
begin: BINARY_NUMBER_RE,
|
||||
relevance: 0
|
||||
};
|
||||
export const CSS_NUMBER_MODE = {
|
||||
className: 'number',
|
||||
begin: NUMBER_RE + '(' +
|
||||
'%|em|ex|ch|rem' +
|
||||
'|vw|vh|vmin|vmax' +
|
||||
'|cm|mm|in|pt|pc|px' +
|
||||
'|deg|grad|rad|turn' +
|
||||
'|s|ms' +
|
||||
'|Hz|kHz' +
|
||||
'|dpi|dpcm|dppx' +
|
||||
')?',
|
||||
relevance: 0
|
||||
};
|
||||
export const REGEXP_MODE = {
|
||||
// this outer rule makes sure we actually have a WHOLE regex and not simply
|
||||
// an expression such as:
|
||||
//
|
||||
// 3 / something
|
||||
//
|
||||
// (which will then blow up when regex's `illegal` sees the newline)
|
||||
begin: /(?=\/[^/\n]*\/)/,
|
||||
contains: [{
|
||||
className: 'regexp',
|
||||
begin: /\//,
|
||||
end: /\/[gimuy]*/,
|
||||
illegal: /\n/,
|
||||
contains: [
|
||||
BACKSLASH_ESCAPE,
|
||||
{
|
||||
begin: /\[/,
|
||||
end: /\]/,
|
||||
relevance: 0,
|
||||
contains: [BACKSLASH_ESCAPE]
|
||||
}
|
||||
]
|
||||
}]
|
||||
};
|
||||
export const TITLE_MODE = {
|
||||
className: 'title',
|
||||
begin: IDENT_RE,
|
||||
relevance: 0
|
||||
};
|
||||
export const UNDERSCORE_TITLE_MODE = {
|
||||
className: 'title',
|
||||
begin: UNDERSCORE_IDENT_RE,
|
||||
relevance: 0
|
||||
};
|
||||
export const METHOD_GUARD = {
|
||||
// excludes method names from keyword processing
|
||||
begin: '\\.\\s*' + UNDERSCORE_IDENT_RE,
|
||||
relevance: 0
|
||||
};
|
||||
|
||||
export const END_SAME_AS_BEGIN = function(mode) {
|
||||
return Object.assign(mode,
|
||||
{
|
||||
'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },
|
||||
'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch() }
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user