From fe07e45ebc0ebfaba890cfc49b11183fee1462d1 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Tue, 6 Mar 2012 16:16:49 -0800 Subject: [PATCH] Refactor Ace specific code into its own adapter class. --- src/atom/ace-outdent-adaptor.coffee | 18 +++++++++++++++ src/atom/buffer.coffee | 10 --------- src/atom/editor.coffee | 34 ++++++++++++++++------------- 3 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 src/atom/ace-outdent-adaptor.coffee diff --git a/src/atom/ace-outdent-adaptor.coffee b/src/atom/ace-outdent-adaptor.coffee new file mode 100644 index 000000000..058ba8fbe --- /dev/null +++ b/src/atom/ace-outdent-adaptor.coffee @@ -0,0 +1,18 @@ +Range = require 'range' + +module.exports = +class AceOutdentAdaptor + constructor: (@buffer) -> + + getLine: (row) -> + @buffer.getLine(row) + + # We don't care where the bracket is; we always outdent one level + findMatchingBracket: ({row, column}) -> + {row: 0, column: 0} + + # Does not actually replace text, just line at range.start outdents one level + replace: (range, text) -> + start = range.start + end = {row: range.start.row, column: range.start.column + atom.tabText.length} + @buffer.change(new Range(start, end), "") diff --git a/src/atom/buffer.coffee b/src/atom/buffer.coffee index 1e94010cc..ee56034c7 100644 --- a/src/atom/buffer.coffee +++ b/src/atom/buffer.coffee @@ -105,14 +105,4 @@ class Buffer @mode = new (require("ace/mode/#{modeName}").Mode) - # API to match Ace's Document class - findMatchingBracket: ({row, column}) -> - {row: 0, column: 0} - - replace:(range, text) -> - # Only used to outdent lines - start = range.start - end = {row: range.start.row, column: range.start.column + atom.tabText.length} - @change(new Range(start, end), "") - _.extend(Buffer.prototype, EventEmitter) diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index 850ec3b99..13bb6896f 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -1,4 +1,5 @@ {View, $$} = require 'space-pen' +AceOutdentAdaptor = require 'ace-outdent-adaptor' Buffer = require 'buffer' Point = require 'point' Cursor = require 'cursor' @@ -33,7 +34,6 @@ class Editor extends View undoManager: null autoIndent: null - initialize: () -> requireStylesheet 'editor.css' requireStylesheet 'theme/twilight.css' @@ -304,23 +304,27 @@ class Editor extends View @selection.selectToBufferPosition(position) insertText: (text) -> - unless @autoIndent - @selection.insertText(text) - return - - state = @lineWrapper.lineForScreenRow(@getCursorRow()).state - shouldOutdent = false - - if text[0] == "\n" - indent = @buffer.mode.getNextLineIndent(state, @getCurrentLine(), atom.tabText) - text = text[0] + indent + text[1..] - else if @buffer.mode.checkOutdent(state, @getCurrentLine(), text) - shouldOutdent = true + { text, shouldOutdent } = @autoIndentText(text) @selection.insertText(text) - if shouldOutdent - @buffer.mode.autoOutdent(state, @buffer, @getCursorRow()) + @autoOutdentText() if shouldOutdent + + autoIndentText: (text) -> + if @autoIndent + state = @lineWrapper.lineForScreenRow(@getCursorRow()).state + + if text[0] == "\n" + indent = @buffer.mode.getNextLineIndent(state, @getCurrentLine(), atom.tabText) + text = text[0] + indent + text[1..] + else if @buffer.mode.checkOutdent(state, @getCurrentLine(), text) + shouldOutdent = true + + {text, shouldOutdent} + + autoOutdentText: -> + state = @lineWrapper.lineForScreenRow(@getCursorRow()).state + @buffer.mode.autoOutdent(state, new AceOutdentAdaptor(@buffer), @getCursorRow()) cutSelection: -> @selection.cut() copySelection: -> @selection.copy()