1 | <!-- This is used to generate the online TODO list for GTK+ using |
---|
2 | the script docs/make-todo. Whenever a change to this file is |
---|
3 | committed to CVS,the file is run through make-todo and the online |
---|
4 | version updated. If you modify this file, you should check for |
---|
5 | parse errors by running: |
---|
6 | |
---|
7 | $ docs/make-todo TODO.xml > /dev/null |
---|
8 | |
---|
9 | before committing, or you may screw up the online version --> |
---|
10 | <todo> |
---|
11 | <title>Pango TODO list</title> |
---|
12 | <section> |
---|
13 | <title>Pango Core</title> |
---|
14 | <entry size="medium" status="0%" target="1.0"> |
---|
15 | <title>Support proper cluster boundary positioning</title> |
---|
16 | <description> |
---|
17 | <p> |
---|
18 | Support for correct positioning at cluster boundaries has |
---|
19 | not yet been implemented. In some languages, like Arabic, |
---|
20 | the cursor can be positioned within a cluster. In other |
---|
21 | languages, notably the languages of Southeast Asia, such as |
---|
22 | Thai, positioning within a cluster is incorrect. A single |
---|
23 | arrow key press should take the cursor over the entire |
---|
24 | cluster. |
---|
25 | </p> |
---|
26 | <p> |
---|
27 | In Pango currently, only the first mode is implemented. The |
---|
28 | commands to do keyboard cursor motion (such as |
---|
29 | <function>pango_layout_move_cursor_visually()</function>) |
---|
30 | move over entire clusters, and the functions between x/y and |
---|
31 | indices in the text buffer always return the character |
---|
32 | boundaries not cluster boundaries. |
---|
33 | </p> |
---|
34 | <p> |
---|
35 | The way this probably should work is that the trailing |
---|
36 | parameter to functions such as <code>Pango_layout_index_to_x()</code> |
---|
37 | should return, for such scripts, 0 or the number of chars |
---|
38 | in the cluster rather than 0 or 1. |
---|
39 | </p> |
---|
40 | </description> |
---|
41 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
42 | </entry> |
---|
43 | <entry size="medium" status="0%" target="1.0"> |
---|
44 | <title>Improve handling of boundary resolution</title> |
---|
45 | <description> |
---|
46 | <p> |
---|
47 | Handling of cluster/line/word breaks needs to be |
---|
48 | improved. Pango provides an interface for providing |
---|
49 | script-specific modules for doing such <em>boundary |
---|
50 | resolution</em>, but doesn't actually call the |
---|
51 | modules at present when doing break detection. Beyond this |
---|
52 | simple-to-fix oversight, both the default algorithm and |
---|
53 | script-specific algorithms need improvement. A better |
---|
54 | default algorithm is described in the Unicode 3.0 |
---|
55 | specification; that algorithm gets word motion correct in |
---|
56 | CJK scripts which the current algorithm doesn't. Having |
---|
57 | languages-specific algorithms for languages that need them, |
---|
58 | such as Thai, would also be nice. |
---|
59 | </p> |
---|
60 | </description> |
---|
61 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
62 | </entry> |
---|
63 | <entry size="medium" status="0%" target="1.0"> |
---|
64 | <title>Improve shaper and font determination algorithms</title> |
---|
65 | <description> |
---|
66 | <p> |
---|
67 | Support needs to be added for identifying characters as |
---|
68 | “neutral” with respect to the choice of language engine, |
---|
69 | needs to be added. Currently, a block of, say Arabic text, |
---|
70 | will be split into one-word runs of Arabic, with intervening |
---|
71 | one-character runs for the Basic shaper for the space |
---|
72 | character. This is, as might be imagined, a fairly major |
---|
73 | performance problem. In addition, it would be nice to improve |
---|
74 | the coherency of font choice across larger blocks of text |
---|
75 | to avoid “ransom-note” effects. Currently, if |
---|
76 | a single character in a block of text needs an accent not |
---|
77 | in the default font, then only that character will be chosen |
---|
78 | from a different font, which looks poor. (The other solution |
---|
79 | is simply to make sure that the default fonts are have |
---|
80 | reasonably complete sets of accents.) |
---|
81 | </p> |
---|
82 | </description> |
---|
83 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
84 | </entry> |
---|
85 | <entry size="medium" status="0%" target="1.0"> |
---|
86 | <title>Squash bugs</title> |
---|
87 | <description> |
---|
88 | <ul> |
---|
89 | <li><code>pango_glyph_string_set_size()</code> does not |
---|
90 | handle the fact that n_glyphs can be less than |
---|
91 | n_chars!</li> |
---|
92 | |
---|
93 | <li><code>pango_context_list_fonts()</code> does not |
---|
94 | properly suppress duplicates when multiple font maps are |
---|
95 | involved</li> |
---|
96 | </ul> |
---|
97 | </description> |
---|
98 | </entry> |
---|
99 | <entry size="small" status="0%" target="1.0"> |
---|
100 | <title>Determine how to localise numbers</title> |
---|
101 | <description> |
---|
102 | Some locales (mainly Arabic and Indic-script languages), |
---|
103 | want to localize numbers. How should this be done? |
---|
104 | </description> |
---|
105 | </entry> |
---|
106 | <entry size="small" status="0%" target="1.0?"> |
---|
107 | <title>Fix API inconsistencies</title> |
---|
108 | <description> |
---|
109 | <ul> |
---|
110 | <li>settle on either _free or _destroy</li> |
---|
111 | |
---|
112 | <li>s/num_chars/n_chars/ etc. (Always use n_ as enumeration |
---|
113 | prefix)</li> |
---|
114 | |
---|
115 | <li>change pango_context_set_size() to |
---|
116 | pango_context_set_font_size()</li> |
---|
117 | |
---|
118 | <li>Remove the extraneous font argument from the |
---|
119 | script_shape virtual function in ShapeEngine.</li> |
---|
120 | </ul> |
---|
121 | </description> |
---|
122 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
123 | </entry> |
---|
124 | <entry size="medium" status="0%" target="1.0?"> |
---|
125 | <title>Handle error reporting better</title> |
---|
126 | <description> |
---|
127 | The entire API needs a review for cases where errors should |
---|
128 | be propagated back to appliciations. (There is no point |
---|
129 | in propagating programming-error errors, like incorrectly |
---|
130 | <code>NULL</code> pointers back, those can just be warnings. |
---|
131 | For the place where interesting errors should be reported, |
---|
132 | we should use <code>GError</code>. |
---|
133 | </description> |
---|
134 | </entry> |
---|
135 | <entry size="big" status="10%" target=">1.0"> |
---|
136 | <title>Add support for additional writing directions</title> |
---|
137 | <description> |
---|
138 | <p> |
---|
139 | Pango needs support for additional writing directions. In |
---|
140 | the initial version of Pango, support is only present for |
---|
141 | right-to-left and left-to-right text. However, vertical |
---|
142 | writing is also important in many applications. |
---|
143 | </p> |
---|
144 | <p> |
---|
145 | One reason why vertical text has not been implemented in |
---|
146 | Pango-1.0 is that the target rendering system, X, has week |
---|
147 | facilities for handling text in other than a horizontal |
---|
148 | location. The obvious, though not the only, way of treating |
---|
149 | vertical writing is to keep the logic in |
---|
150 | <code>PangoLayout</code> the same, but to have an |
---|
151 | implicit transformation of the coordinate system. Doing it |
---|
152 | this way, the only extra code in Pango that is needed is to |
---|
153 | transform glyph metrics as appropriate. (some characters |
---|
154 | will rotate, some not), and also to handle selecting |
---|
155 | appropriate glyph variants when a font has separate variants |
---|
156 | for vertical and horizontal text. (CJK punctuation being a |
---|
157 | common example of this.) |
---|
158 | </p> |
---|
159 | </description> |
---|
160 | </entry> |
---|
161 | <entry size="big" status="0%" target="> 1.0"> |
---|
162 | <title>Consider moving to UCS-4 internally</title> |
---|
163 | <description> |
---|
164 | <p> |
---|
165 | The current use of UTF-8 internally needs to be reevaluated. |
---|
166 | Using UCS-4 would not have much memory overhead, since |
---|
167 | <code>PangoLayout</code> objects are not kept |
---|
168 | around in most cases. This change would simplify the |
---|
169 | internal code, and might make Pango more palatable to use |
---|
170 | for people who represent characters using UCS-2 or UCS-4 |
---|
171 | (for instance Java). (Note that mapping position in a UTF-16 |
---|
172 | string to and from position in a UTF-32 string is still an |
---|
173 | O(n) operation.) |
---|
174 | </p> |
---|
175 | <p> |
---|
176 | The main problem is that the current interfaces for mapping |
---|
177 | glyph position to and from byte offset would become O(n) and |
---|
178 | new interfaces would have to be added to map to and from |
---|
179 | character index. The worst breakage would be in the |
---|
180 | <code>PangoAttribute</code> interfaces, where |
---|
181 | byte offsets are directly exposed in structures. |
---|
182 | </p> |
---|
183 | </description> |
---|
184 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
185 | </entry> |
---|
186 | </section> <!-- Pango Core --> |
---|
187 | <section> |
---|
188 | <title>PangoLayout</title> |
---|
189 | <entry size="small" status="0%" target="1.0"> |
---|
190 | <title>Implement the spacing parameter</title> |
---|
191 | <description> |
---|
192 | The spacing parameter needs to be implemented as illustrated |
---|
193 | in the API docs. this should be a quick (10 minute) addition. |
---|
194 | </description> |
---|
195 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
196 | </entry> |
---|
197 | <entry size="small" status="0%" target="1.0"> |
---|
198 | <title>Optimize right-alignment for a single line</title> |
---|
199 | <description> |
---|
200 | When width == -1 and there is only a single line, then a lot |
---|
201 | of the <code>PangoLayout</code> code makes an |
---|
202 | unecessary call to <code>pango-layout_get_extents</code>. |
---|
203 | </description> |
---|
204 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
205 | </entry> |
---|
206 | <entry size="small" status="0%" target="1.0?"> |
---|
207 | <title>Error indicator underline</title> |
---|
208 | <description> |
---|
209 | It might be interesting to add an error-indicator underline |
---|
210 | type. (A red squiggle, as seen for auto-spell |
---|
211 | checking in products like Microsoft Word.) This would |
---|
212 | mean adding <code>PANGO_UNDERLINE_ERROR</code> to |
---|
213 | the <code>PangoUnderline</code> enumeration, and then |
---|
214 | adding the code to draw it to the various renderers |
---|
215 | for PangoLayout. (Rendering happens in three places now - |
---|
216 | pangox.c, gtk+/gtk/gtktextdisplay.c gtk+/gdk/gdkpango.c.) |
---|
217 | </description> |
---|
218 | <contact>gtk-i18n-list@gnome.org, Gavin Hurley <gavin@audiobasket.com></contact> |
---|
219 | </entry> |
---|
220 | <entry size="medium" status="0%" target="1.0?"> |
---|
221 | <title>Deal with proper change notification for PangoContext</title> |
---|
222 | <description> |
---|
223 | <p> |
---|
224 | <code>pango_layout_context_changed()</code> is a |
---|
225 | hack. Either the context should have change-notification, or else |
---|
226 | the layout should make a copy of the context when the context is |
---|
227 | set. Use signals for change-notification needs to wait |
---|
228 | on <code>GSignal</code> getting finished. |
---|
229 | </p> |
---|
230 | </description> |
---|
231 | </entry> |
---|
232 | <entry size="medium" status="0%" target="> 1.0"> |
---|
233 | <title>Add support for alternate line-break algorithms to <code>PangoLayout</code></title> |
---|
234 | <description> |
---|
235 | <p> |
---|
236 | Support should be added to Pango for alternate line-break |
---|
237 | algorithms. Currently the <code>PangoLayout</code> |
---|
238 | object supports on the simplest greedy algorithm for line |
---|
239 | breaking, and has no concept of hyphenation. While this is |
---|
240 | sufficient for simple applications such as text editors and |
---|
241 | entry widgets, it is is not sufficient for use in such |
---|
242 | settings as page-layout programs and even word processors. |
---|
243 | </p> |
---|
244 | <p> |
---|
245 | There are essentially two parts to this. First, we need |
---|
246 | to add ways of getting sufficient information about how |
---|
247 | the text behaves when hyphenated. We need some way of |
---|
248 | being able to determine the glyph deltas when the line |
---|
249 | is broken at a particular position. The second part |
---|
250 | is adding a mechanism to allow customizing the line-break |
---|
251 | algorithm of <code>PangoLayout</code>. This probably |
---|
252 | should be done by allowing <code>PangoLayout</code> |
---|
253 | to be subclassed. |
---|
254 | </p> |
---|
255 | </description> |
---|
256 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
257 | </entry> |
---|
258 | </section> > <!-- PangoLayout --> |
---|
259 | <section> |
---|
260 | <title>Shaper Modules</title> |
---|
261 | <entry size="medium" status="0%" target="1.0"> |
---|
262 | <title>Improve support for language-sensitive glyph selection</title> |
---|
263 | <description> |
---|
264 | <p> |
---|
265 | Support for language tagging and for selecting appropriate |
---|
266 | glyphs for a user's locale is not yet complete. The shaping |
---|
267 | engine needs to modify the fonts it chooses based on the |
---|
268 | language tag for text. (For untagged text, a default would |
---|
269 | come from user's locale setting.) |
---|
270 | </p> |
---|
271 | </description> |
---|
272 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
273 | </entry> |
---|
274 | </section> |
---|
275 | <section> |
---|
276 | <title>Fonts and Rendering</title> |
---|
277 | <entry size="big" status="10%" target=">1.0"> |
---|
278 | <title>Add support for a sophisticated font system</title> |
---|
279 | <description> |
---|
280 | <p> |
---|
281 | Pango needs to have well-integrated support for a |
---|
282 | sophisticated font system such as OpenType. The reference |
---|
283 | font implementation for Pango 1.0 has been X fonts, which |
---|
284 | really are not up to either producing high-quality output or |
---|
285 | providing sufficient information for internationalization. X |
---|
286 | fonts don't provide information about available ligatures or |
---|
287 | alternate glyph forms. They don't provide information about |
---|
288 | baseline positioning. They don't provide information about |
---|
289 | how to attach composing accents to base characters. |
---|
290 | </p> |
---|
291 | </description> |
---|
292 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
293 | </entry> |
---|
294 | </section> |
---|
295 | <section> |
---|
296 | <title>PangoX</title> |
---|
297 | <entry size="medium" status="0%" target="> 1.0"> |
---|
298 | <title>Handle multiple screens</title> |
---|
299 | <description> |
---|
300 | <p> |
---|
301 | Right now we assume a single resolution for all fonts on a display; |
---|
302 | but in theory, the resolution could be per-screen. To solve |
---|
303 | this, we would probably want to add a window argument to |
---|
304 | <code>pango_x_get_context()</code> and then have some sort of X specific font |
---|
305 | loading interface. |
---|
306 | </p> |
---|
307 | </description> |
---|
308 | </entry> |
---|
309 | <entry size="medium" status="0%" target="???"> |
---|
310 | <title>Fix pangox.c/get_font_metrics_from_string()</title> |
---|
311 | <description> |
---|
312 | <code>pangox.c/get_font_metrics_from_string()</code> needs to gutted and |
---|
313 | replaced with using pango_itemize(); to support this, we need |
---|
314 | the ability to specifiy a particular font to use when itemizing. |
---|
315 | This probably means adding a attribute type which contains |
---|
316 | a PangoFont *, and overrides the description. |
---|
317 | </description> |
---|
318 | </entry> |
---|
319 | <entry size="medium" status="0%" target="> 1.0"> |
---|
320 | <title>Handle on-the fly changes to the available fonts</title> |
---|
321 | <description> |
---|
322 | We don't handle the case where the set of fonts on the server |
---|
323 | changes, either for the cached list of fonts, or for for the |
---|
324 | information cached on the PANGO_COVERAGE_WIN on the X server. |
---|
325 | Fixing this is not easy - even if Pango tracks the change, |
---|
326 | applications may have the old set of fonts stored. |
---|
327 | </description> |
---|
328 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
329 | </entry> |
---|
330 | <entry size="small" status="0%" target="1.0?"> |
---|
331 | <title>Improve handling of unknown characters</title> |
---|
332 | <description> |
---|
333 | Currently unknown characters (characters not present in any |
---|
334 | of the available fonts) are shaped with the unknown glyph |
---|
335 | from one of the subfonts in the fontlist. Unfortunately, |
---|
336 | some fonts have invisible unknown glyph glyphs. We could |
---|
337 | fix this in various ways. First, we could institute a |
---|
338 | policy of drawing glyph 0 as an actual rectangle. Second, |
---|
339 | we could shape unknown glyphs to something more informative |
---|
340 | like [U2341]. Finally, we could look into using a font |
---|
341 | of substitute glyphs that indicate graphically some information |
---|
342 | about the substituted glyph like the block it comes from. |
---|
343 | </description> |
---|
344 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
345 | </entry> |
---|
346 | <entry size="small" status="0%" target="1.0"> |
---|
347 | <title>Squash bugs</title> |
---|
348 | <description> |
---|
349 | <ul> |
---|
350 | <li>It is not clear that X is interpreting the ink_rect the same way |
---|
351 | as we are. There is a bit of fudging in the underline drawing |
---|
352 | code to deal with this and make the underlines look symetric.</li> |
---|
353 | </ul> |
---|
354 | </description> |
---|
355 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
356 | </entry> |
---|
357 | </section> <!-- PangoX --> |
---|
358 | <section> |
---|
359 | <title>Documentation</title> |
---|
360 | <entry size="medium" status="20%" target="1.0"> |
---|
361 | <title>Document writing a shaper module</title> |
---|
362 | <description> |
---|
363 | <p> |
---|
364 | The process of writing a shaper needs to be documented. |
---|
365 | I've started on this a bit already, and the Thai shaper |
---|
366 | was written to serve as a straightforward example for |
---|
367 | this document. |
---|
368 | </p> |
---|
369 | </description> |
---|
370 | <contact>Owen Taylor <otaylor@redhat.com></contact> |
---|
371 | </entry> |
---|
372 | <entry size="small" status="0%" target="1.0"> |
---|
373 | <title>Integrate X fonts design doc into API docs</title> |
---|
374 | <description> |
---|
375 | <p> |
---|
376 | Much or all of the X Fonts document from pango.org needs to be moved |
---|
377 | into the API reference. |
---|
378 | </p> |
---|
379 | </description> |
---|
380 | <contact>Owen Taylor <otaylor@redhat.com></contact> |
---|
381 | </entry> |
---|
382 | </section> |
---|
383 | <section> |
---|
384 | <title>pango.org infrastructure</title> |
---|
385 | <entry size="medium" status="0%" target="n.a."> |
---|
386 | <title>Move bugs from TODO list to bug tracker</title> |
---|
387 | <description> |
---|
388 | <p> |
---|
389 | When the GNOME bug tracker is reliable again and moved to |
---|
390 | something like bugzilla, some of the small items on this |
---|
391 | page should be moved there. This page should really |
---|
392 | be about only major areas of enhancement. |
---|
393 | </p> |
---|
394 | </description> |
---|
395 | <contact>gtk-i18n-list@gnome.org</contact> |
---|
396 | </entry> |
---|
397 | <entry size="small" status="0%" target="n.a."> |
---|
398 | <title>Set up pango-list@pango.org</title> |
---|
399 | <description> |
---|
400 | <p> |
---|
401 | Set up pango-list@pango.org (redirect to pango-list@gnome.org). |
---|
402 | Some people are apparently not wanting to send general |
---|
403 | Pango questions to gtk-i18n-list. |
---|
404 | </p> |
---|
405 | </description> |
---|
406 | <contact>Owen Taylor <otaylor@redhat.com></contact> |
---|
407 | </entry> |
---|
408 | </section> |
---|
409 | </todo> |
---|
410 | |
---|