diff options
author | Owen Taylor <otaylor@redhat.com> | 2000-02-24 04:03:49 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-02-24 04:03:49 +0000 |
commit | d9c46655cceb1263ed8d5e8ef0d0f703b881a443 (patch) | |
tree | dfdc4417013de556455105f0012fba95b6d3fde7 | |
parent | 6654a22891abb31fab2a68e9b67d2c3e46f79d69 (diff) | |
download | gtk+-d9c46655cceb1263ed8d5e8ef0d0f703b881a443.tar.gz |
Added XML-structured TODO file. python script to turn TODO.xml into pretty
Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com>
* TODO.xml: Added XML-structured TODO file.
* docs/make-todo: python script to turn TODO.xml into
pretty XML output.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 6 | ||||
-rw-r--r-- | TODO.xml | 236 | ||||
-rwxr-xr-x | docs/make-todo | 340 |
9 files changed, 618 insertions, 0 deletions
@@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 27306256e5..652bb532c6 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 27306256e5..652bb532c6 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 27306256e5..652bb532c6 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 27306256e5..652bb532c6 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 27306256e5..652bb532c6 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 27306256e5..652bb532c6 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Wed Feb 23 22:59:50 2000 Owen Taylor <otaylor@redhat.com> + + * TODO.xml: Added XML-structured TODO file. + * docs/make-todo: python script to turn TODO.xml into + pretty XML output. + 2000-02-23 Jonathan Blandford <jrb@redhat.com> * gtk/gtkstyle.c (gtk_default_draw_handle): add a 'paned' mode to diff --git a/TODO.xml b/TODO.xml new file mode 100644 index 0000000000..0ab270c3a9 --- /dev/null +++ b/TODO.xml @@ -0,0 +1,236 @@ +<todo> + + <section> + <title>GDK</title> + + <entry size="medium" status="70%" target="1.4"> + <title>Add backing store support</title> + <description> + <p> + GTK+'s drawing model involves clearing to a background, and + then drawing widgets on top of this. Without having + backing-store support, this results in flickering in various + situations. Backing store cannot be added widget-by-widget, + because the drawing in a particular window is not confined + to a single widget. Instead it needs to be added per GDK + window. + </p> + <p> + The way this is done is by having + <tt>gdk_window_begin_paint()</tt> + and <tt>gdk_window_end_paint()</tt> functions that + redirect all drawing to a particular window to an offscreen + pixmap, and then copy that offscreen pixmap back onto the + screen when the paint operation is done. The implementation + of this is mostly complete in the <tt>gtk-no-flicker</tt> branch of + GTK+. + </p> + </description> + <url>http://www.gtk.org/~otaylor/gtk/1.4/gdk-drawing.html</url> + <contact>Owen Taylor <otaylor@redhat.com></contact> + </entry> + + <entry size="medium" status="70%" target="1.4"> + <title>32 Bit Coordinates</title> + <description> + <p> + GTK+-1.2 and earlier share X's limitation on the + size of coordinates and restrict all dimensions + to 16 bit quantities. By clever use of X it is + possible to lift this restriction and present a + full 32-bit space to the user. + </p> + </description> + <url>http://www.gtk.org/~otaylor/gtk/1.4/gdk-drawing.html</url> + <contact>Owen Taylor <otaylor@redhat.com></contact> + </entry> + + <entry size="small" status="0%" target="1.4"> + <title>Customizable double-click timeout</title> + <description> + <p> + The current fixed double-click timeout in GTK+ + is too small for some users. This needs to be + customizable + </p> + </description> + <contact>gtk-devel-list@redhat.com</contact> + <bugs>#3958</bugs> + </entry> + </section> + + <section> + <title>Internationalization</title> + + <entry size="big" status="0%" target="1.4"> + <title>Integrate Pango</title> + <description> + <p> + The purpose of the Pango project is to provide a system for + layout and rendering of internationlized text. It handles + most of the issues necessary to + </p> + </description> + <url>http://www.pango.org</url> + <contact>gtk-i18n-list@redhat.com</contact> + </entry> + + <entry size="medium" status="20%" target="1.4"> + <title>Switch to using UTF-8</title> + <description> + <p> + This is closely related to Pango integration. Pango deals + with all strings in terms of UTF-8; by switching GTK+ over + to UTF-8 we make it considerably simpler for developers to + support multiple languages properly while still retaining + a large degree of compatiblity with existing programs. + </p> + <p> + Some work has already been done on this as part of the Win32 + port, since the Win32 port is currently using UTF-8 for all + strings. In general, this should be an easy job; the hardest + parts are places like GtkFileSelection, cut and paste, and + input method support where there is interaction between GTK+ + and the operating system. + </p> + </description> + <contact>gtk-i18n-list@redhat.com</contact> + </entry> + + <entry size="big" status="0%" target="1.4"> + <title>Rewrite Input Method Support</title> + <description> + <p> + Current support for Input Methods is done via XIM, with + supported styles being over-the-spot and the root-window + styles. However, the over-the-spot style is not going to + work well with the Pango integration, since it relies on the + text rendering in the program being done in the standard + Xlib style, so it will be necessary to also support + on-the-spot input. On-the-spot input is done by supplying a + set of callbacks that are invoked by the input methods. + </p> + <p> + While adding the above support, it may be desirable to + generalize the input-method support to the point where + </p> + </description> + <contact>gtk-i18n-list@redhat.com</contact> + </entry> + </section> + + <section> + <title>GTK+ Core</title> + + <entry size="big" status="25%" target="1.4"> + <title>Split GtkObject out</title> + <description> + <p> + The GTK+ object system is already in use in quite a few different + non-GUI applications; it would be desirable for these uses + to have the object system separated from the GUI portions + of GTK+. + </p> + </description> + <contact>Tim Janik <timj@gtk.org></contact> + </entry> + + <entry size="big" status="0%" target="1.4"> + <title>Allow argument customization</title> + <description> + <p> + Many types of object arguments (expander style in the CList, + default padding in button boxes, etc), conceptually go with + the theme, or as user preferences; they should not be set by + a particular program. + </p> + <p> + There needs to be a mechanism for themes to be able to + control these arguments from the RC file. + </p> + </description> + </entry> + + <entry size="medium" status="0%" target="1.4"> + <title>Allow global customization</title> + <description> + <p> + There are a number of global parameters in GTK+ and GDK that should be + customizable by the user, such as the double-click timeout, + or whether widgets should be backing-stored by default. + </p> + <p> + If we had argument customization from an RC file, it might + be possible to do this simply with a global object with + arguments for the various global parameters that was + customized in the same fashion as object arguments. + </p> + </description> + </entry> + </section> + + <section> + <title>GTK+ Widgets</title> + + <entry size="small" status="0%" target="1.4"> + <title>Make GtkFrame use a label</title> + <description> + <p> + The title of a frame should simply be another child widget + which, by default, holds a label widget. This will important + with Pango where proper text behavior will be more complex to + implement, but is also useful for certain user-interface + designs. (It can be useful, for example, to put a checkbutton + in that slot.) + </p> + </description> + <contact>gtk-devel-list@redhat.com</contact> + </entry> + + <entry size="big" status="50%" target="1.4"> + <title>Replace GtkText Widget</title> + <description> + <p> + The GtkText widget is badly in need of replacement, since it is + buggy and insufficiently feature rich. There are a number + of possible candidates for a replacement, with the most + promising at the current time being Havoc Pennington's + (hp@redhat.com) port of the Tk Text widget. + </p> + <p> + As part of this job it will be necessary to add + <a href="http://www.pango.org">Pango</a> support to the + replacement. The structure of the Tk text widget port seems + suited to this as it works paragraph-by-paragraph, and + Pango works at a sub-paragraph scale. + </p> + </description> + <contact>gtk-devel-list@redhat.com</contact> + </entry> + + <entry size="big" status="0%" target="> 1.4"> + <title>Add unified set of List/Tree/Grid widgets</title> + <description> + <p> + Currently, GTK+ has a large number of list and tree widgets + (GtkList, GtkTree, GtkCList, GtkCTree), non of which are + ideal. The GtkList and GtkTree widgets perform badly on large + sets. (GtkTree widget is also quite buggy.) GtkCList + and GtkCTree mostly solve the size problem, but are quite + complex and, despite that, not very flexible. They are limited to + displaying pixmaps and text, and neither support arbitrary + widgets nor custom drawing functions. + </p> + <p> + In addition to list and tree widgets, a closely related need + is a sheet widget that displays a (possibly editable) 2-D grid. + It would be desirable to have a complete set of widgets that + could be presented as the one-true-solution for these needs. + Model/View techniques could be used effectively to increase + both the simplicity and power of the interfaces. + </p> + </description> + <contact>gtk-devel-list@redhat.com</contact> + </entry> + </section> +</todo> diff --git a/docs/make-todo b/docs/make-todo new file mode 100755 index 0000000000..498a1e8a41 --- /dev/null +++ b/docs/make-todo @@ -0,0 +1,340 @@ +#!/usr/bin/python + +import xmllib; +import sys; +import string +import re + +def html_subst(s): + if s.group(1) != None: + return s.group(0) + elif s.group(2) != None: + return '<a href="' + s.group(0) + '">' + s.group(0) + '</a>' + elif s.group(3) != None: + return '<a href="mailto:' + s.group(0) + '">' + s.group(0) + '</a>' + +def htmlify(str): + return re.sub ("(<[^>]*>)|(http://[~.:/\w-]+)|([\w._!-]+@[\w_-]+).[\w_-]+", html_subst, str) + +def bug_subst(s): + if s.group(1) != None: + return s.group(0) + else: + n = s.group(2) + return '<a href="http://bugs.gnome.org/db/%s/%s.html">#%s</a>' % (n[0:2], n, n) + +def bugify(str): + str = re.sub ("(<[^>]*>)|#(\d+)", bug_subst, str) + return htmlify(str) + +def make_id(str): + return re.sub ("[^a-z]","-", string.lower(str)) + +class ParseError (Exception): + pass + +class Entry: + def __init__(self): + self.description = None + self.title = None + self.url = None + self.contact = None + self.bugs = None + + def set_size(self, size): + size = string.lower(size) + if size == "small": + self.size = "Small" + elif size == "medium": + self.size = "Medium" + elif size == "big": + self.size = "Big" + else: + raise ParseError, 'size must be "small", "medium", or "big"' + + def output(self): + if self.size == "Big": + bgcolor = "#88bb88" + elif self.size == "Medium": + bgcolor = "#b4d4b4" + else: + bgcolor = "#d0e0d0" + + print '''<table cellspacing="0" cellpadding="2" width="97%%" border="0" bgcolor="#000000"> + <tbody><tr><td colspan=2> + <table cellspacing="0" cellpadding="5" width="100%%" border="0" bgcolor="#ffffff"> + <tbody> + <tr bgcolor="%s"> + <td align="left"><font size="+1">%s</font></font></td> + <td align="left" width="20%%"><b>Size</b>: %s</td> + <td align="center" width="20%%"><b>Status</b>: %s</td> + <td align="right" width="20%%"><b>Target Version</b>: %s</td> + </tr> + <tr> + <td colspan=4> + %s + <table cellspacing="0" cellpadding="0"> + <tbody>''' % (bgcolor, self.title, self.size, self.status, self.target, htmlify(self.description)) + + if self.url != None: + print '''<tr><td width="0"><b>More Info</b>:</td> + <td>%s</td> + </tr>''' % htmlify (self.url) + + if self.bugs != None: + print '''<tr><td width="0"><b>Bug Reports</b>:</td> + <td>%s</td> + </tr>''' % bugify (self.bugs) + + if self.contact != None: + print '''<tr><td width="0"><b>Contact</b>:</td> + <td>%s</td> + </tr>''' % htmlify (self.contact) + + print '''</tbody> + </table> + </td> + </tr> + </tbody></table> + </td></tr></tbody></table> +''' + +class Section: + def __init__(self): + self.title = None + self.entries = [] + + def output(self): + + print '<h2><a name="%s">%s</a></h2>' % (make_id(self.title), self.title) + + first = 1 + for entry in self.entries: + if not first: + print "<br>" + first = 0 + entry.output() + +class TodoParser (xmllib.XMLParser): + def __init__(self): + xmllib.XMLParser.__init__(self) + + self.in_todo = 0 + self.in_data = 0 + self.data = "" + self.section = None + self.entry = None + self.sections = [] + + self.entitydefs = {} + + def start_todo(self,attributes): + if self.in_todo: + raise ParseError, "<todo> tags may not be nested" + self.in_todo = 1 + + def end_todo(self): + self.in_todo = 0 + + def start_section(self,attributes): + if self.section: + raise ParseError, "<section> tags may not be nested" + + self.section = Section() + + def end_section(self): + if self.section.title == None: + raise ParseError, "<section> requires <title>" + + self.sections.append(self.section) + self.section = None + + def start_title(self,attributes): + if not self.section and not self.entry: + raise ParseError, "<title> tag must be in <section> or <entry>" + if self.in_data: + raise ParseError, "Unexpected <title> tag in content" + self.in_data = 1 + + def end_title(self): + self.in_data = 0 + if self.entry: + self.entry.title = self.data + self.data = "" + else: + self.section.title = self.data + self.data = "" + + def start_description(self,attributes): + if not self.entry: + raise ParseError, "<description> tag must be in <entry>" + if self.in_data: + raise ParseError, "Unexpected <description> tag in content" + self.in_data = 1 + + def end_description(self): + self.in_data = 0 + self.entry.description = self.data + self.data = "" + + def start_url(self,attributes): + if not self.entry: + raise ParseError, "<url> tag must be in <entry>" + if self.in_data: + raise ParseError, "Unexpected <url> tag in content" + self.in_data = 1 + + def end_url(self): + self.in_data = 0 + self.entry.url = self.data + self.data = "" + + def start_contact(self,attributes): + if not self.entry: + raise ParseError, "<contact> tag must be in <contact>" + if self.in_data: + raise ParseError, "Unexpected <contact> tag in content" + self.in_data = 1 + + def end_contact(self): + self.in_data = 0 + self.entry.contact = self.data + self.data = "" + + def start_bugs(self,attributes): + if not self.entry: + raise ParseError, "<bugs> tag must be in <bugs>" + if self.in_data: + raise ParseError, "Unexpected <bugs> tag in content" + self.in_data = 1 + + def end_bugs(self): + self.in_data = 0 + self.entry.bugs = self.data + self.data = "" + + def start_entry(self,attributes): + if not self.section: + raise ParseError, "<entry> tag must be in <section>" + if self.entry: + raise ParseError, "<entry> tags may not be nested" + + self.entry = Entry() + + if not attributes.has_key("size"): + raise ParseError, '"size" attribute required for entry' + self.entry.set_size(attributes["size"]) + + if not attributes.has_key("status"): + raise ParseError, '"status" attribute (completion percentage) required for entry' + self.entry.status=attributes["status"] + + if not attributes.has_key("target"): + raise ParseError, '"target" attribute (target version) required for entry' + self.entry.target=attributes["target"] + + def end_entry(self): + if self.entry.title == None: + raise ParseError, "<entry> requires <title>" + + if self.entry.description == None: + raise ParseError, "<entry> requires <description>" + + self.section.entries.append(self.entry) + self.entry = None + + def handle_data(self,data): + if self.in_data: + self.data = self.data + data + + def unknown_starttag(self,tag,attributes): + if not self.in_data: + raise ParseError, "Unexpected start tag: " + tag + else: + self.data = self.data + "<" + tag + for (key,val) in attributes.items(): + self.data = self.data + ' %s="%s"' % (key,val) + self.data = self.data + ">" + + def unknown_endtag(self,tag): + if not self.in_data: + raise ParseError, "Unexpected end tag: " + tag + else: + self.data = self.data + "</%s>" % tag + + def syntax_error(self, err): + if re.match("reference to unknown entity", err): + pass + else: + xmllib.XMLParser.syntax_error (self, err) + + def unknown_entityref(self,ref): + if not self.in_data: + raise ParseError, "Unknown entity &" + ref + ";" + else: + self.data = self.data + "&" + ref + ";" + +file = open(sys.argv[1]) +parser = TodoParser() + +lineno = 1 +while 1: + line = file.readline() + if line == "": + break + + try: + parser.feed(line) + except ParseError, err: + sys.stderr.write("Parse error at line " + `lineno` + ": " + err.__str__() + "\n") + sys.exit(1) + except RuntimeError, err: + sys.stderr.write(err.__str__() + "\n") + sys.exit(1) + + lineno = lineno + 1 + +parser.close() + +print '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> +<html> +<head> +<title>GTK+ TODO List</title> +</head> +<body bgcolor="#ffffff"> +<table width="100%" cellspacing="0" cellpadding="0" border="0"> + <tbody> + <tr valign="top"> + <td> + <h1>GTK+ TODO List</h1>''' + + +for section in parser.sections: + ntasks = len(section.entries) + id = make_id (section.title) + if ntasks == 1: + print '<a href="#%s">%s</a> (1 item)<br>' % (id,section.title) + else: + print '<a href="#%s">%s</a> (%d items)<br>' % (id,section.title,ntasks) + +print ''' + </td> + <td align="right"> + <img src="gtk-logo-rgb.gif" alt="GTK+ Logo"></img> + </td> + </tr> + </tbody> +</table> +''' + +first = 1 +for section in parser.sections: + if not first: + print "<br><br>" + first = 0 + section.output() + +print '''</body> +</html>''' + + |