text syntax highlighting: don't use utf8 stepping if we know the text is ascii
This commit is contained in:
		@@ -168,6 +168,25 @@ void text_format_fill(const char **str_p, char **fmt_p, const char type, const i
 | 
				
			|||||||
	*str_p = str;
 | 
						*str_p = str;
 | 
				
			||||||
	*fmt_p = fmt;
 | 
						*fmt_p = fmt;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ascii version of #text_format_fill,
 | 
				
			||||||
 | 
					 * use when we no the text being stepped over is ascii (as is the case for most keywords)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void text_format_fill_ascii(const char **str_p, char **fmt_p, const char type, const int len)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const char *str = *str_p;
 | 
				
			||||||
 | 
						char *fmt = *fmt_p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						memset(fmt, type, len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						str += len - 1;
 | 
				
			||||||
 | 
						fmt += len - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						BLI_assert(*str != '\0');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*str_p = str;
 | 
				
			||||||
 | 
						*fmt_p = fmt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* *** Registration *** */
 | 
					/* *** Registration *** */
 | 
				
			||||||
static ListBase tft_lb = {NULL, NULL};
 | 
					static ListBase tft_lb = {NULL, NULL};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,6 +60,7 @@ int  flatten_string_strlen(FlattenString *fs, const char *str);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int  text_check_format_len(TextLine *line, unsigned int len);
 | 
					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);
 | 
					void text_format_fill(const char **str_p, char **fmt_p, const char type, const int len);
 | 
				
			||||||
 | 
					void text_format_fill_ascii(const char **str_p, char **fmt_p, const char type, const int len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* *** Generalize Formatting *** */
 | 
					/* *** Generalize Formatting *** */
 | 
				
			||||||
typedef struct TextFormatType {
 | 
					typedef struct TextFormatType {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -258,7 +258,7 @@ static void txtfmt_lua_format_line(SpaceText *st, TextLine *line, const int do_n
 | 
				
			|||||||
			/* Booleans */
 | 
								/* Booleans */
 | 
				
			||||||
			else if (prev != FMT_TYPE_DEFAULT && (i = txtfmt_lua_find_bool(str)) != -1) {
 | 
								else if (prev != FMT_TYPE_DEFAULT && (i = txtfmt_lua_find_bool(str)) != -1) {
 | 
				
			||||||
				if (i > 0) {
 | 
									if (i > 0) {
 | 
				
			||||||
					text_format_fill(&str, &fmt, FMT_TYPE_NUMERAL, i);
 | 
										text_format_fill_ascii(&str, &fmt, FMT_TYPE_NUMERAL, i);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					str += BLI_str_utf8_size_safe(str) - 1;
 | 
										str += BLI_str_utf8_size_safe(str) - 1;
 | 
				
			||||||
@@ -282,7 +282,7 @@ static void txtfmt_lua_format_line(SpaceText *st, TextLine *line, const int do_n
 | 
				
			|||||||
				else if ((i = txtfmt_lua_find_keyword(str))      != -1) prev = FMT_TYPE_KEYWORD;
 | 
									else if ((i = txtfmt_lua_find_keyword(str))      != -1) prev = FMT_TYPE_KEYWORD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (i > 0) {
 | 
									if (i > 0) {
 | 
				
			||||||
					text_format_fill(&str, &fmt, prev, i);
 | 
										text_format_fill_ascii(&str, &fmt, prev, i);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					str += BLI_str_utf8_size_safe(str) - 1;
 | 
										str += BLI_str_utf8_size_safe(str) - 1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -295,7 +295,12 @@ static void txtfmt_osl_format_line(SpaceText *st, TextLine *line, const int do_n
 | 
				
			|||||||
				else if ((i = txtfmt_osl_find_preprocessor(str)) != -1) prev = FMT_TYPE_DIRECTIVE;
 | 
									else if ((i = txtfmt_osl_find_preprocessor(str)) != -1) prev = FMT_TYPE_DIRECTIVE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (i > 0) {
 | 
									if (i > 0) {
 | 
				
			||||||
					text_format_fill(&str, &fmt, prev, i);
 | 
										if (prev == FMT_TYPE_DIRECTIVE) {  /* can contain utf8 */
 | 
				
			||||||
 | 
											text_format_fill(&str, &fmt, prev, i);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
 | 
											text_format_fill_ascii(&str, &fmt, prev, i);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					str += BLI_str_utf8_size_safe(str) - 1;
 | 
										str += BLI_str_utf8_size_safe(str) - 1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -259,7 +259,7 @@ static void txtfmt_py_format_line(SpaceText *st, TextLine *line, const int do_ne
 | 
				
			|||||||
			/* Booleans */
 | 
								/* Booleans */
 | 
				
			||||||
			else if (prev != FMT_TYPE_DEFAULT && (i = txtfmt_py_find_bool(str)) != -1) {
 | 
								else if (prev != FMT_TYPE_DEFAULT && (i = txtfmt_py_find_bool(str)) != -1) {
 | 
				
			||||||
				if (i > 0) {
 | 
									if (i > 0) {
 | 
				
			||||||
					text_format_fill(&str, &fmt, FMT_TYPE_NUMERAL, i);
 | 
										text_format_fill_ascii(&str, &fmt, FMT_TYPE_NUMERAL, i);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					str += BLI_str_utf8_size_safe(str) - 1;
 | 
										str += BLI_str_utf8_size_safe(str) - 1;
 | 
				
			||||||
@@ -284,7 +284,12 @@ static void txtfmt_py_format_line(SpaceText *st, TextLine *line, const int do_ne
 | 
				
			|||||||
				else if ((i = txtfmt_py_find_decorator(str))    != -1) prev = FMT_TYPE_DIRECTIVE;
 | 
									else if ((i = txtfmt_py_find_decorator(str))    != -1) prev = FMT_TYPE_DIRECTIVE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (i > 0) {
 | 
									if (i > 0) {
 | 
				
			||||||
					text_format_fill(&str, &fmt, prev, i);
 | 
										if (prev == FMT_TYPE_DIRECTIVE) {  /* can contain utf8 */
 | 
				
			||||||
 | 
											text_format_fill(&str, &fmt, prev, i);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
 | 
											text_format_fill_ascii(&str, &fmt, prev, i);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					str += BLI_str_utf8_size_safe(str) - 1;
 | 
										str += BLI_str_utf8_size_safe(str) - 1;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user