source: trunk/third/pango/TODO.xml @ 18248

Revision 18248, 16.3 KB checked in by ghudson, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18247, which included commits to RCS files with non-trunk default branches.
Line 
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          &ldquo;neutral&rdquo; 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 &ldquo;ransom-note&rdquo; 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 &lt;gavin@audiobasket.com&gt;</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 &lt;otaylor@redhat.com&gt;</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 &lt;otaylor@redhat.com&gt;</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 &lt;otaylor@redhat.com&gt;</contact>
407    </entry>
408  </section>
409</todo>
410
Note: See TracBrowser for help on using the repository browser.