summaryrefslogtreecommitdiff
path: root/TODO
blob: 8c8f608da113b621fd484af47c581433cfd1f8b9 (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
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?