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.) * There is currently a serious problem in that every attribute causes items to be broken into separately shaped runs. That means that selections can't be handled as background/foreground attributes. Since, for selections, you need to be able to select partial glyphs, doing this any different would basically mean having to separate out these attributes from the rest of the attributes, and handle them separately while rendering a layout. 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?