mirror of
https://github.com/atom/atom.git
synced 2026-02-09 14:15:24 -05:00
Store mode object in Buffer
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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) ->
|
||||
|
||||
Reference in New Issue
Block a user