summaryrefslogtreecommitdiff
path: root/codegen/override.py
diff options
context:
space:
mode:
authorJames Henstridge <james@daa.com.au>2001-10-06 10:35:39 +0000
committerJames Henstridge <jamesh@src.gnome.org>2001-10-06 10:35:39 +0000
commit083a0afb3c7a62ad05ba189239f58522cf9f7633 (patch)
tree59810a399518e2bd9362843c7f3536b6ef7c9ae5 /codegen/override.py
parent235393696e6f58c8fe2b5a0e3c0d6ba43f374455 (diff)
downloadpygtk-083a0afb3c7a62ad05ba189239f58522cf9f7633.tar.gz
pass the filename to overrides.
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.
Diffstat (limited to 'codegen/override.py')
-rw-r--r--codegen/override.py40
1 files changed, 33 insertions, 7 deletions
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):