FriBidi's rendering pipeline (was Re: [FriBidi] what encoding?
where are the docs?)
Behdad Esfahbod
behdad at cs.toronto.edu
Wed Sep 21 00:51:43 PDT 2005
On Wed, 21 Sep 2005, Shachar Shemesh wrote:
> So if, say, in Wine, I'm asked to not perform shaping, I just skip the
> last call right before the reordering? I like.
Yes, but that means you don't get any mirroring. The
fribidi_shape calls fribidi_shape_arabic and
fribidi_shape_mirroring, both of which can be turned on/off
easily.
> >The whole Arabic part is optional, needless to say.
> >
> So long as we don't get anyone writing for Hebrew and missing out on
> these, that's fine. Is the traditional "log2vis" simply calling the new
> functions? I couldn't manage to figure it out (yes, I did pull the CVS
> sources, but I didn't have a whole lot of time to invest in it).
Yes, in fact I figured out the whole pipeline by looking at the
fribidi_log2vis implementation in lib/fribidi.c. But do not
forget the problem with fribidi_log2vis, it only works for
paragraphs rendered into one line. No line breaking step. So we
really want to let fribidi_log2vis fade away. I'm fine defining
two convenience functions instead, one for before line-breaking,
one for after.
> > The good
> >thing about this very low-level and verbose API is that you have
> >full control over the data flow and can change data in the middle
> >steps, if need be. For example, after getting the bidi types,
> >you can go on and change the types for new line characters to
> >make them line breaks, and two consecutive new line characters
> >paragraph separators.
> >
> Actually, and I mentioned it in the past (which probably triggered the
> change in the first place) Windows has an obscure and rarely used API by
> which you can actually override the types.
Yes, I remember that. And I've been thinking about adding an API
to change be able to override types, but I don't see it crucial
at this time. Part of the reason is that I'm thinking about this
other project, as part of project giulia, the GNU
Internationalization & Unicode LIbrary & Applications, that we
are starting to develop
(http://mces.blogspot.com/2005/09/vote-for-your-future.html),
which is about wrapping the Unicode Character Database. When
daydreaming, I see FriBidi becoming one of the many libraries of
giulia, and using the UCD wrapper there. We probably will have a
line-breaking library too. The idea is to have well-integrated
yet separate small libraries, that can be used separately, or in
orchestra together. Anyway, I see overriding Unicode data in the
UCD wrapper more fit...
> >I like to make mirroring verbose too, such that you call
> >fribidi_get_mirroring on the str and pass the result to
> >fribidi_shape, but I'm not sure it's a good idea, since what a
> >hypothetical fribidi_get_mirroring returns, practically replaces
> >the original string. In other words, mirroring is really part of
> >the shaping process itself.
> >
> I agree. We need to be able to turn it off, but seperating it is not
> crucial IMHO.
Agreed.
> Let's remeber that we need this API to be fast, as well as functional.
Speed is guaranteed so far, my only concern is as I mentioned,
the temporary memory usage. That's not important at all on
desktop systems though.
> Shachar
--behdad
http://behdad.org/
More information about the fribidi
mailing list