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?
|