about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--buffer.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/buffer.c b/buffer.c
index 91fe6b4..6a7fe6e 100644
--- a/buffer.c
+++ b/buffer.c
@@ -111,6 +111,7 @@ static int flow(struct Lines *hard, int cols, const struct Line *soft) {
 	int align = 0;
 	char *wrap = NULL;
 	struct Style style = StyleDefault;
+	struct Style wrapStyle = StyleDefault;
 	for (char *str = line->str; *str;) {
 		size_t len = styleParse(&style, (const char **)&str);
 		if (!len) continue;
@@ -138,15 +139,26 @@ static int flow(struct Lines *hard, int cols, const struct Line *soft) {
 			width += wcwidth(wc);
 		}
 
-		if (tab && width < cols) align = width;
-		if (iswspace(wc) && !tab) wrap = str;
+		if (tab && width < cols) {
+			align = width;
+		}
+		if (iswspace(wc) && !tab) {
+			wrap = str;
+			wrapStyle = style;
+		}
+		if (wc == L'-' && width <= cols) {
+			wrap = &str[n];
+			wrapStyle = style;
+		}
+
 		if (width <= cols) {
-			if (wc == L'-') wrap = &str[n];
 			str += n;
 			continue;
+		} else if (!wrap) {
+			wrap = str;
+			wrapStyle = style;
 		}
 
-		if (!wrap) wrap = str;
 		n = mbtowc(&wc, wrap, strlen(wrap));
 		if (n < 0) {
 			n = 1;
@@ -165,8 +177,9 @@ static int flow(struct Lines *hard, int cols, const struct Line *soft) {
 
 		struct Cat cat = { line->str, cap, 0 };
 		catf(&cat, "%*s%n", align, "", &width);
-		styleCat(&cat, style);
+		styleCat(&cat, wrapStyle);
 		str = &line->str[cat.len];
+		style = wrapStyle;
 		catf(&cat, "%s", &wrap[n]);
 
 		*wrap = '\0';
rd handling from formatParseJune McEnroe 2018-09-14Apply consecutive formatting codes at onceJune McEnroe 2018-09-14Add tests for formatParseJune McEnroe 2018-09-13Preview with nick in input windowJune McEnroe 2018-09-13Never send PRIVMSG to TagStatus or TagVerboseJune McEnroe 2018-09-13Move color selection to format.cJune McEnroe 2018-09-13Fix len for format->split at end of stringJune McEnroe 2018-09-13Avoid uninitialized x in uiReadJune McEnroe 2018-09-13Add IRCDefault to colors enumJune McEnroe 2018-09-13Return a format->split even at the end of the stringJune McEnroe 2018-09-13Fix weird tab-complete after commaJune McEnroe 2018-09-13Rewrite UI againJune McEnroe 2018-09-12Add note about C-oJune McEnroe 2018-09-12Use formatParse split to position input cursorJune McEnroe 2018-09-12Factor out IRC formatting parsingJune McEnroe 2018-09-11Add /help equivalent to /manJune McEnroe 2018-09-11Don't render every PM as a pingJune McEnroe 2018-09-11Add urlOpenMatchJune McEnroe 2018-09-10Depend on man.sh for chroot.tar targetJune McEnroe 2018-09-10Set LESSSECURE=1 in man.shJune McEnroe 2018-09-10Add /man commandJune McEnroe 2018-09-10Install man page in chrootJune McEnroe 2018-09-10Install man pageJune McEnroe 2018-09-10Split keys into subsections and document colorsJune McEnroe 2018-09-10Add "blank" lines to chatte.1June McEnroe 2018-09-10Document key bindings in chatte.1June McEnroe 2018-09-08Document slash commands in chatte.1June McEnroe