more rearranging, some fixes of the previous version


git-svn-id: svn://svn.code.sf.net/p/fonttools/code/trunk@232 4cde692c-a291-49d1-8350-778aa11640f8
diff --git a/Lib/fontTools/cffLib.py b/Lib/fontTools/cffLib.py
index 8d43366..c0584fc 100644
--- a/Lib/fontTools/cffLib.py
+++ b/Lib/fontTools/cffLib.py
@@ -1,7 +1,7 @@
 """cffLib.py -- read/write tools for Adobe CFF fonts."""
 
 #
-# $Id: cffLib.py,v 1.9 2002-05-14 12:22:03 jvr Exp $
+# $Id: cffLib.py,v 1.10 2002-05-14 12:37:36 jvr Exp $
 #
 
 import struct, sstruct
@@ -73,15 +73,13 @@
 
 class CFFFont:
 	
-	defaults = topDictDefaults
-	
 	def __init__(self):
 		pass
 	
 	def __getattr__(self, attr):
-		if not self.defaults.has_key(attr):
+		if not topDictDefaults.has_key(attr):
 			raise AttributeError, attr
-		return self.defaults[attr]
+		return topDictDefaults[attr]
 	
 	def fromDict(self, dict):
 		self.__dict__.update(dict)
@@ -253,12 +251,10 @@
 
 class PrivateDict:
 	
-	defaults = privateDictDefaults
-	
 	def __init__(self):
 		pass
 	
-	def decompile(self, data, privateData, strings):
+	def decompile(self, file, privateData, strings):
 		p = PrivateDictDecompiler(strings)
 		p.decompile(privateData)
 		self.fromDict(p.getDict())
@@ -266,8 +262,8 @@
 		# get local subrs
 		#print "YYY Private.Subrs:", self.Subrs
 		if hasattr(self, "Subrs"):
-			chunk = data[self.Subrs:]
-			localSubrs, restdata = readINDEX(chunk)
+			file.seek(self.Subrs, 1)
+			localSubrs = readINDEX(file)
 			self.Subrs = map(psCharStrings.T2CharString, localSubrs)
 		else:
 			self.Subrs = []
@@ -303,9 +299,9 @@
 		xmlWriter.newline()
 	
 	def __getattr__(self, attr):
-		if not self.defaults.has_key(attr):
+		if not privateDictDefaults.has_key(attr):
 			raise AttributeError, attr
-		return self.defaults[attr]
+		return privateDictDefaults[attr]
 	
 	def fromDict(self, dict):
 		self.__dict__.update(dict)
@@ -313,6 +309,8 @@
 
 def readINDEX(file):
 	count, = struct.unpack(">H", file.read(2))
+	if count == 0:
+		return []
 	offSize = ord(file.read(1))
 	offsets = []
 	for index in range(count+1):
@@ -321,10 +319,11 @@
 		offset, = struct.unpack(">L", chunk)
 		offset = int(offset)
 		offsets.append(offset)
+	offsetBase = file.tell() - 1
 	prev = offsets[0]
 	stuff = []
-	next = offsets[0]
 	for next in offsets[1:]:
+		assert offsetBase + prev == file.tell()
 		chunk = file.read(next - prev)
 		assert len(chunk) == next - prev
 		stuff.append(chunk)