diff options
author | Thomas White <taw@bitwiz.org.uk> | 2015-10-19 20:16:09 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2015-10-19 20:16:17 +0100 |
commit | 5fec4438867ec944f02d1fdff46c70e1e36fb18a (patch) | |
tree | 2d3d8b3fc7541f876416f6f8205f3817e497589d /src | |
parent | 6b4ac5c656fd35a13a74ad1ed215a7182046fa1f (diff) |
Paragraph start lines (sort of)
Diffstat (limited to 'src')
-rw-r--r-- | src/frame.h | 1 | ||||
-rw-r--r-- | src/wrap.c | 38 |
2 files changed, 34 insertions, 5 deletions
diff --git a/src/frame.h b/src/frame.h index 8cb0e79..f22f5f8 100644 --- a/src/frame.h +++ b/src/frame.h @@ -64,6 +64,7 @@ struct frame int n_paragraphs; struct wrap_line **paragraphs; + int *paragraph_start_lines; /* The rectangle allocated to this frame, determined by the renderer */ double x; @@ -879,6 +879,34 @@ void show_boxes(struct wrap_line *boxes) } +static int wrap_everything(struct frame *fr, double wrap_w) +{ + int i; + + fr->paragraph_start_lines = malloc(fr->n_paragraphs*sizeof(int)); + if ( fr->paragraph_start_lines == NULL ) { + fprintf(stderr, "Failed to allocate paragraph start lines\n"); + return 1; + } + + /* Split paragraphs into lines */ + fr->paragraph_start_lines[0] = 0; + for ( i=0; i<fr->n_paragraphs; i++ ) { + + //int n; + + /* Choose wrapping algorithm here */ + //knuth_suboptimal_fit(para, wrap_w, fr, rho); + first_fit(fr->paragraphs[i], wrap_w, fr); + + //fr->paragraph_start_lines = n; + + } + + return 0; +} + + /* Wrap the StoryCode inside "fr->sc" so that it fits within width "fr->w", * and generate fr->lines */ int wrap_contents(struct frame *fr) @@ -921,11 +949,11 @@ int wrap_contents(struct frame *fr) } } while ( para != NULL ); - /* Split paragraphs into lines */ - for ( i=0; i<fr->n_paragraphs; i++ ) { - /* Choose wrapping algorithm here */ - //knuth_suboptimal_fit(para, wrap_w, fr, rho); - first_fit(fr->paragraphs[i], wrap_w, fr); + if ( fr->n_paragraphs > 0 ) { + if ( wrap_everything(fr, wrap_w) ) return 1; + } else { + fr->paragraph_start_lines = NULL; + return 0; } /* If the last paragraph ended with an EOP, add an extra line */ |