From aff3d308ad49dbe4845b105576c9d9ef1907c05e Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Mon, 5 Mar 2012 15:05:49 -0800 Subject: [PATCH] Store mode object in Buffer --- src/atom/buffer.coffee | 8 ++++++-- src/atom/highlighter.coffee | 9 ++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/atom/buffer.coffee b/src/atom/buffer.coffee index ecf6ecfa3..ea9d961c4 100644 --- a/src/atom/buffer.coffee +++ b/src/atom/buffer.coffee @@ -91,9 +91,10 @@ class Buffer if not @path then throw new Error("Tried to save buffer with no url") fs.write @path, @getText() - modeName: -> + getMode: -> + return @mode if @mode extension = if @path then @path.split('/').pop().split('.').pop() else null - switch extension + modeName = switch extension when 'js' then 'javascript' when 'coffee' then 'coffee' when 'rb', 'ru' then 'ruby' @@ -102,4 +103,7 @@ class Buffer when 'css' then 'css' else 'text' + @mode = new (require("ace/mode/#{modeName}").Mode) + + _.extend(Buffer.prototype, EventEmitter) diff --git a/src/atom/highlighter.coffee b/src/atom/highlighter.coffee index 494d3391f..e1f466a67 100644 --- a/src/atom/highlighter.coffee +++ b/src/atom/highlighter.coffee @@ -5,18 +5,12 @@ EventEmitter = require 'event-emitter' module.exports = class Highlighter buffer: null - tokenizer: null screenLines: [] constructor: (@buffer) -> - @buildTokenizer() @screenLines = @buildLinesForScreenRows('start', 0, @buffer.lastRow()) @buffer.on 'change', (e) => @handleBufferChange(e) - buildTokenizer: -> - Mode = require("ace/mode/#{@buffer.modeName()}").Mode - @tokenizer = (new Mode).getTokenizer() - handleBufferChange: (e) -> oldRange = e.oldRange.copy() newRange = e.newRange.copy() @@ -56,8 +50,9 @@ class Highlighter screenLine buildLineForScreenRow: (state, row) -> + tokenizer = @buffer.getMode().getTokenizer() line = @buffer.getLine(row) - {tokens, state} = @tokenizer.getLineTokens(line, state) + {tokens, state} = tokenizer.getLineTokens(line, state) new ScreenLineFragment(tokens, line, [1, 0], [1, 0], { state }) lineForScreenRow: (row) ->