xmlgraphics-fop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Bowditch <bowditch_ch...@hotmail.com>
Subject Re: Generalized Knuth-Plass Linebreaking Algorithm
Date Tue, 04 Apr 2006 08:02:53 GMT
Simon Pepping wrote:

> Hello,
> 
> Some time ago Manuel Mall pointed out a number of problems with
> linebreaking in FOP. Specifically, there are some hard to solve
> problems with suppression of whitespace before a linebreak.

This is excellent news Simon. I was a little concerned when Manuel 
pointed out these problems and it became clear that the Knuth algorithm 
could not solve them easily. I've only glanced at your proposal, so 
can't comment on the details, but anything that gives us a way foward 
with these whitespace handling problems has got to be good :)

> 
> I propose that the problems can be solved using a generalized set of
> building blocks (a.k.a. Knuth elements):
> 
> 1.  Box, with elastic width. A box has two boolean properties:
> 
>     1.  suppress-at-linebreak, default value false. According to
>         the FO specification, in the default case in an FO text
>         it is true for the space character U+0020. The user may
>         deviate from the default and set it to false for the
>         space character, and to true for other characters.
> 
>     2.  is-BP, default value false. This property indicates
>         whether a box corresponds to a border and/or a padding
>         width. It is true for boxes which are generated by
>         padding widths and borders.

One minor nit: could you rename is-BP to isBorderPadding? The 
suppress-at-linebreak property is a long self explanatory name, whilst 
isBP is somewhat cryptic. I initially thought it mean is Block 
Progression....

> 
> 2.  Penalty, with a penalty value and two elastic widths. When the
>     penalty element is the chosen linebreak, it contributes the
>     first elastic width before the linebreak and the second elastic
>     width after the linebreak.
> 
> Penalties are legal breakpoints. Boxes are not.
> 
> On my website I have published a detailed account of my proposal in
> the essay 'Generalized Knuth-Plass Linebreaking Algorithm'. In order
> to test my ideas in practice, I have written a simple implementation
> in Java of this approach.
> 
> See http://www.leverkruid.nl/GKPLinebreaking/index.html.
> 
> Please, let me know what you think of it.

Good work and thanks,

Chris



Mime
View raw message