mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Highlighter emits change events.
Changes to the buffer may cause lines beyond the scope of the textual change to be re-highlighted. If so so, this is reflected in the pre/post range of Highlighter's change events.
This commit is contained in:
@@ -16,7 +16,8 @@ class Highlighter
|
||||
@tokenizer = (new Mode).getTokenizer()
|
||||
|
||||
handleBufferChange: (e) ->
|
||||
{ preRange, postRange } = e
|
||||
preRange = e.preRange.copy()
|
||||
postRange = e.postRange.copy()
|
||||
|
||||
previousState = @lines[preRange.end.row].state
|
||||
newLines = @tokenizeRows('start', postRange.start.row, postRange.end.row)
|
||||
@@ -28,6 +29,13 @@ class Highlighter
|
||||
previousState = @lines[nextRow].state
|
||||
@lines[nextRow] = @tokenizeRow(@lines[row].state, nextRow)
|
||||
|
||||
preRange.end.row++
|
||||
preRange.end.column = @buffer.getLine(nextRow).length
|
||||
postRange.end.row++
|
||||
postRange.end.column = @buffer.getLine(nextRow).length
|
||||
|
||||
@trigger("change", {preRange, postRange})
|
||||
|
||||
tokenizeRows: (startState, startRow, endRow) ->
|
||||
state = startState
|
||||
for row in [startRow..endRow]
|
||||
@@ -41,3 +49,10 @@ class Highlighter
|
||||
tokensForRow: (row) ->
|
||||
@lines[row].tokens
|
||||
|
||||
on: (eventName, handler) ->
|
||||
@eventHandlers ?= {}
|
||||
@eventHandlers[eventName] ?= []
|
||||
@eventHandlers[eventName].push(handler)
|
||||
|
||||
trigger: (eventName, event) ->
|
||||
@eventHandlers?[eventName]?.forEach (handler) -> handler(event)
|
||||
|
||||
Reference in New Issue
Block a user