summaryrefslogtreecommitdiff
path: root/TODO.xml
blob: b621e1167e2df2c6c39b7e2786ae2f1108eb3a9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
<!-- This is used to generate the online TODO list for GTK+ using
     the script docs/make-todo. Whenever a change to this file is
     committed to CVS,the file is run through make-todo and the online
     version updated. If you modify this file, you should check for
     parse errors by running:

     $ docs/make-todo TODO.xml > /dev/null

     before committing, or you may screw up the online version --> 
<todo>
  <title>Pango TODO list</title>
  <section>
    <title>Pango Core</title>
    <entry size="medium" status="0%" target="1.0">
      <title>Support proper cluster boundary positioning</title>
      <description>
	<p>
	  Support for correct positioning at cluster boundaries has
	  not yet been implemented. In some languages, like Arabic,
	  the cursor can be positioned within a cluster.  In other
	  languages, notably the languages of Southeast Asia, such as
	  Thai, positioning within a cluster is incorrect. A single
	  arrow key press should take the cursor over the entire
	  cluster.
	</p>
	<p>
	  In Pango currently, only the first mode is implemented.  The
	  commands to do keyboard cursor motion (such as
	  <function>pango_layout_move_cursor_visually()</function>)
	  move over entire clusters, and the functions between x/y and
	  indices in the text buffer always return the character
	  boundaries not cluster boundaries.
	</p>
	<p>
	  The way this probably should work is that the trailing
	  parameter to functions such as <code>Pango_layout_index_to_x()</code>
	  should return, for such scripts, 0 or the number of chars
	  in the cluster rather than 0 or 1.
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="medium" status="0%" target="1.0">
      <title>Improve handling of boundary resolution</title>
      <description>
	<p>
	  Handling of cluster/line/word breaks needs to be
	  improved. Pango provides an interface for providing
	  script-specific modules for doing such <em>boundary
	    resolution</em>, but doesn't actually call the
	  modules at present when doing break detection. Beyond this
	  simple-to-fix oversight, both the default algorithm and
	  script-specific algorithms need improvement. A better
	  default algorithm is described in the Unicode 3.0
	  specification; that algorithm gets word motion correct in
	  CJK scripts which the current algorithm doesn't. Having
	  languages-specific algorithms for languages that need them,
	  such as Thai, would also be nice.
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="medium" status="0%" target="1.0">
      <title>Improve shaper and font determination algorithms</title>
      <description>
	<p>
	  Support needs to be added for identifying characters as
	  &ldquo;neutral&rdquo; with respect to the choice of language engine,
	  needs to be added. Currently, a block of, say Arabic text,
	  will be split into one-word runs of Arabic, with intervening
	  one-character runs for the Basic shaper for the space
	  character. This is, as might be imagined, a fairly major
	  performance problem. In addition, it would be nice to improve
	  the coherency of font choice across larger blocks of text
	  to avoid &ldquo;ransom-note&rdquo; effects. Currently, if
	  a single character in a block of text needs an accent not
	  in the default font, then only that character will be chosen
	  from a different font, which looks poor. (The other solution
	  is simply to make sure that the default fonts are have
	  reasonably complete sets of accents.)
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="medium" status="0%" target="1.0">
      <title>Squash bugs</title>
      <description>
	<ul>
	  <li><code>pango_glyph_string_set_size()</code> does not
	    handle the fact that n_glyphs can be less than
	    n_chars!</li>
	  
	  <li><code>pango_context_list_fonts()</code> does not
	    properly suppress duplicates when multiple font maps are
	    involved</li>
	</ul>
      </description>
    </entry>
    <entry size="small" status="0%" target="1.0?">
      <title>Fix API inconsistencies</title>
      <description>
	<ul>
	  <li>settle on either _free or _destroy</li>
	  
	  <li>s/num_chars/n_chars/ etc. (Always use n_ as enumeration
	  prefix)</li>
	  
	  <li>change pango_context_set_size() to
	  pango_context_set_font_size()</li>
	  
	  <li>Remove the extraneous font argument from the
	    script_shape virtual function in ShapeEngine.</li>
	</ul>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="medium" status="0%" target="1.0?">
      <title>Handle error reporting better</title>
      <description>
	The entire API needs a review for cases where errors should
	be propagated back to appliciations. (There is no point
	in propagating programming-error errors, like incorrectly
	<code>NULL</code> pointers back, those can just be warnings.
	For the place where interesting errors should be reported,
	we should use <code>GError</code>.
      </description>
    </entry>
    <entry size="big" status="10%" target=">1.0">
      <title>Add support for additional writing directions</title>
      <description>
	<p>
	  Pango needs support for additional writing directions.  In
	  the initial version of Pango, support is only present for
	  right-to-left and left-to-right text. However, vertical
	  writing is also important in many applications.
	</p>
	<p>
	  One reason why vertical text has not been implemented in
	  Pango-1.0 is that the target rendering system, X, has week
	  facilities for handling text in other than a horizontal
	  location. The obvious, though not the only, way of treating
	  vertical writing is to keep the logic in
	  <code>PangoLayout</code> the same, but to have an
	  implicit transformation of the coordinate system.  Doing it
	  this way, the only extra code in Pango that is needed is to
	  transform glyph metrics as appropriate.  (some characters
	  will rotate, some not), and also to handle selecting
	  appropriate glyph variants when a font has separate variants
	  for vertical and horizontal text.  (CJK punctuation being a
	  common example of this.)
	</p>
      </description>
    </entry>
    <entry size="big" status="0%" target="> 1.0">
      <title>Consider moving to UCS-4 internally</title>
      <description>
	<p>
	  The current use of UTF-8 internally needs to be reevaluated.
	  Using UCS-4 would not have much memory overhead, since
	  <code>PangoLayout</code> objects are not kept
	  around in most cases. This change would simplify the
	  internal code, and might make Pango more palatable to use
	  for people who represent characters using UCS-2 or UCS-4
	  (for instance Java). (Note that mapping position in a UTF-16
	  string to and from position in a UTF-32 string is still an
	  O(n) operation.)
	</p>
	<p>
	  The main problem is that the current interfaces for mapping
	  glyph position to and from byte offset would become O(n) and
	  new interfaces would have to be added to map to and from
	  character index. The worst breakage would be in the
	  <code>PangoAttribute</code> interfaces, where
	  byte offsets are directly exposed in structures.
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
  </section> <!-- Pango Core -->
  <section>
    <title>PangoLayout</title>
    <entry size="small" status="0%" target="1.0">
      <title>Implement the spacing parameter</title>
      <description>
	The spacing parameter needs to be implemented as illustrated
	in the API docs. this should be a quick (10 minute) addition.
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="small" status="0%" target="1.0">
      <title>Optimize right-alignment for a single line</title>
      <description>
	When width == -1 and there is only a single line, then a lot
	of the <code>PangoLayout</code> code makes an
	unecessary call to <code>pango-layout_get_extents</code>.
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="small" status="0%" target="1.0?">
      <title>Error indicator underline</title>
      <description>
	It might be interesting to add an error-indicator underline
	type. (A red squiggle, as seen for auto-spell
	checking in products like Microsoft Word.) This would
	mean adding <code>PANGO_UNDERLINE_ERROR</code> to
	the <code>PangoUnderline</code> enumeration, and then
	adding the code to draw it to the various renderers
	for PangoLayout. (Rendering happens in three places now -
	pangox.c, gtk+/gtk/gtktextdisplay.c gtk+/gdk/gdkpango.c.)
      </description>
      <contact>gtk-i18n-list@gnome.org, Gavin Hurley <gavin@audiobasket.com></contact>
    </entry>
    <entry size="medium" status="0%" target="1.0?">
      <title>Deal with proper change notification for PangoContext</title>
      <description>
	<p>
	  <code>pango_layout_context_changed()</code> 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. Use signals for change-notification needs to wait
	  on <code>GSignal</code> getting finished.
	</p>
      </description>
    </entry>
    <entry size="medium" status="0%" target="> 1.0">
      <title>Add support for alternate line-break algorithms to <code>PangoLayout</code></title>
      <description>
	<p>
	  Support should be added to Pango for alternate line-break
	  algorithms. Currently the <code>PangoLayout</code>
	  object supports on the simplest greedy algorithm for line
	  breaking, and has no concept of hyphenation. While this is
	  sufficient for simple applications such as text editors and
	  entry widgets, it is is not sufficient for use in such
	  settings as page-layout programs and even word processors.
	</p>
	<p>
	  There are essentially two parts to this. First, we need
	  to add ways of getting sufficient information about how
	  the text behaves when hyphenated. We need some way of
	  being able to determine the glyph deltas when the line
	  is broken at a particular position. The second part
	  is adding a mechanism to allow customizing the line-break
	  algorithm of <code>PangoLayout</code>. This probably
	  should be done by allowing <code>PangoLayout</code>
	  to be subclassed.
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
  </section> > <!-- PangoLayout -->
  <section>
    <title>Shaper Modules</title>
    <entry size="medium" status="0%" target="1.0">
      <title>Improve support for language-sensitive glyph selection</title>
      <description>
	<p>
	  Support for language tagging and for selecting appropriate
	  glyphs for a user's locale is not yet complete. The shaping
	  engine needs to modify the fonts it chooses based on the
	  language tag for text. (For untagged text, a default would
	  come from user's locale setting.)
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
  </section>
  <section>
    <title>Fonts and Rendering</title>
    <entry size="big" status="10%" target=">1.0">
      <title>Add support for a sophisticated font system</title>
      <description>
	<p>
	  Pango needs to have well-integrated support for a
	  sophisticated font system such as OpenType. The reference
	  font implementation for Pango 1.0 has been X fonts, which
	  really are not up to either producing high-quality output or
	  providing sufficient information for internationalization. X
	  fonts don't provide information about available ligatures or
	  alternate glyph forms. They don't provide information about
	  baseline positioning. They don't provide information about
	  how to attach composing accents to base characters.
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
  </section>
  <section>
    <title>PangoX</title>
    <entry size="medium" status="0%" target="> 1.0">
      <title>Handle multiple screens</title>
      <description>
	<p>
	  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 
	  <code>pango_x_get_context()</code> and then have some sort of X specific font 
	  loading interface.
	</p>
      </description>
    </entry>
    <entry size="medium" status="0%" target="???">
      <title>Fix pangox.c/get_font_metrics_from_string()</title>
      <description>
	<code>pangox.c/get_font_metrics_from_string()</code> 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.
      </description>
    </entry>
    <entry size="medium" status="0%" target="> 1.0">
      <title>Handle on-the fly changes to the available fonts</title>
      <description>
	We don't handle the case where the set of fonts on the server
	changes, either for the cached list of fonts, or for for the
	information cached on the PANGO_COVERAGE_WIN on the X server.
	Fixing this is not easy - even if Pango tracks the change,
	applications may have the old set of fonts stored.
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="small" status="0%" target="1.0?">
      <title>Improve handling of unknown characters</title>
      <description>
	Currently unknown characters (characters not present in any
	of the available fonts) are shaped with the unknown glyph
	from one of the subfonts in the fontlist. Unfortunately,
	some fonts have invisible unknown glyph glyphs. We could
	fix this in various ways. First, we could institute a
	policy of drawing glyph 0 as an actual rectangle. Second,
	we could shape unknown glyphs to something more informative
	like [U2341]. Finally, we could look into using a font
	of substitute glyphs that indicate graphically some information
	about the substituted glyph like the block it comes from.
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="small" status="0%" target="1.0">
      <title>Squash bugs</title>
      <description>
	<ul>
	  <li>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.</li>
	</ul>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
  </section> <!-- PangoX -->
  <section>
    <title>Documentation</title>
    <entry size="medium" status="20%" target="1.0">
      <title>Document writing a shaper module</title>
      <description>
	<p>
	  The process of writing a shaper needs to be documented.
	  I've started on this a bit already, and the Thai shaper
	  was written to serve as a straightforward example for
	  this document.
	</p>
      </description>
      <contact>Owen Taylor &lt;otaylor@redhat.com&gt;</contact>
    </entry>
    <entry size="small" status="0%" target="1.0">
      <title>Integrate X fonts design doc into API docs</title>
      <description>
	<p>
	  Much or all of the X Fonts document from pango.org needs to be moved
	  into the API reference.
	</p>
      </description>
      <contact>Owen Taylor &lt;otaylor@redhat.com&gt;</contact>
    </entry>
  </section>
  <section>
    <title>pango.org infrastructure</title>
    <entry size="medium" status="0%" target="n.a.">
      <title>Move bugs from TODO list to bug tracker</title>
      <description>
	<p>
	  When the GNOME bug tracker is reliable again and moved to
	  something like bugzilla, some of the small items on this
	  page should be moved there. This page should really
	  be about only major areas of enhancement.
	</p>
      </description>
      <contact>gtk-i18n-list@gnome.org</contact>
    </entry>
    <entry size="small" status="0%" target="n.a.">
      <title>Set up pango-list@pango.org</title>
      <description>
	<p>
	  Set up pango-list@pango.org (redirect to pango-list@gnome.org).
	  Some people are apparently not wanting to send general
	  Pango questions to gtk-i18n-list.
	</p>
      </description>
      <contact>Owen Taylor &lt;otaylor@redhat.com&gt;</contact>
    </entry>
  </section>
</todo>