fluentd-ui/app/assets/javascripts/codemirror_fluentd.js
2015-01-22 15:04:34 +09:00

60 lines
1.6 KiB
JavaScript

// See: http://codemirror.net/doc/manual.html#modeapi
// and sample mode files: https://github.com/codemirror/CodeMirror/tree/master/mode
CodeMirror.defineMode('fluentd', function(){
return {
startState: function(aa){
return { "context" : null };
},
token: function(stream, state){
if(stream.eatWhile(/[ \t]/)){
// ignore indenting spaces
stream.skipTo(stream.peek());
return;
}
if(stream.eol()){
// reached end of line
return;
}
switch(stream.peek()){
case "#":
stream.skipToEnd();
return "comment";
break;
case "<":
state.context = "inner-bracket";
stream.pos += 1;
return "keyword";
break;
case ">":
stream.pos += 1;
state.context = "inner-definition";
return "keyword";
break;
default:
switch(state.context){
case "inner-bracket":
stream.eat(/[^#<>]+/);
return "keyword";
break;
case "inner-definition":
var key = stream.eatWhile(/[^ \t#]/);
state.context = "inner-definition-keyword-appeared";
return "variable";
break;
case "inner-definition-keyword-appeared":
var key = stream.eatWhile(/[^#]/);
state.context = "inner-definition";
return "builtin";
break;
default:
stream.eat(/[^<>#]+/);
return "string";
}
}
}
};
});