Răsfoiți Sursa

Revert "Simplify package metadata check"

James Allen 8 ani în urmă
părinte
comite
0c86a7dc9b

+ 32 - 6
services/web/public/coffee/ide/editor/directives/aceEditor/metadata/MetadataManager.coffee

@@ -18,15 +18,41 @@ define [
 					return
 				if change.action not in ['remove', 'insert']
 					return
-
+				cursorPosition = @editor.getCursorPosition()
 				end = change.end
-				lineText = @editor.getSession().getLine end.row
+				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
 
-				# Defensive check against extremely long lines
-				return if lineText.length > 10000
+				lastCommandFragmentIsLabel = commandFragment?.slice(0, 7) == '\\label{'
+				lastCommandFragmentIsPackage = commandFragment?.slice(0, 11) == '\\usepackage'
+				lastCommandFragmentIsReqPack = commandFragment?.slice(0, 15) == '\\RequirePackage'
+				lastCommandFragmentIsMeta =
+					lastCommandFragmentIsPackage or
+					lastCommandFragmentIsLabel or
+					lastCommandFragmentIsReqPack
 
-				# Check if edited line contains metadata commands
-				if /\\(usepackage|RequirePackage|label)(\[.*])?({.*})?/.test(lineText)
+				if linesContainMeta or lastCommandFragmentIsMeta
 					@scheduleLoadCurrentDocMetaFromServer()
 
 			@editor.on "changeSession", (e) =>