[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15837] branches/soc-2008-quorn/source/ blender: Complete rewrite of syntax highlighting and formatting.
Ian Thompson
quornian at googlemail.com
Mon Jul 28 13:05:36 CEST 2008
Revision: 15837
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15837
Author: quorn
Date: 2008-07-28 13:05:35 +0200 (Mon, 28 Jul 2008)
Log Message:
-----------
Complete rewrite of syntax highlighting and formatting. Some improvements:
- Takes less than half the time to format a full document
- Where possible only the required lines are re-parsed when text is changed (was the whole file, for every key press!)
- Memory is allocated in one place only (there were all sorts of problems here)
- Should be easily extensible for other scripting languages
- Lots of comments to make it very easy to follow / change
- def and class are now properly coloured. They had a theme colour but the checks didn't work.
Modified Paths:
--------------
branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c
branches/soc-2008-quorn/source/blender/include/BIF_drawtext.h
branches/soc-2008-quorn/source/blender/makesdna/DNA_text_types.h
branches/soc-2008-quorn/source/blender/src/drawtext.c
branches/soc-2008-quorn/source/blender/src/header_text.c
Modified: branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c
===================================================================
--- branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c 2008-07-28 11:01:34 UTC (rev 15836)
+++ branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c 2008-07-28 11:05:35 UTC (rev 15837)
@@ -175,7 +175,7 @@
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(1, "textline_string");
- tmp->format= (char*) MEM_mallocN(2, "Syntax_format");
+ tmp->format= NULL;
tmp->line[0]=0;
tmp->len= 0;
@@ -271,7 +271,7 @@
if (buffer[i]=='\n') {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
tmp->line[llen]=0;
@@ -291,7 +291,7 @@
if (llen!=0 || text->nlines==0) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
@@ -367,7 +367,7 @@
if (buffer[i]=='\n') {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
tmp->line[llen]=0;
@@ -387,7 +387,7 @@
if (llen!=0 || ta->nlines==0) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
@@ -430,7 +430,7 @@
while (line) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(line->len+1, "textline_string");
- tmp->format= MEM_mallocN(line->len+2, "Syntax_format");
+ tmp->format= NULL;
strcpy(tmp->line, line->line);
@@ -451,14 +451,14 @@
/* Editing utility functions */
/*****************************/
-static void make_new_line (TextLine *line, char *newline, char *newformat)
+static void make_new_line (TextLine *line, char *newline)
{
if (line->line) MEM_freeN(line->line);
if (line->format) MEM_freeN(line->format);
line->line= newline;
line->len= strlen(newline);
- line->format= newformat;
+ line->format= NULL;
}
static TextLine *txt_new_line(char *str)
@@ -469,7 +469,7 @@
tmp= (TextLine *) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(strlen(str)+1, "textline_string");
- tmp->format= MEM_mallocN(strlen(str)+2, "Syntax_format");
+ tmp->format= NULL;
strcpy(tmp->line, str);
@@ -487,7 +487,7 @@
tmp= (TextLine *) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(n+1, "textline_string");
- tmp->format= MEM_mallocN(n+2, "Syntax_format");
+ tmp->format= NULL;
BLI_strncpy(tmp->line, str, n+1);
@@ -948,7 +948,7 @@
static void txt_delete_sel (Text *text)
{
TextLine *tmpl;
- char *buf, *format;
+ char *buf;
if (!text) return;
if (!text->curl) return;
@@ -965,13 +965,12 @@
}
buf= MEM_mallocN(text->curc+(text->sell->len - text->selc)+1, "textline_string");
- format= MEM_mallocN(text->curc+(text->sell->len - text->selc)+2, "Syntax_format");
strncpy(buf, text->curl->line, text->curc);
strcpy(buf+text->curc, text->sell->line + text->selc);
buf[text->curc+(text->sell->len - text->selc)]=0;
- make_new_line(text->curl, buf, format);
+ make_new_line(text->curl, buf);
tmpl= text->sell;
while (tmpl != text->curl) {
@@ -2045,7 +2044,7 @@
void txt_split_curline (Text *text)
{
TextLine *ins;
- char *left, *right, *fleft, *fright;
+ char *left, *right;
if (!text) return;
if (!text->curl) return;
@@ -2055,12 +2054,10 @@
/* Make the two half strings */
left= MEM_mallocN(text->curc+1, "textline_string");
- fleft= MEM_mallocN(text->curc+2, "Syntax_format");
if (text->curc) memcpy(left, text->curl->line, text->curc);
left[text->curc]=0;
right= MEM_mallocN(text->curl->len - text->curc+1, "textline_string");
- fright= MEM_mallocN(text->curl->len - text->curc+2, "Syntax_format");
if (text->curl->len - text->curc) memcpy(right, text->curl->line+text->curc, text->curl->len-text->curc);
right[text->curl->len - text->curc]=0;
@@ -2071,11 +2068,11 @@
ins= MEM_mallocN(sizeof(TextLine), "textline");
ins->line= left;
- ins->format= fleft;
+ ins->format= NULL;
ins->len= text->curc;
text->curl->line= right;
- text->curl->format= fright;
+ text->curl->format= NULL;
text->curl->len= text->curl->len - text->curc;
BLI_insertlinkbefore(&text->lines, text->curl, ins);
@@ -2107,19 +2104,18 @@
static void txt_combine_lines (Text *text, TextLine *linea, TextLine *lineb)
{
- char *tmp, *format;
+ char *tmp;
if (!text) return;
if(!linea || !lineb) return;
tmp= MEM_mallocN(linea->len+lineb->len+1, "textline_string");
- format= MEM_mallocN(linea->len+lineb->len+1, "Syntax_format");
strcpy(tmp, linea->line);
strcat(tmp, lineb->line);
- make_new_line(linea, tmp, format);
+ make_new_line(linea, tmp);
txt_delete_line(text, lineb);
@@ -2217,7 +2213,7 @@
int txt_add_char (Text *text, char add)
{
int len;
- char *tmp, *format;
+ char *tmp;
if (!text) return 0;
if (!text->curl) return 0;
@@ -2230,7 +2226,6 @@
txt_delete_sel(text);
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format= MEM_mallocN(text->curl->len+4, "Syntax_format");
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
tmp[text->curc]= add;
@@ -2238,7 +2233,7 @@
len= text->curl->len - text->curc;
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2282,7 +2277,7 @@
void indent(Text *text)
{
int len, num;
- char *tmp, *format;
+ char *tmp;
char add = '\t';
if (!text) return;
@@ -2293,7 +2288,6 @@
while (TRUE)
{
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format= MEM_mallocN(text->curl->len+3, "Syntax_format");
text->curc = 0;
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
@@ -2303,7 +2297,7 @@
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2384,7 +2378,7 @@
void comment(Text *text)
{
int len, num;
- char *tmp, *format;
+ char *tmp;
char add = '#';
if (!text) return;
@@ -2395,7 +2389,6 @@
while (TRUE)
{
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format = MEM_mallocN(text->curl->len+3, "Syntax_format");
text->curc = 0;
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
@@ -2405,7 +2398,7 @@
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
Modified: branches/soc-2008-quorn/source/blender/include/BIF_drawtext.h
===================================================================
--- branches/soc-2008-quorn/source/blender/include/BIF_drawtext.h 2008-07-28 11:01:34 UTC (rev 15836)
+++ branches/soc-2008-quorn/source/blender/include/BIF_drawtext.h 2008-07-28 11:05:35 UTC (rev 15837)
@@ -45,7 +45,8 @@
void free_txt_data(void);
void pop_space_text(struct SpaceText *st);
-void get_format_string(struct SpaceText *st);
+void txt_format_text(struct SpaceText *st);
+void txt_format_line(struct SpaceText *st, struct TextLine *line, int do_next);
void do_brackets(void);
#endif
Modified: branches/soc-2008-quorn/source/blender/makesdna/DNA_text_types.h
===================================================================
--- branches/soc-2008-quorn/source/blender/makesdna/DNA_text_types.h 2008-07-28 11:01:34 UTC (rev 15836)
+++ branches/soc-2008-quorn/source/blender/makesdna/DNA_text_types.h 2008-07-28 11:05:35 UTC (rev 15837)
@@ -76,4 +76,12 @@
#define TXT_READONLY 0x0100
#define TXT_FOLLOW 0x0200 /* always follow cursor (console) */
+/* format continuation flags */
+#define TXT_NOCONT 0x00 /* no continuation */
+#define TXT_SNGQUOTSTR 0x01 /* single quotes */
+#define TXT_DBLQUOTSTR 0x02 /* double quotes */
+#define TXT_TRISTR 0x04 /* triplets of quotes: """ or ''' */
+#define TXT_SNGTRISTR 0x05 /*(TXT_TRISTR | TXT_SNGQUOTSTR)*/
+#define TXT_DBLTRISTR 0x06 /*(TXT_TRISTR | TXT_DBLQUOTSTR)*/
+
#endif
Modified: branches/soc-2008-quorn/source/blender/src/drawtext.c
===================================================================
--- branches/soc-2008-quorn/source/blender/src/drawtext.c 2008-07-28 11:01:34 UTC (rev 15836)
+++ branches/soc-2008-quorn/source/blender/src/drawtext.c 2008-07-28 11:05:35 UTC (rev 15837)
@@ -134,10 +134,10 @@
void txt_copy_selectbuffer (Text *text);
void do_brackets();
-void get_selection_buffer(Text *text);
-int check_bracket(char *string);
-static int check_delim(char *string);
-static int check_numbers(char *string);
+static void get_selection_buffer(Text *text);
+static int check_bracket(char ch);
+static int check_delim(char ch);
+static int check_digit(char ch);
static int check_builtinfuncs(char *string);
static int check_specialvars(char *string);
static int check_identifier(char ch);
@@ -237,351 +237,205 @@
return r;
}
-void get_format_string(SpaceText *st)
+static int find_builtinfunc(char *string)
{
- Text *text = st->text;
- TextLine *tmp;
- char *in_line;
- char format[2000], check[200], other[2];
- unsigned char c;
- int spot, letter, tabs, mem_amount;
- size_t a, b, len;
-
- if(!text) return;
- tmp = text->lines.first;
-
- while(tmp) {
- in_line = tmp->line;
-
- len = strlen(in_line);
- /* weak code... but we dont want crashes (ton) */
- if(len>2000-1) {
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format= NULL;
+ int a, i;
+ char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
+ "del", "elif", "else", "except", "exec", "finally",
+ "for", "from", "global", "if", "import", "in",
+ "is", "lambda", "not", "or", "pass", "print",
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list