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
|
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.)
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.
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)
* Underline attribute should be an enumeration (none/single/double/squiggle/low,
where low is below the ink rect - a style appropriate for underline
accelerators.)
|