aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2017-01-13 23:01:34 +0100
committerThomas White <taw@bitwiz.org.uk>2017-01-13 23:01:34 +0100
commit16f61aac97f2214167e35c70a1d4d4791254217f (patch)
tree15a9d4e2202d786007da183596f1e95b62299cc6
parent8c8ddb744cbe01fc16a34b10766b9693fd7d00f1 (diff)
Fix paragraph merging
-rw-r--r--src/frame.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/frame.c b/src/frame.c
index 24f50ad..d87e9d3 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -921,6 +921,7 @@ void merge_paragraphs(struct frame *fr, int para)
int i, j;
size_t offs;
SCBlock *scblock;
+ SCBlock *n;
if ( para >= fr->n_paras-1 ) {
printf("Paragraph number too high to merge.\n");
@@ -946,8 +947,10 @@ void merge_paragraphs(struct frame *fr, int para)
/* Locate the newline which we have just deleted. */
scblock = p1->runs[p1->n_runs-1].scblock;
+ n = sc_block_next(scblock);
offs = p1->runs[p1->n_runs-1].scblock_offs_bytes;
offs += p1->runs[p1->n_runs-1].len_bytes;
+
if ( sc_block_contents(scblock)[offs] == '\n' ) {
scblock_delete_text(scblock, offs, offs+1);
@@ -968,6 +971,17 @@ void merge_paragraphs(struct frame *fr, int para)
if ( done ) break;
}
+ } else if ( (n!=NULL) && (sc_block_contents(n)[0] == '\n') ) {
+
+ /* It's in the following SCBlock instead */
+
+ const char *c = sc_block_contents(n);
+ if ( strlen(c) == 1 ) {
+ sc_block_delete(scblock, n);
+ } else {
+ scblock_delete_text(n, 0, 1);
+ }
+
} else {
printf("Couldn't find newline!\n");
printf("Have '%s'\n", sc_block_contents(scblock)+offs);