diff -ruN -x 'Makefile*' -x autom4te.cache -x 'config*' -x doc -x libtool -x .deps -x .libs -x '*a' -x '*o' -x paps -x '*orig' -x 'stamp*' -x 'test*' paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c --- paps-0.6.6.orig/src/paps.c 2006-05-03 18:09:58.000000000 +0900 +++ paps-0.6.6/src/paps.c 2006-08-31 17:57:47.000000000 +0900 @@ -88,6 +88,7 @@ PangoLayoutLine *pango_line; PangoRectangle logical_rect; PangoRectangle ink_rect; + int formfeed; } LineLink; typedef struct _Paragraph Paragraph; @@ -98,6 +99,7 @@ char *text; int length; int height; /* Height, in pixels */ + int formfeed; PangoLayout *layout; }; @@ -428,7 +430,7 @@ fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); wc = 0; } - if (!*p || !wc || wc == '\n') + if (!*p || !wc || wc == '\n' || wc == '\f') { Paragraph *para = g_new (Paragraph, 1); para->text = last_para; @@ -442,6 +444,11 @@ pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); para->height = 0; + if (wc == '\f') + para->formfeed = 1; + else + para->formfeed = 0; + last_para = next; result = g_list_prepend (result, para); @@ -469,6 +476,7 @@ while(par_list) { int para_num_lines, i; + LineLink *line_link; Paragraph *para = par_list->data; para_num_lines = pango_layout_get_line_count(para->layout); @@ -476,12 +484,15 @@ for (i=0; iformfeed = 0; line_link->pango_line = pango_layout_get_line(para->layout, i); pango_layout_line_get_extents(line_link->pango_line, &ink_rect, &logical_rect); line_link->logical_rect = logical_rect; + if (para->formfeed && i == (para_num_lines - 1)) + line_link->formfeed = 1; line_link->ink_rect = ink_rect; line_list = g_list_prepend(line_list, line_link); } @@ -504,6 +515,7 @@ int column_y_pos = 0; int page_idx = 1; int pango_column_height = page_layout->column_height * page_layout->pt_to_pixel * PANGO_SCALE; + LineLink *prev_line_link = NULL; start_page(OUT, page_idx); @@ -516,8 +528,9 @@ PangoLayoutLine *line = line_link->pango_line; /* Check if we need to move to next column */ - if (column_y_pos + line_link->logical_rect.height - >= pango_column_height) + if ((column_y_pos + line_link->logical_rect.height + >= pango_column_height) || + (prev_line_link && prev_line_link->formfeed)) { column_idx++; column_y_pos = 0; @@ -547,6 +560,7 @@ column_y_pos += line_link->logical_rect.height; pango_lines = pango_lines->next; + prev_line_link = line_link; } eject_page(OUT); return page_idx;