degesch: compactify word wrapping algorithm
This commit is contained in:
		
							parent
							
								
									2ae916fc1a
								
							
						
					
					
						commit
						07201b7bdc
					
				
							
								
								
									
										19
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								degesch.c
									
									
									
									
									
								
							| @ -6794,7 +6794,7 @@ static size_t | ||||
| wrap_text_for_single_line (const char *text, size_t text_len, | ||||
| 	size_t line_len, struct str *output) | ||||
| { | ||||
| 	int eaten = 0; | ||||
| 	size_t eaten = 0; | ||||
| 
 | ||||
| 	// First try going word by word
 | ||||
| 	const char *word_start; | ||||
| @ -6822,21 +6822,12 @@ wrap_text_for_single_line (const char *text, size_t text_len, | ||||
| 		return eaten + (word_start - text); | ||||
| 
 | ||||
| 	// And if that doesn't help, cut the longest valid block of characters
 | ||||
| 	while (true) | ||||
| 	for (const char *p = text; (size_t) (p - text) <= line_len; ) | ||||
| 	{ | ||||
| 		const char *next = utf8_next (text, text_len - eaten, NULL); | ||||
| 		hard_assert (next); | ||||
| 
 | ||||
| 		size_t char_len = next - text; | ||||
| 		if (char_len > line_len) | ||||
| 			break; | ||||
| 
 | ||||
| 		str_append_data (output, text, char_len); | ||||
| 
 | ||||
| 		text += char_len; | ||||
| 		eaten += char_len; | ||||
| 		line_len -= char_len; | ||||
| 		eaten = p - text; | ||||
| 		hard_assert ((p = utf8_next (p, text_len - eaten, NULL))); | ||||
| 	} | ||||
| 	str_append_data (output, text, eaten); | ||||
| 	return eaten; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user