summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-02-24 04:03:49 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-02-24 04:03:49 +0000
commitd9c46655cceb1263ed8d5e8ef0d0f703b881a443 (patch)
treedfdc4417013de556455105f0012fba95b6d3fde7
parent6654a22891abb31fab2a68e9b67d2c3e46f79d69 (diff)
downloadgtk+-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--ChangeLog6
-rw-r--r--ChangeLog.pre-2-06
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--ChangeLog.pre-2-26
-rw-r--r--ChangeLog.pre-2-46
-rw-r--r--ChangeLog.pre-2-66
-rw-r--r--ChangeLog.pre-2-86
-rw-r--r--TODO.xml236
-rwxr-xr-xdocs/make-todo340
9 files changed, 618 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 27306256e5..652bb532c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 &lt;otaylor@redhat.com&gt;</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 &lt;otaylor@redhat.com&gt;</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 &lt;timj@gtk.org&gt;</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>'''
+
+