import * as util from '../util';
const tokens = {
metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', boolOp: '\\?|\\!|\\^', string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", number: util.regex.number, meta: 'degree|indegree|outdegree', separator: '\\s*,\\s*', descendant: '\\s+',
child: '\\s+>\\s+',
subject: '\\$',
group: 'node|edge|\\*',
directedEdge: '\\s+->\\s+',
undirectedEdge: '\\s+<->\\s+'
};
tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; tokens.value = tokens.string + '|' + tokens.number; tokens.id = tokens.variable;
(function(){
let ops, op, i;
ops = tokens.comparatorOp.split( '|' );
for( i = 0; i < ops.length; i++ ){
op = ops[ i ];
tokens.comparatorOp += '|@' + op;
}
ops = tokens.comparatorOp.split( '|' );
for( i = 0; i < ops.length; i++ ){
op = ops[ i ];
if( op.indexOf( '!' ) >= 0 ){ continue; } if( op === '=' ){ continue; }
tokens.comparatorOp += '|\\!' + op;
}
})();
export default tokens;