more CID hackery


git-svn-id: svn://svn.code.sf.net/p/fonttools/code/trunk@234 4cde692c-a291-49d1-8350-778aa11640f8
diff --git a/Lib/fontTools/cffLib.py b/Lib/fontTools/cffLib.py
index c0584fc..79784f6 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.10 2002-05-14 12:37:36 jvr Exp $
+# $Id: cffLib.py,v 1.11 2002-05-14 13:51:51 jvr Exp $
 #
 
 import struct, sstruct
@@ -35,8 +35,8 @@
 		
 		for i in range(len(topDicts)):
 			font = self.fonts[self.fontNames[i]] = CFFFont()
-			font.GlobalSubrs = self.GlobalSubrs  # Hmm.
-			file.seek(0, 0)
+			font.GlobalSubrs = self.GlobalSubrs
+			file.seek(0)
 			font.decompile(file, topDicts[i], strings, self)  # maybe only 'on demand'?
 	
 	def compile(self):
@@ -103,23 +103,33 @@
 		if hasattr(self, "ROS"):
 			isCID = 1
 			# XXX CID subFonts
+			offset = self.FDArray
+			file.seek(offset)
+			fontDicts = readINDEX(file)
+			subFonts = self.subFonts = []
+			for topDictData in fontDicts:
+				subFont = CFFFont()
+				subFonts.append(subFont)
+				subFont.decompile(file, topDictData, strings, None)
+			# XXX
 		else:
 			isCID = 0
 			size, offset = self.Private
-			file.seek(offset, 0)
+			file.seek(offset)
 			privateData = file.read(size)
-			file.seek(offset, 0)
+			file.seek(offset)
 			assert len(privateData) == size
 			self.Private = PrivateDict()
 			self.Private.decompile(file, privateData, strings)
 		
-		file.seek(self.CharStrings)
-		rawCharStrings = readINDEX(file)
-		nGlyphs = len(rawCharStrings)
+		if hasattr(self, "CharStrings"):
+			file.seek(self.CharStrings)
+			rawCharStrings = readINDEX(file)
+			nGlyphs = len(rawCharStrings)
 		
 		# get charset (or rather: get glyphNames)
 		if self.charset == 0:
-			xxx  # standard charset
+			pass  # XXX standard charset
 		else:
 			file.seek(self.charset)
 			format = ord(file.read(1))
@@ -133,19 +143,23 @@
 				xxx
 			else:
 				xxx
-		self.charset = charset
+			self.charset = charset
+			assert len(charset) == nGlyphs
 		
-		assert len(charset) == nGlyphs
-		self.CharStrings = charStrings = {}
-		if self.CharstringType == 2:
-			# Type 2 CharStrings
-			charStringClass = psCharStrings.T2CharString
+		if self.charset <> 0:
+			self.CharStrings = charStrings = {}
+			if self.CharstringType == 2:
+				# Type 2 CharStrings
+				charStringClass = psCharStrings.T2CharString
+			else:
+				# Type 1 CharStrings
+				charStringClass = psCharStrings.T1CharString
+			
+			for i in range(nGlyphs):
+				charStrings[charset[i]] = charStringClass(rawCharStrings[i])
+			assert len(charStrings) == nGlyphs
 		else:
-			# Type 1 CharStrings
-			charStringClass = psCharStrings.T1CharString
-		for i in range(nGlyphs):
-			charStrings[charset[i]] = charStringClass(rawCharStrings[i])
-		assert len(charStrings) == nGlyphs
+			assert not hasattr(self, "CharStrings")
 		
 		# XXX Encoding!
 		encoding = self.Encoding
@@ -260,7 +274,6 @@
 		self.fromDict(p.getDict())
 		
 		# get local subrs
-		#print "YYY Private.Subrs:", self.Subrs
 		if hasattr(self, "Subrs"):
 			file.seek(self.Subrs, 1)
 			localSubrs = readINDEX(file)