From 77db0be7f8139eaa17abd8acac7f79c338502c14 Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 25 Jul 2011 01:47:18 +0500 Subject: [PATCH] add behaviours to demo and fix exceptions in cstyle behaviours --- demo/demo.js | 6 +++++ index.html | 13 +++++++++-- lib/ace/mode/behaviour/cstyle.js | 38 +++++++++++++++++--------------- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/demo/demo.js b/demo/demo.js index 991140ea..53f4d626 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -245,6 +245,7 @@ exports.launch = function(env) { var highlightSelectedWordE = document.getElementById("highlight_selected_word"); var showHScrollEl = document.getElementById("show_hscroll"); var softTabEl = document.getElementById("soft_tab"); + var behavioursEl = document.getElementById("enable_behaviours"); bindDropdown("doc", function(value) { var doc = docs[value]; @@ -342,6 +343,7 @@ exports.launch = function(env) { highlightSelectedWordE.checked = editor.getHighlightSelectedWord(); showHScrollEl.checked = editor.renderer.getHScrollBarAlwaysVisible(); softTabEl.checked = session.getUseSoftTabs(); + behavioursEl.checked = editor.getBehavioursEnabled() } bindDropdown("mode", function(value) { @@ -418,6 +420,10 @@ exports.launch = function(env) { env.editor.getSession().setUseSoftTabs(checked); }); + bindCheckbox("enable_behaviours", function(checked) { + env.editor.setBehavioursEnabled(checked); + }); + var secondSession = null; bindDropdown("split", function(value) { var sp = env.split; diff --git a/index.html b/index.html index c064d942..3b9d8298 100644 --- a/index.html +++ b/index.html @@ -196,10 +196,19 @@ - + + - + + + + + + + + +
diff --git a/lib/ace/mode/behaviour/cstyle.js b/lib/ace/mode/behaviour/cstyle.js index a85f796b..bfa14273 100644 --- a/lib/ace/mode/behaviour/cstyle.js +++ b/lib/ace/mode/behaviour/cstyle.js @@ -42,7 +42,7 @@ var oop = require("pilot/oop"); var Behaviour = require('ace/mode/behaviour').Behaviour; var CstyleBehaviour = function () { - + this.add("braces", "insertion", function (state, action, editor, session, text) { if (text == '{') { var selection = editor.getSelectionRange(); @@ -76,11 +76,13 @@ var CstyleBehaviour = function () { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); 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 next_indent = this.$getIndent(session.doc.getLine(openBracePos.row)); - + return { text: '\n' + indent + '\n' + next_indent, selection: [1, indent.length, 1, indent.length] @@ -89,15 +91,15 @@ var CstyleBehaviour = function () { } return false; }); - + this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { - return new Range(range.start.row, range.start.column, - range.start.row, range.end.column + 1); + range.end.column++; + return range; } } return false; @@ -134,15 +136,15 @@ var CstyleBehaviour = function () { } return false; }); - + this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { - return new Range(range.start.row, range.start.column, - range.start.row, range.end.column + 1); + range.end.column++; + return range; } } return false; @@ -161,17 +163,17 @@ var CstyleBehaviour = function () { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); - + // We're escaped. if (leftChar == '\\') { return false; } - + // Find what token we're inside. var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens; var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. - + for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { @@ -184,7 +186,7 @@ var CstyleBehaviour = function () { } col += tokens[x].value.length; } - + // 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)))) { return { @@ -205,20 +207,20 @@ var CstyleBehaviour = function () { } return false; }); - + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '"') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == '"') { - return new Range(range.start.row, range.start.column, - range.start.row, range.end.column + 1); + range.end.column++; + return range; } } return false; }); - + } oop.inherits(CstyleBehaviour, Behaviour);