use b_plain use cz/vars contlines() new(b, buffer, line_initial_space) int bslashcont = -1 int indent int prev_indent = 0 cstr prev_line = "" vec_push(lines, (cstr)"") for_vec(i, lines, cstr) cstr l = *i indent = line_indent(l) char *after_space = l if bslashcont == 1 l += strspn(l, " \t") eif (l[0] == ' ' || (after_space = strstr(l, "\t "))) && indent >= prev_indent && !cstr_begins_with_word(after_space, "else") && !cstr_begins_with_word(after_space, "eif") && !cstr_begins_with_word(after_space, "while") l += prev_indent eif bslashcont == 0 if buflen(b) == 0 vec_push(work, prev_line) else buffer_cat_cstr(b, prev_line) vec_push(work, tofree(buffer_to_cstr(b))) init(b, buffer, line_initial_space) prev_line = "" prev_indent = indent int len = strlen(l) if len && l[len-1] == '\\' l[len-1] = '\0' bslashcont = 1 else bslashcont = 0 if *prev_line buffer_cat_cstr(b, prev_line) prev_line = l if *prev_line error("last line ends in \\ - how perverse!") swap(lines, work) vecclr(work)