|
@@ -18,41 +18,15 @@ define [
|
|
|
return
|
|
return
|
|
|
if change.action not in ['remove', 'insert']
|
|
if change.action not in ['remove', 'insert']
|
|
|
return
|
|
return
|
|
|
- cursorPosition = @editor.getCursorPosition()
|
|
|
|
|
- end = change.end
|
|
|
|
|
- range = new Range(end.row, 0, end.row, end.column)
|
|
|
|
|
- lineUpToCursor = @editor.getSession().getTextRange range
|
|
|
|
|
- if lineUpToCursor.trim() == '%' or lineUpToCursor.slice(0, 1) == '\\'
|
|
|
|
|
- range = new Range(end.row, 0, end.row, end.column + 80)
|
|
|
|
|
- lineUpToCursor = @editor.getSession().getTextRange range
|
|
|
|
|
- commandFragment = getLastCommandFragment lineUpToCursor
|
|
|
|
|
|
|
|
|
|
- linesContainPackage = _.any(
|
|
|
|
|
- change.lines,
|
|
|
|
|
- (line) -> line.match(/^\\usepackage(?:\[.{0,80}?])?{(.{0,80}?)}/)
|
|
|
|
|
- )
|
|
|
|
|
- linesContainReqPackage = _.any(
|
|
|
|
|
- change.lines,
|
|
|
|
|
- (line) -> line.match(/^\\RequirePackage(?:\[.{0,80}?])?{(.{0,80}?)}/)
|
|
|
|
|
- )
|
|
|
|
|
- linesContainLabel = _.any(
|
|
|
|
|
- change.lines,
|
|
|
|
|
- (line) -> line.match(/\\label{(.{0,80}?)}/)
|
|
|
|
|
- )
|
|
|
|
|
- linesContainMeta =
|
|
|
|
|
- linesContainPackage or
|
|
|
|
|
- linesContainLabel or
|
|
|
|
|
- linesContainReqPackage
|
|
|
|
|
|
|
+ end = change.end
|
|
|
|
|
+ lineText = @editor.getSession().getLine end.row
|
|
|
|
|
|
|
|
- lastCommandFragmentIsLabel = commandFragment?.slice(0, 7) == '\\label{'
|
|
|
|
|
- lastCommandFragmentIsPackage = commandFragment?.slice(0, 11) == '\\usepackage'
|
|
|
|
|
- lastCommandFragmentIsReqPack = commandFragment?.slice(0, 15) == '\\RequirePackage'
|
|
|
|
|
- lastCommandFragmentIsMeta =
|
|
|
|
|
- lastCommandFragmentIsPackage or
|
|
|
|
|
- lastCommandFragmentIsLabel or
|
|
|
|
|
- lastCommandFragmentIsReqPack
|
|
|
|
|
|
|
+ # Defensive check against extremely long lines
|
|
|
|
|
+ return if lineText.length > 10000
|
|
|
|
|
|
|
|
- if linesContainMeta or lastCommandFragmentIsMeta
|
|
|
|
|
|
|
+ # Check if edited line contains metadata commands
|
|
|
|
|
+ if /\\(usepackage|RequirePackage|label)(\[.*])?({.*})?/.test(lineText)
|
|
|
@scheduleLoadCurrentDocMetaFromServer()
|
|
@scheduleLoadCurrentDocMetaFromServer()
|
|
|
|
|
|
|
|
@editor.on "changeSession", (e) =>
|
|
@editor.on "changeSession", (e) =>
|