dont add identifiers starting with digits to autocomplete
authorCampbell Barton <ideasman42@gmail.com>
Wed, 16 Jan 2013 04:43:37 +0000 (04:43 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 16 Jan 2013 04:43:37 +0000 (04:43 +0000)
source/blender/blenkernel/BKE_text.h
source/blender/blenkernel/intern/text.c
source/blender/editors/space_text/text_autocomplete.c

index 1e3dd426efaab7abfc297b28c6fb6d3ac68cc043..be30eba0559273f85d566238758c96e80f8a8120 100644 (file)
@@ -105,6 +105,7 @@ int text_check_bracket(const char ch);
 int text_check_delim(const char ch);
 int text_check_digit(const char ch);
 int text_check_identifier(const char ch);
+int text_check_identifier_nodigit(const char ch);
 int text_check_whitespace(const char ch);
 int text_find_identifier_start(const char *str, int i);
 
index c337e339ebfa5d5e69717737bf4c6b60ef3dce78..a0f611a5a7b2709808dcd26c261dd3c763f1268b 100644 (file)
@@ -2930,6 +2930,16 @@ int text_check_identifier(const char ch)
        return 0;
 }
 
+int text_check_identifier_nodigit(const char ch)
+{
+       if (ch <= '9') return 0;
+       if (ch < 'A') return 0;
+       if (ch <= 'Z' || ch == '_') return 1;
+       if (ch < 'a') return 0;
+       if (ch <= 'z') return 1;
+       return 0;
+}
+
 int text_check_whitespace(const char ch)
 {
        if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
index e406a1b7166bd4d4b7219cec3abe842ac97f6306..94977fc5f0f6a452fabfe5c8e7e6078a474d0563 100644 (file)
@@ -167,7 +167,7 @@ static GHash *text_autocomplete_build(Text *text)
 
                        while (i_start < linep->len) {
                                /* seek identifier beginning */
-                               while (i_start < linep->len && !text_check_identifier(linep->line[i_start])) {
+                               while (i_start < linep->len && !text_check_identifier_nodigit(linep->line[i_start])) {
                                        i_start++;
                                }
                                i_end = i_start;
@@ -175,7 +175,11 @@ static GHash *text_autocomplete_build(Text *text)
                                        i_end++;
                                }
 
-                               if (i_start != i_end) {
+                               if ((i_start != i_end) &&
+                                   /* check we're at the beginning of a line or that the previous char is not an identifier
+                                        * this prevents digits from being added */
+                                   ((i_start < 1) || !text_check_identifier(linep->line[i_start - 1])))
+                               {
                                        char *str_sub = &linep->line[i_start];
                                        const int choice_len = i_end - i_start;