Cycles: svn merge -r39870:r40266 https://svn.blender.org/svnroot/bf-blender/trunk...
[blender-staging.git] / source / blender / blenkernel / intern / text.c
index 578b2d57e944579f0c6486a96f6d69644c4d420a..2c507370288a8d339ae7c0baa231eb7cac9299a6 100644 (file)
@@ -238,7 +238,7 @@ static void cleanup_textline(TextLine * tl)
 int reopen_text(Text *text)
 {
        FILE *fp;
-       int i, llen, len, res;
+       int i, llen, len;
        unsigned char *buffer;
        TextLine *tmp;
        char str[FILE_MAXDIR+FILE_MAXFILE];
@@ -281,7 +281,7 @@ int reopen_text(Text *text)
 
        fclose(fp);
 
-       res= stat(str, &st);
+       stat(str, &st);
        text->mtime= st.st_mtime;
        
        text->nlines=0;
@@ -334,7 +334,7 @@ Text *add_text(const char *file, const char *relpath)
 {
        Main *bmain= G.main;
        FILE *fp;
-       int i, llen, len, res;
+       int i, llen, len;
        unsigned char *buffer;
        TextLine *tmp;
        Text *ta;
@@ -374,7 +374,7 @@ Text *add_text(const char *file, const char *relpath)
 
        fclose(fp);
 
-       res= stat(str, &st);
+       stat(str, &st);
        ta->mtime= st.st_mtime;
        
        ta->nlines=0;
@@ -400,7 +400,13 @@ Text *add_text(const char *file, const char *relpath)
                llen++;
        }
 
-       if (llen!=0 || ta->nlines==0) {
+       /* create new line in cases:
+          - rest of line (if last line in file hasn't got \n terminator).
+            in this case content of such line would be used to fill text line buffer
+          - file is empty. in this case new line is needed to start editing from.
+          - last characted in buffer is \n. in this case new line is needed to
+            deal with newline at end of file. (see [#28087]) (sergey) */
+       if (llen!=0 || ta->nlines==0 || buffer[len-1]=='\n') {
                tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
                tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
                tmp->format= NULL;
@@ -1236,14 +1242,11 @@ int txt_find_string(Text *text, char *findstr, int wrap, int match_case)
 {
        TextLine *tl, *startl;
        char *s= NULL;
-       int oldcl, oldsl;
 
        if (!text || !text->curl || !text->sell) return 0;
        
        txt_order_cursors(text);
 
-       oldcl= txt_get_span(text->lines.first, text->curl);
-       oldsl= txt_get_span(text->lines.first, text->sell);
        tl= startl= text->sell;
        
        if(match_case) s= strstr(&tl->line[text->selc], findstr);
@@ -1420,6 +1423,8 @@ void txt_insert_buf(Text *text, const char *in_buffer)
        }
 
        undoing= u;
+
+       (void)count;
 }
 
 /******************/
@@ -2759,7 +2764,7 @@ int setcurr_tab_spaces (Text *text, int space)
                                break;
                        } else if (ch==':') {
                                is_indent = 1;
-                       } else if (ch==']' || ch=='}' || ch=='"' || ch=='\'') {
+                       } else if (ch!=' ' && ch!='\t') {
                                is_indent = 0;
                        }
                }