cytoscape
Version:
Graph theory (a.k.a. network) library for analysis and visualisation
47 lines (39 loc) • 2.05 kB
JavaScript
import * as util from '../util';
// tokens in the query language
const tokens = {
metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', // chars we need to escape in let names, etc
comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', // binary comparison op (used in data selectors)
boolOp: '\\?|\\!|\\^', // boolean (unary) operators (used in data selectors)
string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", // string literals (used in data selectors) -- doublequotes | singlequotes
number: util.regex.number, // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123
meta: 'degree|indegree|outdegree', // allowed metadata fields (i.e. allowed functions to use from Collection)
separator: '\\s*,\\s*', // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass
descendant: '\\s+',
child: '\\s+>\\s+',
subject: '\\$',
group: 'node|edge|\\*',
directedEdge: '\\s+->\\s+',
undirectedEdge: '\\s+<->\\s+'
};
tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods
tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name
tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number
tokens.id = tokens.variable; // an element id (follows variable conventions)
(function(){
let ops, op, i;
// add @ variants to comparatorOp
ops = tokens.comparatorOp.split( '|' );
for( i = 0; i < ops.length; i++ ){
op = ops[ i ];
tokens.comparatorOp += '|@' + op;
}
// add ! variants to comparatorOp
ops = tokens.comparatorOp.split( '|' );
for( i = 0; i < ops.length; i++ ){
op = ops[ i ];
if( op.indexOf( '!' ) >= 0 ){ continue; } // skip ops that explicitly contain !
if( op === '=' ){ continue; } // skip = b/c != is explicitly defined
tokens.comparatorOp += '|\\!' + op;
}
})();
export default tokens;