[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53410] trunk/blender: patch [#33609] Syntax highlighting for OSL in Text Editor

Campbell Barton ideasman42 at gmail.com
Sat Dec 29 19:25:09 CET 2012


Revision: 53410
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53410
Author:   campbellbarton
Date:     2012-12-29 18:25:03 +0000 (Sat, 29 Dec 2012)
Log Message:
-----------
patch [#33609] Syntax highlighting for OSL in Text Editor
from Patrick Boelens (senshi). with modifications to split it into its own function.

also added C style multi-line comment support /* ... */

I've left out the part of this patch that sets the language in the space, since I think this might be better stored in the text block.

For now it simply uses OSL syntax highlighting when the extension is '.osl'.

Modified Paths:
--------------
    trunk/blender/doc/python_api/sphinx_doc_gen.py
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/editors/include/UI_resources.h
    trunk/blender/source/blender/editors/interface/resources.c
    trunk/blender/source/blender/editors/space_text/CMakeLists.txt
    trunk/blender/source/blender/editors/space_text/space_text.c
    trunk/blender/source/blender/editors/space_text/text_draw.c
    trunk/blender/source/blender/editors/space_text/text_format.c
    trunk/blender/source/blender/editors/space_text/text_format.h
    trunk/blender/source/blender/makesdna/DNA_text_types.h
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c

Added Paths:
-----------
    trunk/blender/source/blender/editors/space_text/text_format_osl.c

Modified: trunk/blender/doc/python_api/sphinx_doc_gen.py
===================================================================
--- trunk/blender/doc/python_api/sphinx_doc_gen.py	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/doc/python_api/sphinx_doc_gen.py	2012-12-29 18:25:03 UTC (rev 53410)
@@ -612,6 +612,10 @@
     '''
     function or class method to sphinx
     '''
+    
+    if type(py_func) == type(bpy.types.Space.draw_handler_add):
+        return
+    
     arg_str = inspect.formatargspec(*inspect.getargspec(py_func))
 
     if not is_class:

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2012-12-29 18:25:03 UTC (rev 53410)
@@ -42,7 +42,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         265
-#define BLENDER_SUBVERSION      3
+#define BLENDER_SUBVERSION      4
 
 /* 262 was the last editmesh release but it has compatibility code for bmesh data */
 #define BLENDER_MINVERSION      262

Modified: trunk/blender/source/blender/editors/include/UI_resources.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_resources.h	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/include/UI_resources.h	2012-12-29 18:25:03 UTC (rev 53410)
@@ -122,8 +122,10 @@
 
 	TH_SYNTAX_B,
 	TH_SYNTAX_V,
+	TH_SYNTAX_R,
 	TH_SYNTAX_C,
 	TH_SYNTAX_L,
+	TH_SYNTAX_D,
 	TH_SYNTAX_N,
 	
 	TH_BONE_SOLID,

Modified: trunk/blender/source/blender/editors/interface/resources.c
===================================================================
--- trunk/blender/source/blender/editors/interface/resources.c	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/interface/resources.c	2012-12-29 18:25:03 UTC (rev 53410)
@@ -358,6 +358,10 @@
 					cp = ts->syntaxc; break;
 				case TH_SYNTAX_L:
 					cp = ts->syntaxl; break;
+				case TH_SYNTAX_D:
+					cp = ts->syntaxd; break;
+				case TH_SYNTAX_R:
+					cp = ts->syntaxr; break;
 				case TH_SYNTAX_N:
 					cp = ts->syntaxn; break;
 
@@ -880,10 +884,12 @@
 	
 	/* syntax highlighting */
 	rgba_char_args_set(btheme->text.syntaxn,    0, 0, 200, 255);    /* Numbers  Blue*/
-	rgba_char_args_set(btheme->text.syntaxl,    100, 0, 0, 255);    /* Strings  red */
-	rgba_char_args_set(btheme->text.syntaxc,    0, 100, 50, 255);   /* Comments greenish */
-	rgba_char_args_set(btheme->text.syntaxv,    95, 95, 0, 255);    /* Special */
-	rgba_char_args_set(btheme->text.syntaxb,    128, 0, 80, 255);   /* Builtin, red-purple */
+	rgba_char_args_set(btheme->text.syntaxl,    100, 0, 0, 255);    /* Strings  Red */
+	rgba_char_args_set(btheme->text.syntaxc,    0, 100, 50, 255);   /* Comments  Greenish */
+	rgba_char_args_set(btheme->text.syntaxv,    95, 95, 0, 255);    /* Special  Yellow*/
+	rgba_char_args_set(btheme->text.syntaxd,    50, 0, 140, 255);   /* Decorator/Preprocessor Dir.  Blue-purple */
+	rgba_char_args_set(btheme->text.syntaxr,    140, 60, 0, 255);   /* Reserved  Orange*/
+	rgba_char_args_set(btheme->text.syntaxb,    128, 0, 80, 255);   /* Builtin  Red-purple */
 	
 	/* space oops */
 	btheme->toops = btheme->tv3d;
@@ -2081,6 +2087,14 @@
 			}
 		}
 	}
+
+	if (!MAIN_VERSION_ATLEAST(bmain, 266, 4)) {
+		bTheme *btheme;
+		for (btheme = U.themes.first; btheme; btheme = btheme->next) {
+			rgba_char_args_set(btheme->text.syntaxd,    50, 0, 140, 255);   /* Decorator/Preprocessor Dir.  Blue-purple */
+			rgba_char_args_set(btheme->text.syntaxr,    140, 60, 0, 255);   /* Reserved  Orange */
+		}
+	}
 	
 	if (U.pixelsize == 0.0f)
 		U.pixelsize = 1.0f;

Modified: trunk/blender/source/blender/editors/space_text/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/editors/space_text/CMakeLists.txt	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/space_text/CMakeLists.txt	2012-12-29 18:25:03 UTC (rev 53410)
@@ -38,6 +38,7 @@
 	space_text.c
 	text_draw.c
 	text_format.c
+	text_format_osl.c
 	text_format_py.c
 	text_header.c
 	text_ops.c

Modified: trunk/blender/source/blender/editors/space_text/space_text.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/space_text.c	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/space_text/space_text.c	2012-12-29 18:25:03 UTC (rev 53410)
@@ -555,5 +555,6 @@
 
 	/* register formatters */
 	ED_text_format_register_py();
+	ED_text_format_register_osl();
 }
 

Modified: trunk/blender/source/blender/editors/space_text/text_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_draw.c	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/space_text/text_draw.c	2012-12-29 18:25:03 UTC (rev 53410)
@@ -131,9 +131,15 @@
 		case 'l': /* Strings */
 			UI_ThemeColor(TH_SYNTAX_L);
 			break;
+		case 'd': /* Preprocessor directive */
+			UI_ThemeColor(TH_SYNTAX_D);
+			break;
 		case 'v': /* Specials: class, def */
 			UI_ThemeColor(TH_SYNTAX_V);
 			break;
+		case 'r': /* Reserved keywords */
+			UI_ThemeColor(TH_SYNTAX_R);
+			break;
 		case 'b': /* Keywords: for, print, etc. */
 			UI_ThemeColor(TH_SYNTAX_B);
 			break;

Modified: trunk/blender/source/blender/editors/space_text/text_format.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format.c	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/space_text/text_format.c	2012-12-29 18:25:03 UTC (rev 53410)
@@ -147,10 +147,16 @@
 	BLI_addtail(&tft_lb, tft);
 }
 
-TextFormatType *ED_text_format_get(Text *UNUSED(text))
+TextFormatType *ED_text_format_get(Text *text)
 {
 	/* NOTE: once more types are added we'll need to return some type based on 'text'
 	 * for now this function is more of a placeholder */
 
-	return tft_lb.first;
+	/* XXX, wrong, but OK for testing */
+	if (BLI_testextensie(text->id.name + 2, ".osl")) {
+		return tft_lb.last;
+	}
+	else {
+		return tft_lb.first;
+	}
 }

Modified: trunk/blender/source/blender/editors/space_text/text_format.h
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format.h	2012-12-29 18:20:14 UTC (rev 53409)
+++ trunk/blender/source/blender/editors/space_text/text_format.h	2012-12-29 18:25:03 UTC (rev 53410)
@@ -60,7 +60,9 @@
 	 *  '!'  Punctuation and other symbols
 	 *  'n'  Numerals
 	 *  'l'  String letters
+	 *  'd'  Decorator / Preprocessor directive
 	 *  'v'  Special variables (class, def)
+	 *  'r'  Reserved keywords currently not in use, but still prohibited (OSL -> switch e.g.)
 	 *  'b'  Built-in names (print, for, etc.)
 	 *  'q'  Other text (identifiers, etc.)
 	 * It is terminated with a null-terminator '\0' followed by a continuation
@@ -75,6 +77,7 @@
 
 /* formatters */
 void ED_text_format_register_py(void);
+void ED_text_format_register_osl(void);
 
 #define STR_LITERAL_STARTSWITH(str, str_literal, len_var) \
 	(strncmp(str, str_literal, len_var = (sizeof(str_literal) - 1)) == 0)

Added: trunk/blender/source/blender/editors/space_text/text_format_osl.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_format_osl.c	                        (rev 0)
+++ trunk/blender/source/blender/editors/space_text/text_format_osl.c	2012-12-29 18:25:03 UTC (rev 53410)
@@ -0,0 +1,331 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_text/text_format_py.c
+ *  \ingroup sptext
+ */
+
+#include <string.h>
+
+#include "BLI_blenlib.h"
+
+#include "DNA_text_types.h"
+#include "DNA_space_types.h"
+
+#include "BKE_text.h"
+
+#include "text_format.h"
+
+/* *** Local Functions (for format_line) *** */
+
+static int txtfmt_osl_find_builtinfunc(const char *string)
+{
+	int i, len;
+	/* list is from...
+	 * XXX - link to docs!
+	 */
+	if      (STR_LITERAL_STARTSWITH(string, "break",        len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "closure",      len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "color",        len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "continue",     len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "do",           len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "else",         len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "emit",         len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "float",        len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "for",          len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "if",           len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "illuminance",  len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "illuminate",   len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "int",          len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "matrix",       len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "normal",       len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "output",       len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "point",        len)) i = len;
+	else if (STR_LITERAL_STARTSWITH(string, "public",       len)) i = len;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list