diff options
author | Dylan Thacker-Smith <dylan.ah.smith@gmail.com> | 2024-03-28 11:49:46 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-03-28 11:51:10 +0100 |
commit | 1134fdd1b369119d0d6992e3120bb5f7c788b697 (patch) | |
tree | 7c1950fd1e4790b4f610b172261fd9b58ba2298e | |
parent | fe0a76b2bca12b13982ad66bafadc0d6c1681d00 (diff) |
patch 9.1.0223: code duplication in loop to add active text propertiesv9.1.0223
Problem: There are two dense conditions with duplication that needs to
be kept in sync between the while loop break condition and the
condition to skip certain text properties.
Solution: Refactor the loop by moving while loop conditions into the
body of the while loop so they can be shared with skip
conditions. `break` and an `active` variable are used to
handle the outcome of these merged conditions.
(Dylan Thacker-Smith)
closes: #14307
Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | src/drawline.c | 43 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 26 insertions, 19 deletions
diff --git a/src/drawline.c b/src/drawline.c index 8ec9e5f280..81577be42a 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -2073,29 +2073,34 @@ win_line( --bcol; # endif // Add any text property that starts in this column. - while (text_prop_next < text_prop_count - && (text_props[text_prop_next].tp_col == MAXCOL - ? (*ptr == NUL - || (bcol == 0 - && (text_props[text_prop_next].tp_flags - & TP_FLAG_ALIGN_ABOVE))) - : bcol >= text_props[text_prop_next].tp_col - 1)) + while (text_prop_next < text_prop_count) { - // With 'nowrap' and not in the first screen line only "below" - // text prop can show. - if (text_props[text_prop_next].tp_col == MAXCOL - ? (wp->w_p_wrap + int active; + textprop_T *tp = &text_props[text_prop_next]; + if (tp->tp_col == MAXCOL) + { + if (bcol == 0 && (tp->tp_flags & TP_FLAG_ALIGN_ABOVE)) + active = TRUE; + else if (*ptr != NUL) + break; + else + { + // With 'nowrap' and not in the first screen line only "below" + // text prop can show. + active = wp->w_p_wrap || wlv.row == startrow - || (text_props[text_prop_next].tp_flags - & TP_FLAG_ALIGN_BELOW) - || (bcol == 0 - && (text_props[text_prop_next].tp_flags - & TP_FLAG_ALIGN_ABOVE))) - : bcol <= text_props[text_prop_next].tp_col - 1 - + text_props[text_prop_next].tp_len) + || (tp->tp_flags & TP_FLAG_ALIGN_BELOW); + } + } + else { - text_prop_idxs[text_props_active++] = text_prop_next; + if (bcol < tp->tp_col - 1) + break; + active = bcol <= tp->tp_col - 1 + tp->tp_len; } + + if (active) + text_prop_idxs[text_props_active++] = text_prop_next; ++text_prop_next; } diff --git a/src/version.c b/src/version.c index 3fcbb99811..7176d67b06 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 223, +/**/ 222, /**/ 221, |