[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53834] trunk/blender/source/blender/ editors/space_text: text syntax highlighting, add utility function ' text_format_fill()' which fills in the line with a formatting value.

Campbell Barton ideasman42 at gmail.com
Wed Jan 16 04:18:29 CET 2013


Revision: 53834
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53834
Author:   campbellbarton
Date:     2013-01-16 03:18:22 +0000 (Wed, 16 Jan 2013)
Log Message:
-----------
text syntax highlighting, add utility function 'text_format_fill()' which fills in the line with a formatting value.

this fixes a mistake in OSL lexer which would comment all lines after '//'

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_text/text_format.c
    trunk/blender/source/blender/editors/space_text/text_format.h
    trunk/blender/source/blender/editors/space_text/text_format_osl.c
    trunk/blender/source/blender/editors/space_text/text_format_py.c

Modified: trunk/blender/source/blender/editors/space_text/text_format.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format.c	2013-01-16 02:23:34 UTC (rev 53833)
+++ trunk/blender/source/blender/editors/space_text/text_format.c	2013-01-16 03:18:22 UTC (rev 53834)
@@ -140,6 +140,35 @@
 	return 1;
 }
 
+/**
+ * Fill the string with formatting constant,
+ * advancing \a str_p and \a fmt_p
+ *
+ * \param len length in bytes
+ */
+void text_format_fill(const char **str_p, char **fmt_p, const char type, const int len)
+{
+	const char *str = *str_p;
+	char *fmt = *fmt_p;
+	int i = 0;
+
+	while (i < len) {
+		const int size = BLI_str_utf8_size_safe(str);
+		*fmt++ = type;
+
+		str += size;
+		i   += size;
+	}
+
+	str--;
+	fmt--;
+
+	BLI_assert(*str != '\0');
+
+	*str_p = str;
+	*fmt_p = fmt;
+}
+
 /* *** Registration *** */
 static ListBase tft_lb = {NULL, NULL};
 void ED_text_format_register(TextFormatType *tft)

Modified: trunk/blender/source/blender/editors/space_text/text_format.h
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format.h	2013-01-16 02:23:34 UTC (rev 53833)
+++ trunk/blender/source/blender/editors/space_text/text_format.h	2013-01-16 03:18:22 UTC (rev 53834)
@@ -49,19 +49,18 @@
 	FMT_CONT_TRIPLE             = (1 << 2),  /* triplets of quotes: """ or ''' */
 	FMT_CONT_QUOTESINGLE_TRIPLE = (FMT_CONT_TRIPLE | FMT_CONT_QUOTESINGLE),
 	FMT_CONT_QUOTEDOUBLE_TRIPLE = (FMT_CONT_TRIPLE | FMT_CONT_QUOTEDOUBLE),
-	FMT_CONT_COMMENT_C          = (1 << 3),  /* multi-line comments, OSL only (C style) */
-	FMT_CONT_COMMENT_CXX        = (1 << 4),  /* single-line comments, OSL only (C++ style) */
+	FMT_CONT_COMMENT_C          = (1 << 3)   /* multi-line comments, OSL only (C style) */
 };
 #define FMT_CONT_ALL \
-	(FMT_CONT_QUOTESINGLE | FMT_CONT_QUOTEDOUBLE | FMT_CONT_TRIPLE | FMT_CONT_COMMENT_C | FMT_CONT_COMMENT_CXX)
+	(FMT_CONT_QUOTESINGLE | FMT_CONT_QUOTEDOUBLE | FMT_CONT_TRIPLE | FMT_CONT_COMMENT_C)
 
 int  flatten_string(struct SpaceText *st, FlattenString *fs, const char *in);
 void flatten_string_free(FlattenString *fs);
 int  flatten_string_strlen(FlattenString *fs, const char *str);
 
 int  text_check_format_len(TextLine *line, unsigned int len);
+void text_format_fill(const char **str_p, char **fmt_p, const char type, const int len);
 
-
 /* *** Generalize Formatting *** */
 typedef struct TextFormatType {
 	struct TextFormatType *next, *prev;

Modified: trunk/blender/source/blender/editors/space_text/text_format_osl.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format_osl.c	2013-01-16 02:23:34 UTC (rev 53833)
+++ trunk/blender/source/blender/editors/space_text/text_format_osl.c	2013-01-16 03:18:22 UTC (rev 53834)
@@ -228,10 +228,7 @@
 		/* Handle continuations */
 		else if (cont) {
 			/* C-Style comments */
-			if (cont & FMT_CONT_COMMENT_CXX) {
-				*fmt = FMT_TYPE_COMMENT;
-			}
-			else if (cont & FMT_CONT_COMMENT_C) {
+			if (cont & FMT_CONT_COMMENT_C) {
 				if (*str == '*' && *(str + 1) == '/') {
 					*fmt = FMT_TYPE_COMMENT; fmt++; str++;
 					*fmt = FMT_TYPE_COMMENT;
@@ -254,8 +251,8 @@
 		else {
 			/* Deal with comments first */
 			if (*str == '/' && *(str + 1) == '/') {
-				cont = FMT_CONT_COMMENT_CXX;
-				*fmt = FMT_TYPE_COMMENT;
+				/* fill the remaining line */
+				text_format_fill(&str, &fmt, FMT_TYPE_COMMENT, len - (int)(str - fs.buf));
 			}
 			/* C-Style (multi-line) comments */
 			else if (*str == '/' && *(str + 1) == '*') {
@@ -298,8 +295,7 @@
 				else if ((i = txtfmt_osl_find_preprocessor(str)) != -1) prev = FMT_TYPE_DIRECTIVE;
 
 				if (i > 0) {
-					memset(fmt, prev, i);
-					i--; fmt += i; str += i;
+					text_format_fill(&str, &fmt, prev, i);
 				}
 				else {
 					str += BLI_str_utf8_size_safe(str) - 1;

Modified: trunk/blender/source/blender/editors/space_text/text_format_py.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format_py.c	2013-01-16 02:23:34 UTC (rev 53833)
+++ trunk/blender/source/blender/editors/space_text/text_format_py.c	2013-01-16 03:18:22 UTC (rev 53834)
@@ -231,9 +231,9 @@
 		/* Not in a string... */
 		else {
 			/* Deal with comments first */
-			if (prev == FMT_TYPE_COMMENT || *str == '#') {
-				*fmt = FMT_TYPE_COMMENT;
-				str += BLI_str_utf8_size_safe(str) - 1;
+			if (*str == '#') {
+				/* fill the remaining line */
+				text_format_fill(&str, &fmt, prev, len - (int)(str - fs.buf));
 			}
 			else if (*str == '"' || *str == '\'') {
 				/* Strings */
@@ -285,8 +285,7 @@
 				else if ((i = txtfmt_py_find_decorator(str))    != -1) prev = FMT_TYPE_DIRECTIVE;
 
 				if (i > 0) {
-					memset(fmt, prev, i);
-					i--; fmt += i; str += i;
+					text_format_fill(&str, &fmt, prev, i);
 				}
 				else {
 					str += BLI_str_utf8_size_safe(str) - 1;




More information about the Bf-blender-cvs mailing list