Re: Hyphenation support in Pango ( / Cairo )



Just a thought, assuming I've understood correctly - can't you use the PangoLogAttr structure (i.e. check what's in it) while people are typing their input (as you can use Pango for rendering and cursor placement etc in this context anyway) and then generate a hyphen when and where you want (e.g. mid word, or when line wraps etc) based on the is_char_break or is_line_break values in PangoLogAttr?

I guess you'd be checking these values in real time as someone typed the input. pango_layou_get_log_attrs() is one API giving access to the structure, not sure if there are others? Might be worth checking the different Pango API pages for this http://developer.gnome.org/pango/stable/index.html

Cheers
Alex

On 10/05/2011 16:41, Roland Schwarz wrote:
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 the Cairo 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

_______________________________________________
gtk-i18n-list mailing list
gtk-i18n-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-i18n-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]