/* Tries to add more characters from the fp file, but not exceed length of the * line buffer (the len parameter) and maximum number of printable character * positions (the max parameter). Returns new length of the line buffer. */ static size_t add_to_line(FILE *fp, size_t max, char line[], size_t len) { size_t n_len = get_normal_utf8_string_length(line) - esc_str_overhead(line); size_t curr_len = strlen(line); while(n_len < max && line[curr_len - 1] != '\n' && !feof(fp)) { if(get_line(fp, line + curr_len, len - curr_len) == NULL) { break; } n_len = get_normal_utf8_string_length(line) - esc_str_overhead(line); curr_len = strlen(line); } return curr_len; }
/* Recalculates virtual lines of a view with line wrapping. */ static void calc_vlines_wrapped(view_info_t *vi) { int i; vi->nlinesv = 0; for(i = 0; i < vi->nlines; i++) { vi->widths[i][0] = vi->nlinesv++; vi->widths[i][1] = utf8_strsw_with_tabs(vi->lines[i], cfg.tab_stop) - esc_str_overhead(vi->lines[i]); vi->nlinesv += vi->widths[i][1]/vi->width; } }
/* Recalculates virtual lines of a view with line wrapping. */ static void calc_vlines_wrapped(view_info_t *vi) { int i; vi->nlinesv = 0; for(i = 0; i < vi->nlines; i++) { vi->widths[i][0] = vi->nlinesv++; vi->widths[i][1] = get_screen_string_length(vi->lines[i]) - esc_str_overhead(vi->lines[i]); vi->nlinesv += vi->widths[i][1]/vi->width; } }