2017-06-26 14:55:22 +02:00
|
|
|
ace.define("ace/mode/jsonata",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/worker/worker_client","ace/mode/text"], function(require, exports, module) {
|
2016-11-16 00:22:25 +01:00
|
|
|
|
2016-11-15 01:19:04 +01:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var oop = require("../lib/oop");
|
|
|
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
2016-11-16 00:22:25 +01:00
|
|
|
|
2016-11-15 01:19:04 +01:00
|
|
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
2016-11-24 00:15:30 +01:00
|
|
|
var jsonataFunctions = Object.keys(jsonata.functions);
|
|
|
|
// sort in length order (long->short) otherwise substringAfter gets matched
|
|
|
|
// as substring etc.
|
|
|
|
jsonataFunctions.sort(function(A,B) {
|
|
|
|
return B.length-A.length;
|
|
|
|
});
|
|
|
|
jsonataFunctions = jsonataFunctions.join("|").replace(/\$/g,"\\$");
|
2016-11-15 01:19:04 +01:00
|
|
|
|
|
|
|
var JSONataHighlightRules = function() {
|
|
|
|
|
|
|
|
var keywordMapper = this.createKeywordMapper({
|
|
|
|
"keyword.operator":
|
2017-03-12 23:02:58 +01:00
|
|
|
"and|or|in",
|
2016-11-15 01:19:04 +01:00
|
|
|
"constant.language":
|
2017-03-12 23:02:58 +01:00
|
|
|
"null|Infinity|NaN|undefined",
|
2016-11-16 00:22:25 +01:00
|
|
|
"constant.language.boolean":
|
2017-03-12 23:02:58 +01:00
|
|
|
"true|false",
|
2016-11-15 01:19:04 +01:00
|
|
|
"storage.type":
|
2017-03-12 23:02:58 +01:00
|
|
|
"function"
|
2016-11-15 01:19:04 +01:00
|
|
|
}, "identifier");
|
|
|
|
this.$rules = {
|
|
|
|
"start" : [
|
|
|
|
{
|
|
|
|
token : "string",
|
|
|
|
regex : "'(?=.)",
|
|
|
|
next : "qstring"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "string",
|
|
|
|
regex : '"(?=.)',
|
|
|
|
next : "qqstring"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "constant.numeric", // hex
|
|
|
|
regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "constant.numeric", // float
|
|
|
|
regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/
|
|
|
|
},
|
|
|
|
{ token: "keyword",
|
2017-03-12 23:02:58 +01:00
|
|
|
regex: /λ/
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token: "keyword",
|
|
|
|
regex: jsonataFunctions
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : keywordMapper,
|
|
|
|
regex : "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "punctuation.operator",
|
|
|
|
regex : /[.](?![.])/
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "keyword.operator",
|
|
|
|
regex : /\|\||<=|>=|\.\.|\*\*|!=|:=|[=<>`!$%&*+\-~\/^]/,
|
|
|
|
next : "start"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "punctuation.operator",
|
|
|
|
regex : /[?:,;.]/,
|
|
|
|
next : "start"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "paren.lparen",
|
|
|
|
regex : /[\[({]/,
|
2016-11-15 01:19:04 +01:00
|
|
|
next : "start"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
token : "paren.rparen",
|
|
|
|
regex : /[\])}]/
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"qqstring" : [
|
|
|
|
{
|
|
|
|
token : "string",
|
|
|
|
regex : '"|$',
|
|
|
|
next : "start"
|
|
|
|
}, {
|
|
|
|
defaultToken: "string"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"qstring" : [
|
|
|
|
{
|
|
|
|
token : "string",
|
|
|
|
regex : "'|$",
|
|
|
|
next : "start"
|
|
|
|
}, {
|
|
|
|
defaultToken: "string"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
oop.inherits(JSONataHighlightRules, TextHighlightRules);
|
|
|
|
|
|
|
|
var TextMode = require("./text").Mode;
|
|
|
|
var Mode = function() {
|
|
|
|
this.HighlightRules = JSONataHighlightRules;
|
|
|
|
};
|
|
|
|
oop.inherits(Mode, TextMode);
|
|
|
|
|
|
|
|
|
|
|
|
(function() {
|
|
|
|
this.createWorker = function(session) {
|
|
|
|
var worker = new WorkerClient(["ace"], "ace/mode/jsonata_worker", "JSONataWorker");
|
|
|
|
worker.attachToDocument(session.getDocument());
|
|
|
|
|
|
|
|
worker.on("annotate", function(e) {
|
|
|
|
session.setAnnotations(e.data);
|
|
|
|
});
|
|
|
|
|
|
|
|
worker.on("terminate", function() {
|
|
|
|
session.clearAnnotations();
|
|
|
|
});
|
|
|
|
|
|
|
|
return worker;
|
|
|
|
};
|
|
|
|
this.$id = "ace/mode/jsonata";
|
|
|
|
}).call(Mode.prototype);
|
|
|
|
|
|
|
|
exports.Mode = Mode;
|
|
|
|
|
|
|
|
});
|