add heredoc support for sh mode
This commit is contained in:
parent
3b85ddfa05
commit
a52b30317b
1 changed files with 56 additions and 0 deletions
|
|
@ -99,6 +99,62 @@ var ShHighlightRules = function() {
|
|||
}, {
|
||||
defaultToken: "string"
|
||||
}]
|
||||
}, {
|
||||
stateName: "heredoc",
|
||||
onMatch : function(value, currentState, stack) {
|
||||
var next = value[2] == '-' ? "indentedHeredoc" : "heredoc";
|
||||
var tokens = value.split(this.splitRegex);
|
||||
stack.push(next, tokens[4]);
|
||||
return [
|
||||
{type:"constant", value: tokens[1]},
|
||||
{type:"text", value: tokens[2]},
|
||||
{type:"string", value: tokens[3]},
|
||||
{type:"support.class", value: tokens[4]},
|
||||
{type:"string", value: tokens[5]}
|
||||
];
|
||||
},
|
||||
regex : "(<<-?)(\\s*)(['\"`]?)([\\w\-]+)(['\"`]?)",
|
||||
rules: {
|
||||
heredoc: [{
|
||||
onMatch: function(value, currentState, stack) {
|
||||
if (value === stack[1]) {
|
||||
stack.shift();
|
||||
stack.shift();
|
||||
this.next = stack[0] || "start";
|
||||
return "support.class";
|
||||
}
|
||||
this.next = "";
|
||||
return "string";
|
||||
},
|
||||
regex: ".*$",
|
||||
next: "start"
|
||||
}],
|
||||
indentedHeredoc: [{
|
||||
token: "string",
|
||||
regex: "^ +"
|
||||
}, {
|
||||
onMatch: function(value, currentState, stack) {
|
||||
if (value === stack[1]) {
|
||||
stack.shift();
|
||||
stack.shift();
|
||||
this.next = stack[0] || "start";
|
||||
return "support.class";
|
||||
}
|
||||
this.next = "";
|
||||
return "string";
|
||||
},
|
||||
regex: ".*$",
|
||||
next: "start"
|
||||
}]
|
||||
}
|
||||
}, {
|
||||
regex : "$",
|
||||
token : "empty",
|
||||
next : function(currentState, stack) {
|
||||
if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc")
|
||||
return stack[0];
|
||||
return currentState;
|
||||
}
|
||||
}, {
|
||||
token : "variable.language",
|
||||
regex : builtinVariable
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue