[cairo] Hyphenation support with Cairo/Pango

Roland Schwarz schwarzr at uni-trier.de
Tue May 10 04:16:47 PDT 2011


Dear subscribers,

I hope that my following question is not too far away from the common 
discussion context in this list, I have a question regarding  the Pango 
library and hyphenation of textual input.

At the moment I am working on a project that deals with the typesetting 
of so called 'critical editions' from language and literature studies. 
Our goal is to build a tool that can process given XML input with some 
user definable stylesheets into a - primarily - PDF output.
The coding platform is F# with the .net framework, and I have to keep in 
mind only using the features that are available on mono too, as this 
should be kind of platform independent ;-)

To avoid reinventing the wheel we tried out parts of the Cairo/Pango 
library, and got good results with the output in PDF format, basic line 
breaking and text formatting. As our development continues, we have the 
problem that we need to support a kind of hyphenation for our textual 
input, and that is the core of my current problem: Is there any kind of 
useable hyphenation support in the Pango library ?

I have found several discussions about this point, some of them 8 years 
old, but nothing so far that looks like a code example or a 'how to' 
e.g. plug in some hyphenation patterns known from teX or something similar.

To explain the current approach and why we are looking for a kind of 
automatic hyphenation, there is a small code extract from the current 
'playground prototype' ;-) .
(Yes, thats C#, even if I wrote F#. The source is currently a 
combination of (C&F)# Libraries)

                 Pango.Layout pgLayout2 = 
Pango.CairoHelper.CreateLayout(ctx);
                 pgLayout2.Wrap = Pango.WrapMode.Word;
                 pgLayout2.Alignment = Pango.Alignment.Left;
                 pgLayout2.SingleParagraphMode = true;
                 pgLayout2.Justify = true;
                 pgLayout2.Width = Convert.ToInt32(GlobalPageWidth * 
Pango.Scale.PangoScale);
                 pgLayout2.Spacing = Convert.ToInt32(5 * 
Pango.Scale.PangoScale);
                 pgLayout2.FontDescription = 
Pango.FontDescription.FromString("Linux Libertine 8");
                 pgLayout2.SetMarkup("..some longer raw text input...");
                 var resultlines = pgLayout2.Lines

So, what we are doing is using the Layout Class of Pango, pass some 
formatting attributes to it and let the layout-class do the work to 
split the given text into Layoutlines. Those layout lines are then used 
for the current pagination algorithm, as they also include the most 
relevant geometric information and can be just placed in the pdf output 
using a Context.moveto(x,y) and the showLayoutline-function. The feature 
we are now looking for is a build-in hyphenation with the Layout-class.

So, the question is: Is there anything like this ?

Thanks alot for any information about this !
This text will be also posted on thePango mailing list as well as there 
are two different mailing lists given for Cairo and Pango. I hope not to 
offend someone with this procedure.

Greetings !

roland schwarz

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20110510/08c4fb77/attachment.html>


More information about the cairo mailing list