view src/qscintilla-3-matlab-block-comment.patch @ 4340:c202df909032

sqcintilla: add patch for proper matlab block comment detection (Bug #50060) * src/qscintilla-3-matlab-block-comment.patch: new patc file * dist-files.mk: added qscintilla-3-matlab-block-comment.patch
author John D
date Thu, 19 Jan 2017 07:57:27 -0500
parents
children
line wrap: on
line source

diff -ur QScintilla_gpl-2.9.3.orig/lexers/LexMatlab.cpp QScintilla_gpl-2.9.3/lexers/LexMatlab.cpp
--- QScintilla_gpl-2.9.3.orig/lexers/LexMatlab.cpp	2017-01-18 08:06:39.577378613 -0500
+++ QScintilla_gpl-2.9.3/lexers/LexMatlab.cpp	2017-01-18 08:21:30.775353161 -0500
@@ -71,6 +71,16 @@
 		return -1;
 	return 0;
 }
+
+static bool IsSpaceToEOL(unsigned int startPos, Accessor &styler) {
+        int line = styler.GetLine(startPos);
+	unsigned int eol_pos = styler.LineStart(line + 1) - 1;
+	for (unsigned int i = startPos; i < eol_pos; i++) {
+		char ch = styler[i];
+		if(!IsASpace(ch)) return false;
+	}
+	return true;
+}
  
 static void ColouriseMatlabOctaveDoc(
             unsigned int startPos, int length, int initStyle,
@@ -178,7 +188,7 @@
 			}
 		} else if (sc.state == SCE_MATLAB_COMMENT) {
 			// end or start of a nested a block comment?
-			if( IsCommentChar(sc.ch) && sc.chNext == '}' && nonSpaceColumn == column) {
+			if( IsCommentChar(sc.ch) && sc.chNext == '}' && nonSpaceColumn == column && IsSpaceToEOL(sc.currentPos+2, styler)) {
                            	if(commentDepth > 0) commentDepth --;
  
 				curLine = styler.GetLine(sc.currentPos);
@@ -190,7 +200,7 @@
 					transpose = false;
 				}
                         }
-                        else if( IsCommentChar(sc.ch) && sc.chNext == '{' && nonSpaceColumn == column)
+                        else if( IsCommentChar(sc.ch) && sc.chNext == '{' && nonSpaceColumn == column && IsSpaceToEOL(sc.currentPos+2, styler))
                         {
  				commentDepth ++;
 
@@ -211,9 +221,12 @@
 		// check start of a new state
 		if (sc.state == SCE_MATLAB_DEFAULT) {
 			if (IsCommentChar(sc.ch)) {
-				// ncrement depth if we are a block comment
-				if(sc.chNext == '{' && nonSpaceColumn == column)
-					commentDepth ++;
+				// Increment depth if we are a block comment
+				if(sc.chNext == '{' && nonSpaceColumn == column) {
+					if(IsSpaceToEOL(sc.currentPos+2, styler)) {
+						commentDepth ++;
+					}
+				}
 				curLine = styler.GetLine(sc.currentPos);
 				styler.SetLineState(curLine, commentDepth);
 				sc.SetState(SCE_MATLAB_COMMENT);
@@ -287,9 +300,9 @@
 		// a line that starts with a comment
 		if (style == SCE_MATLAB_COMMENT && IsComment(ch) && visibleChars == 0) {
 			// start/end of block comment 
-			if (chNext == '{')
+			if (chNext == '{' && IsSpaceToEOL(i+2, styler))
 				levelNext ++;
-			if (chNext == '}')
+			if (chNext == '}' && IsSpaceToEOL(i+2, styler))
 				levelNext --;
 		}
 		// keyword