add behaviours to demo and fix exceptions in cstyle behaviours
This commit is contained in:
parent
b8c0563d62
commit
77db0be7f8
3 changed files with 37 additions and 20 deletions
|
|
@ -245,6 +245,7 @@ exports.launch = function(env) {
|
||||||
var highlightSelectedWordE = document.getElementById("highlight_selected_word");
|
var highlightSelectedWordE = document.getElementById("highlight_selected_word");
|
||||||
var showHScrollEl = document.getElementById("show_hscroll");
|
var showHScrollEl = document.getElementById("show_hscroll");
|
||||||
var softTabEl = document.getElementById("soft_tab");
|
var softTabEl = document.getElementById("soft_tab");
|
||||||
|
var behavioursEl = document.getElementById("enable_behaviours");
|
||||||
|
|
||||||
bindDropdown("doc", function(value) {
|
bindDropdown("doc", function(value) {
|
||||||
var doc = docs[value];
|
var doc = docs[value];
|
||||||
|
|
@ -342,6 +343,7 @@ exports.launch = function(env) {
|
||||||
highlightSelectedWordE.checked = editor.getHighlightSelectedWord();
|
highlightSelectedWordE.checked = editor.getHighlightSelectedWord();
|
||||||
showHScrollEl.checked = editor.renderer.getHScrollBarAlwaysVisible();
|
showHScrollEl.checked = editor.renderer.getHScrollBarAlwaysVisible();
|
||||||
softTabEl.checked = session.getUseSoftTabs();
|
softTabEl.checked = session.getUseSoftTabs();
|
||||||
|
behavioursEl.checked = editor.getBehavioursEnabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
bindDropdown("mode", function(value) {
|
bindDropdown("mode", function(value) {
|
||||||
|
|
@ -418,6 +420,10 @@ exports.launch = function(env) {
|
||||||
env.editor.getSession().setUseSoftTabs(checked);
|
env.editor.getSession().setUseSoftTabs(checked);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
bindCheckbox("enable_behaviours", function(checked) {
|
||||||
|
env.editor.setBehavioursEnabled(checked);
|
||||||
|
});
|
||||||
|
|
||||||
var secondSession = null;
|
var secondSession = null;
|
||||||
bindDropdown("split", function(value) {
|
bindDropdown("split", function(value) {
|
||||||
var sp = env.split;
|
var sp = env.split;
|
||||||
|
|
|
||||||
13
index.html
13
index.html
|
|
@ -196,10 +196,19 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td >
|
<td >
|
||||||
<label for="highlight_selected_word">Highlight selected word</label>
|
<label for="highlight_selected_word">Highlight selected word</label>
|
||||||
</td><td>
|
</td>
|
||||||
|
<td>
|
||||||
<input type="checkbox" id="highlight_selected_word" checked>
|
<input type="checkbox" id="highlight_selected_word" checked>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="enable_behaviours">Enable Behaviours</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="enable_behaviours">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div id="editor">
|
<div id="editor">
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ var oop = require("pilot/oop");
|
||||||
var Behaviour = require('ace/mode/behaviour').Behaviour;
|
var Behaviour = require('ace/mode/behaviour').Behaviour;
|
||||||
|
|
||||||
var CstyleBehaviour = function () {
|
var CstyleBehaviour = function () {
|
||||||
|
|
||||||
this.add("braces", "insertion", function (state, action, editor, session, text) {
|
this.add("braces", "insertion", function (state, action, editor, session, text) {
|
||||||
if (text == '{') {
|
if (text == '{') {
|
||||||
var selection = editor.getSelectionRange();
|
var selection = editor.getSelectionRange();
|
||||||
|
|
@ -76,11 +76,13 @@ var CstyleBehaviour = function () {
|
||||||
var line = session.doc.getLine(cursor.row);
|
var line = session.doc.getLine(cursor.row);
|
||||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||||
if (rightChar == '}') {
|
if (rightChar == '}') {
|
||||||
var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column});
|
var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
|
||||||
|
if (!openBracePos)
|
||||||
|
return false;
|
||||||
|
|
||||||
var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
|
var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
|
||||||
var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
|
var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
text: '\n' + indent + '\n' + next_indent,
|
text: '\n' + indent + '\n' + next_indent,
|
||||||
selection: [1, indent.length, 1, indent.length]
|
selection: [1, indent.length, 1, indent.length]
|
||||||
|
|
@ -89,15 +91,15 @@ var CstyleBehaviour = function () {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.add("braces", "deletion", function (state, action, editor, session, range) {
|
this.add("braces", "deletion", function (state, action, editor, session, range) {
|
||||||
var selected = session.doc.getTextRange(range);
|
var selected = session.doc.getTextRange(range);
|
||||||
if (!range.isMultiLine() && selected == '{') {
|
if (!range.isMultiLine() && selected == '{') {
|
||||||
var line = session.doc.getLine(range.start.row);
|
var line = session.doc.getLine(range.start.row);
|
||||||
var rightChar = line.substring(range.end.column, range.end.column + 1);
|
var rightChar = line.substring(range.end.column, range.end.column + 1);
|
||||||
if (rightChar == '}') {
|
if (rightChar == '}') {
|
||||||
return new Range(range.start.row, range.start.column,
|
range.end.column++;
|
||||||
range.start.row, range.end.column + 1);
|
return range;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -134,15 +136,15 @@ var CstyleBehaviour = function () {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.add("parens", "deletion", function (state, action, editor, session, range) {
|
this.add("parens", "deletion", function (state, action, editor, session, range) {
|
||||||
var selected = session.doc.getTextRange(range);
|
var selected = session.doc.getTextRange(range);
|
||||||
if (!range.isMultiLine() && selected == '(') {
|
if (!range.isMultiLine() && selected == '(') {
|
||||||
var line = session.doc.getLine(range.start.row);
|
var line = session.doc.getLine(range.start.row);
|
||||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||||
if (rightChar == ')') {
|
if (rightChar == ')') {
|
||||||
return new Range(range.start.row, range.start.column,
|
range.end.column++;
|
||||||
range.start.row, range.end.column + 1);
|
return range;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -161,17 +163,17 @@ var CstyleBehaviour = function () {
|
||||||
var cursor = editor.getCursorPosition();
|
var cursor = editor.getCursorPosition();
|
||||||
var line = session.doc.getLine(cursor.row);
|
var line = session.doc.getLine(cursor.row);
|
||||||
var leftChar = line.substring(cursor.column-1, cursor.column);
|
var leftChar = line.substring(cursor.column-1, cursor.column);
|
||||||
|
|
||||||
// We're escaped.
|
// We're escaped.
|
||||||
if (leftChar == '\\') {
|
if (leftChar == '\\') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find what token we're inside.
|
// Find what token we're inside.
|
||||||
var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
|
var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
|
||||||
var col = 0, token;
|
var col = 0, token;
|
||||||
var quotepos = -1; // Track whether we're inside an open quote.
|
var quotepos = -1; // Track whether we're inside an open quote.
|
||||||
|
|
||||||
for (var x = 0; x < tokens.length; x++) {
|
for (var x = 0; x < tokens.length; x++) {
|
||||||
token = tokens[x];
|
token = tokens[x];
|
||||||
if (token.type == "string") {
|
if (token.type == "string") {
|
||||||
|
|
@ -184,7 +186,7 @@ var CstyleBehaviour = function () {
|
||||||
}
|
}
|
||||||
col += tokens[x].value.length;
|
col += tokens[x].value.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try and be smart about when we auto insert.
|
// Try and be smart about when we auto insert.
|
||||||
if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
|
if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
|
||||||
return {
|
return {
|
||||||
|
|
@ -205,20 +207,20 @@ var CstyleBehaviour = function () {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
|
this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
|
||||||
var selected = session.doc.getTextRange(range);
|
var selected = session.doc.getTextRange(range);
|
||||||
if (!range.isMultiLine() && selected == '"') {
|
if (!range.isMultiLine() && selected == '"') {
|
||||||
var line = session.doc.getLine(range.start.row);
|
var line = session.doc.getLine(range.start.row);
|
||||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||||
if (rightChar == '"') {
|
if (rightChar == '"') {
|
||||||
return new Range(range.start.row, range.start.column,
|
range.end.column++;
|
||||||
range.start.row, range.end.column + 1);
|
return range;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
oop.inherits(CstyleBehaviour, Behaviour);
|
oop.inherits(CstyleBehaviour, Behaviour);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue