Store mode object in Buffer

This commit is contained in:
Corey Johnson & Nathan Sobo
2012-03-05 15:05:49 -08:00
parent 98defa865c
commit aff3d308ad
2 changed files with 8 additions and 9 deletions

View File

@@ -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)

View File

@@ -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) ->