Shaping ======= Layout Driver ============= The PangoLayout object is a highlevel driver that takes an attributed string and produces lines of glyphs. * Figure out better ways of doing line breaks. (This may involve implementing the TeX/Raph x0-x1 stuff for line breaks.) * Add spacing parameter as illustrated; this should be a quick (10 minute) addition. * Although PangoLayout isn't intended to handle large amounts of text, it should be able to handle embedded "\n" and simple multiple paragraphs. This could be done entirely within pango_layout_check_lines() * pango_layout_context_changed() is a hack. Either the context should have change-notification, or else the layout should make a copy of the context when the context is set. * optimize right alignment for width == -1 and only a single line. (Currently this causes a useless call to gtk_layout_get_extents.) X rendering =========== * Right now we assume a single resolution for all fonts on a display; but in theory, the resolution could be per-screen. To solve this, we would probably want to add a window argument to pango_x_get_context() and then have some sort of X specific font loading interface. * It is not clear that X is interpreting the ink_rect the same way as we are. There is a bit of fudging in the underline drawing code to deal with this and make the underlines look symetric. * pangox.c/get_font_metrics_from_string() needs to gutted and replaced with using pango_itemize(); to support this, we need the ability to specifiy a particular font to use when itemizing. This probably means adding a attribute type which contains a PangoFont *, and overrides the description. * pangox.c needs to be split into at least two separate files. ( Probably along the lines of 1) font map 2) font 3) rendering ) Other rendering engines ======================= * Somebody should start working on a libart font-system / renderer soon, to make sure that the interfaces are suitable. * FreeType-2.0 support could be very interesting, with the OpenType that it has. Engines ======= * Switch engines to be indentified by properties, instead of hardcoded role/language. (?) Language Modules ================ * It would be nice to have X based shapers for a few more scripts; Hindi is one obvious need. (Actually, there may be a need for a generic framework for Indic shapers to be developed. A libpango-indic...) * Once we have a libart renderer, porting Raph's devanagari shaper to Pango and C (from Perl) would be a cool demo and test case. * The clusters set by the current modules need to be set. * Tamil module should be switched over to libunicode from utils.c stuff. Documentation ============= * Much or all of the X Fonts document from pango.org needs to be moved into the API reference. Fonts ===== * Add handling for baseline adjustment * pango_context_list_fonts() does not properly suppress duplicates when multiple font maps are involved General ======= * unicode_next_utf8() is extensively used on strings which are not guaranteed to be NULL terminated. This is a BUG. Once I agree with Tom Tromey on a change to libunicode to make the operation more efficient, these need to be gone through one-by-one. * Remove the extraneous font argument from the script_shape virtual function in ShapeEngine. * rename pango_context_set_size() to pango_context_set_font_size() * settle on either _free or _destroy * PangoAttrList currently takes the policy of "most recent wins" when multiple attributes of the same type are present for a range. It would map better on the TkText tag-based API if attributes also had a depth/priority and "most recent wins" only applied for attributes of the same priority. * Add a "make test" target to examples/, add environment variables to point to module and font alias files, remove the code that loads these from the current directory. (There are security implications with the current stuff) * Report errors from functions, these errors include such things. - Invalid string - Font does not match Probably the right thing to do here is to use something very close to the GConf API ... see Havoc's GException proposal. * Allow UTF8 strings with embedded NULLs. * Write a small default shaping engine that only draws a placeholder character ... and does that in a way that always works. * Finish coverting over from utils.c to Tom Tromey's libunicode. Add the remaining useful functions from utils.c into libunicode. * s/num_chars/n_chars/ etc. (Always use n_ as enumeration prefix) * Fix handling of 'trailing' in x_to_index() to handle clusters with more than one character where positioning is not allowed inside the cluster. Uniscript sets trailing as 0 or number of j characters in the glyph. (Trailing is currently a boolean for us.) * pango_font_get_metrics() currently takes a language tag, but really uses that to find out one or more _scripts_; should we define script tags and put those (optionally?) in the interface?