blob: 861a5077d5297bd2b6b9ea2c7fa2ba114722759c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
CodeMirror.defineMode("aql", function() {
var KEYWORD_MATCH = ["return","select","for","from","at","in","let","with","where","order","by","asc","desc","group",
"keeping","limit","offset","distinct","dataset","or","and"];
var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
var DOT_MATCH = /[.](\S)*/;
var DOUBLE_QUOTE_MATCH = /["].*["]/;
var SINGLE_QUOTE_MATCH = /['].*[']/;
var BREAK_POINT = /(\s)/;
return {
startState: function() {return {inString: false};},
token: function(stream, state) {
if (state.newLine == undefined)state.newLine = true;
//match variable reference
if (stream.match(VAR_MATCH)) {
return "variable-2";
}
if (stream.match(DOT_MATCH)) {
return "variable-3";
}
//string variable match
if (stream.match(DOUBLE_QUOTE_MATCH)) {
return "string";
}
if (stream.match(SINGLE_QUOTE_MATCH)) {
return "string";
}
//keyword match
for (i in KEYWORD_MATCH){
if (state.newLine && stream.match(KEYWORD_MATCH[i])){
return "keyword";
}
}
if (stream.peek() === " " || stream.peek() === null){
state.newLine = true;
}else{
state.newLine = false;
}
stream.next();
}
};
});