From e12ff69a4e79d1fafdbbe536e3e8c8bf613c1ba6 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Tue, 18 May 2010 17:59:19 +0200 Subject: [PATCH] Autoindent for XML and HTML modes --- src/ace/mode/Html.js | 3 ++- src/ace/mode/Xml.js | 8 ++++++++ src/test/ace/mode/HtmlTest.js | 20 ++++++++++++++++++++ src/test/ace/mode/XmlTest.js | 6 ++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/test/ace/mode/HtmlTest.js diff --git a/src/ace/mode/Html.js b/src/ace/mode/Html.js index cbac2e2f..26d6ce84 100644 --- a/src/ace/mode/Html.js +++ b/src/ace/mode/Html.js @@ -17,8 +17,9 @@ ace.inherits(ace.mode.Html, ace.mode.Text); }; this.getNextLineIndent = function(state, line, tab) { + var self = this; return this.$delegate("getNextLineIndent", arguments, function() { - return ""; + return self.$getIndent(line); }); }; diff --git a/src/ace/mode/Xml.js b/src/ace/mode/Xml.js index dbef442c..a1097edf 100644 --- a/src/ace/mode/Xml.js +++ b/src/ace/mode/Xml.js @@ -4,3 +4,11 @@ ace.mode.Xml = function() { this.$tokenizer = new ace.Tokenizer(new ace.mode.XmlHighlightRules().getRules()); }; ace.inherits(ace.mode.Xml, ace.mode.Text); + +(function() { + + this.getNextLineIndent = function(state, line, tab) { + return this.$getIndent(line); + }; + +}).call(ace.mode.Xml.prototype); \ No newline at end of file diff --git a/src/test/ace/mode/HtmlTest.js b/src/test/ace/mode/HtmlTest.js new file mode 100644 index 00000000..9b6041e9 --- /dev/null +++ b/src/test/ace/mode/HtmlTest.js @@ -0,0 +1,20 @@ +var HtmlTest = new TestCase("mode.HtmlTest", { + + setUp : function() { + this.mode = new ace.mode.Html(); + }, + + "test: toggle comment lines should not do anything" : function() { + var doc = new ace.Document([" abc", "cde", "fg"]); + + var range = new ace.Range(0, 3, 1, 1); + var comment = this.mode.toggleCommentLines("start", doc, range); + assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString()); + }, + + "test: next line indent should be the same as the current line indent" : function() { + assertEquals(" ", this.mode.getNextLineIndent("start", " abc")); + assertEquals("", this.mode.getNextLineIndent("start", "abc")); + assertEquals("\t", this.mode.getNextLineIndent("start", "\tabc")); + } +}); \ No newline at end of file diff --git a/src/test/ace/mode/XmlTest.js b/src/test/ace/mode/XmlTest.js index eccb727b..dc8143d3 100644 --- a/src/test/ace/mode/XmlTest.js +++ b/src/test/ace/mode/XmlTest.js @@ -19,5 +19,11 @@ var XmlTest = new TestCase("mode.XmlTest", { var range = new ace.Range(0, 3, 1, 1); var comment = this.mode.toggleCommentLines("start", doc, range); assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString()); + }, + + "test: next line indent should be the same as the current line indent" : function() { + assertEquals(" ", this.mode.getNextLineIndent("start", " abc")); + assertEquals("", this.mode.getNextLineIndent("start", "abc")); + assertEquals("\t", this.mode.getNextLineIndent("start", "\tabc")); } }); \ No newline at end of file