summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--codegen/codegen.py4
-rw-r--r--codegen/override.py40
3 files changed, 50 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index e350c2c9..8501858d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2001-10-06 James Henstridge <james@daa.com.au>
+
+ * codegen/codegen.py (main): pass the filename to overrides.
+
+ * codegen/override.py (Overrides.__init__): rewrite the code that
+ reads in the overrides file, so it only splits on lines with only
+ '%%' in them. Also keep track of line numbers, so we know where
+ each section starts.
+ (Overrides.__parse_override): save the start line for 'override'
+ sections and 'override-attr' sections.
+ (Overrides.getstartline): new function to retrieve the start line
+ for a .overrides section.
+ (Overrides.__init__): take the filename rather than file handle as
+ argument.
+
2001-10-05 Matt Wilson <msw@redhat.com>
* gtk/gtk.override (_wrap_gtk_list__get_selection): implemented
diff --git a/codegen/codegen.py b/codegen/codegen.py
index 4ff2dfc6..1c9929ae 100644
--- a/codegen/codegen.py
+++ b/codegen/codegen.py
@@ -808,13 +808,13 @@ def register_types(parser):
argtypes.matcher.register_enum(enum.c_name, enum.typecode)
if __name__ == '__main__':
- o = override.Overrides(None)
+ o = override.Overrides()
prefix = 'pygtk'
opts, args = getopt.getopt(sys.argv[1:], "o:p:r:",
["override=", "prefix=", "register="])
for opt, arg in opts:
if opt in ('-o', '--override'):
- o = override.Overrides(open(arg))
+ o = override.Overrides(arg)
elif opt in ('-p', '--prefix'):
prefix = arg
elif opt in ('-r', '--register'):
diff --git a/codegen/override.py b/codegen/override.py
index bfd581ac..cd6957de 100644
--- a/codegen/override.py
+++ b/codegen/override.py
@@ -7,21 +7,43 @@
import sys, string, fnmatch
class Overrides:
- def __init__(self, fp=sys.stdin):
+ def __init__(self, filename=None):
self.ignores = {}
self.glob_ignores = []
self.overrides = {}
self.kwargs = {}
+ self.startlines = {}
self.override_attrs = {}
self.headers = ''
self.init = ''
- if fp == None: return
+ if filename: self.__handle_file(filename)
+
+ def __handle_file(self, filename):
+ fp = open(filename, 'r')
# read all the components of the file ...
- bufs = map(string.strip, string.split(fp.read(), '%%'))
- if bufs == ['']: return
- for buf in bufs:
- self.__parse_override(buf)
- def __parse_override(self, buffer):
+ bufs = []
+ startline = 1
+ lines = []
+ line = fp.readline()
+ linenum = 1
+ while line:
+ if line == '%%\n' or line == '%%':
+ if lines:
+ bufs.append((string.join(lines, ''), startline))
+ startline = linenum + 1
+ lines = []
+ else:
+ lines.append(line)
+ line = fp.readline()
+ linenum = linenum + 1
+ if lines:
+ bufs.append((string.join(lines, ''), startline))
+ if not bufs: return
+
+ for buf, startline in bufs:
+ self.__parse_override(buf, startline)
+
+ def __parse_override(self, buffer, startline):
pos = string.find(buffer, '\n')
if pos >= 0:
line = buffer[:pos]
@@ -41,9 +63,11 @@ class Overrides:
if 'kwargs' in words[1:]:
self.kwargs[func] = 1
self.overrides[func] = rest
+ self.startlines[func] = startline + 1
elif words[0] == 'override-attr':
attr = words[1]
self.override_attrs[attr] = rest
+ self.startlines[attr] = startline + 1
elif words[0] == 'headers':
self.headers = self.headers + '\n' + rest
elif words[0] == 'init':
@@ -60,6 +84,8 @@ class Overrides:
return self.overrides.has_key(name)
def override(self, name):
return self.overrides[name]
+ def getstartline(self, name):
+ return self.startlines[name]
def wants_kwargs(self, name):
return self.kwargs.has_key(name)
def attr_is_overriden(self, attr):