Пример #1
0
	def indexprec(self, size):
		bits = self.Int()
		if bits in (8, 16, 24, 32):
			reff.inxsize = (bits / 8)
			reff.inxprec = reff.inxsize - 1
		else:
			raise SketchLoadError("This implementation can't work with %d bit indices" % (bits,))
Пример #2
0
	def interpret(self, sz):
		tell = self.file.tell
		Id = -1
		pos = tell()
		start = pos
		while Id != 0x40 and pos < start + sz:
			head = self.u16()
			Id = head & 0xffe0
			size = head & 0x001f
			hdsz = 2
			if size == 31:
				size = self.u16()
				hdsz = 4
			pdsz = ((size + 1) / 2) * 2
			self._print(20 , '%4x at %5d) %5d(%5d): %4x: %s' , head, pos, size, pdsz, Id, CGM_ID.get(Id, ''))
			if hasattr(self, CGM_ID.get(Id, '')):
				self._print(30 , 'Calling %s' % (CGM_ID.get(Id, '')))
				getattr(self, CGM_ID[Id])(size)
			else:
				if Id:
					self.file.read(pdsz)
					name = CGM_ID.get(Id, '')
					Class = Id >> 12
					Elem = (Id & 0x0fff) >> 5
					self._print(2, '*** unimplemented: %4x; class = %d, element = %2d  %s'
										, Id , Class , Elem, name)
			pos = pos + hdsz + pdsz
			if tell() < pos:
				self.file.read(pos - tell())
			elif tell() > pos:
				self._print(2, 'read too many bytes')
				self.file.seek(pos - tell(), 1)
			if pos != tell():
				raise SketchLoadError("Lost position in File")
Пример #3
0
	def realprec(self, size):
		type = self.Enum()
		prec = (self.Int(), self.Int())
		if type == 1:
			if prec == (16, 16):
				reff.realprec = 0# 32 bit fixed precision
			elif prec == (32, 32):
				reff.realprec = 1# 64 bit fixed precision
			else:
				raise SketchLoadError("This implementation can't work with %d,%d bit fixed points" % prec)
		else:
			if prec == (9, 23):
				reff.realprec = 2# 32 bit floating point
			elif prec == (12, 52):
				reff.realprec = 3# 64 bit floating point
			else:
				raise SketchLoadError("This implementation can't work with %d,%d bit floatingpoints" % prec)
Пример #4
0
	def vdcintegerprec(self, size):
		bits = self.Int()
		if bits in (8, 16, 24, 32):
			reff.vdc.intsize = (bits / 8)
			reff.vdc.intprec = reff.vdc.intsize - 1
			if reff.vdc.type == 0:
				reff.vdc.size = reff.vdc.intsize
				reff.vdc.prec = reff.vdc.intprec
		else:
			raise SketchLoadError("This implementation can't work with %d bit integers" % (bits,))
Пример #5
0
	def colrindexprec(self, size):
		bits = self.Int()
		if bits == 8:
			reff.color.inxstruct = "!B"
		elif bits == 16:
			reff.color.inxstruct = "!H"
		elif bits == 32:
			reff.color.inxstruct = "!I"
		else:
			raise SketchLoadError("This implementation can't work with %d bit color indices" % (bits,))
Пример #6
0
	def colrprec(self, size):
		bits = self.Int()
		if bits == 8:
			reff.color.absstruct = "!BBB"
		elif bits == 16:
			reff.color.absstruct = "!HHH"
		elif bits == 32:
			reff.color.absstruct = "!III"
		else:
			raise SketchLoadError("This implementation can't work with %d bit color components" % (bits,))
Пример #7
0
	def Load(self):
		try:			
			self.file.seek(0)
			cdr = RiffChunk()
			cdr.load(self.file.read())
			app.updateInfo(inf2=_("Parsing is finished"),inf3=10)
			
			self.document()
			
			
			if self.verbosity:
				text=''
				if cdr.infocollector.cdr_version>0:
					text+='CorelDRAW ver.%u'%cdr.infocollector.cdr_version+'          \n'
					text+='   Pages: %u'%(cdr.infocollector.pages-1)+'\n'
					text+='   Layers: %u'%(cdr.infocollector.layers/cdr.infocollector.pages)+'\n'
					text+='   Groups: %u'%cdr.infocollector.groups+'\n'
					text+='   Objects: %u'%cdr.infocollector.objects+'\n'
					text+='   Bitmaps: %u'%cdr.infocollector.bitmaps+'\n'
					if cdr.infocollector.compression:
						text+='   COMPRESSED'
				sys.stderr.write(text)
			
			if cdr.infocollector.cdr_version>6:
				self.info=cdr.infocollector
				self.info.loader=self
				self.info.process_properties()
				
				self.import_curves()
				
			else:
				warn(USER, 'File <'+self.filename+
										'> contains usupported CorelDRAW ver.%u'%cdr.infocollector.cdr_version+'.0 drawing')
			self.end_all()
			self.object.load_Completed()
			self.object.pages.remove(self.object.pages[-1])
			self.object.pages.reverse()
			self.object.active_page=len(self.object.pages)-1
			self.object.setActivePage(0)
			
			return self.object
		
		except RiffEOF:
			raise SketchLoadError(_("Unexpected problems in file parsing"))
		except:
			import traceback
			traceback.print_exc()
			raise
Пример #8
0
 def Load(self):
     doc = None
     if self.ext.upper() == '.DST':
         loader = DSTLoader(self.file, self.filename, self.match)
         doc = loader.Load()
     elif self.ext.upper() == '.PES':
         loader = PESLoader(self.file, self.filename, self.match)
         doc = loader.Load()
     elif self.ext.upper() == '.EXP':
         loader = EXPLoader(self.file, self.filename, self.match)
         doc = loader.Load()
     elif self.ext.upper() == '.PCS':
         loader = PCSLoader(self.file, self.filename, self.match)
         doc = loader.Load()
     else:
         raise SketchLoadError(_("unrecognised file type"))
     return doc
Пример #9
0
    def read_headers(self):
        self.file.seek(0)
        placeable = self.file.read(calcsize(struct_placeable_header))
        key, handle, left, top, right, bottom, inch, reserved, checksum\
           = unpack(struct_placeable_header, placeable)
        if key != rx_magic:
            raise SketchLoadError(
                _("The file is not a placeable "
                  "windows metafile"))
            self._print("The file is not a placeable windows metafile")
        sum = 0
        for word in unpack('<10h', placeable[:20]):
            sum = sum ^ word
        if sum != checksum:
            #raise SketchLoadError(_("The file has an incorrect checksum"))
            self._print("The file has an incorrect checksum")

        self.inch = inch
        self.bbox = (left, top, right, bottom)
        factor = 72.0 / self.inch
        self.wx = self.wy = 0
        self.wwidth = right - left
        self.wheight = bottom - top
        self.vx = self.vy = 0
        self.vwidth = self.wwidth
        self.vheight = self.wheight
        self.base_trafo = Trafo(factor, 0, 0, -factor, 0,
                                factor * self.vheight)
        self.update_trafo()

        header = self.file.read(calcsize(struct_wmf_header))
        filetype, headersize, version, filesize, numobj, maxrecord, numparams\
            = unpack(struct_wmf_header, header)

        self._print('\nHeader\n------\n')
        fmt = '% 10s: %s\n'
        self._print(fmt, 'inch', self.inch)
        self._print(fmt, 'bbox', self.bbox)
        self._print(fmt, 'headersize', headersize)
        self._print(fmt, 'version', version)
        self._print(fmt, 'numobj', numobj)
        self._print(fmt, 'numparams', numparams)
        self._print(fmt, 'maxrecord', maxrecord)
        self._print('\n')
Пример #10
0
	def mfversion(self, size):
		if self.u16() != 1:
			raise SketchLoadError("Can only load CGM version 1")
class CDRLoader(GenericLoader):
    def __init__(self, file, filename, match):
        GenericLoader.__init__(self, file, filename, match)
        self.fix_tile = None
        self.fix_clip = 0
        self.fix_lens = ()
        self.object = None
        self.filename = filename
        self.verbosity = False
        self.info = None
        self.file = file

    def Load(self):
        try:
            self.file.seek(0)
            cdr = RiffChunk()
            cdr.load(self.file.read())
            app.updateInfo(inf2=_("Parsing is finished"), inf3=10)

            summary = [
                ('CDR version', cdr.infocollector.cdr_version),
                ('pages', cdr.infocollector.pages - 1),
                ('layers', cdr.infocollector.layers / cdr.infocollector.pages),
                ('groups', cdr.infocollector.groups),
                ('objects', cdr.infocollector.objects),
                ('bitmaps', cdr.infocollector.bitmaps),
            ]
            if cdr.infocollector.compression:
                summary.append(('compression', 'yes'))
            else:
                summary.append(('compression', 'no'))

            if self.filename == None:
                return
            from xml.sax.saxutils import XMLGenerator

            try:
                file = open(self.filename, 'w')
            except (IOError, os.error), value:
                import sys
                sys.stderr('cannot write parsing result into %s: %s' %
                           ( ` filename `, value[1]))
                return

            writer = XMLGenerator(out=file, encoding='utf-8')
            writer.startDocument()

            writer.startElement('riffDocument', {})
            writer.characters('\n')

            writer.startElement('docSummary', {})
            writer.characters('\n')

            for key, value in summary:
                writer.characters('\t')
                writer.startElement('%s' % key, {})
                writer.characters('%s' % ` value `)
                writer.endElement('%s' % key)
                writer.characters('\n')

            writer.endElement('docSummary')
            writer.characters('\n')

            writer.startElement('docStructure', {})
            writer.characters('\n')

            if cdr.infocollector.cdr_version > 6:
                self.info = cdr.infocollector
                self.info.loader = self
                self.info.process_properties()
                self.import_curves(writer)

            else:
                writer.characters('\t')
                writer.startElement('info', {})
                value = 'Parsed file contains usupported CorelDRAW ver.%u' % cdr.infocollector.cdr_version + '.0 drawing'
                writer.characters('%s' % ` value `)
                writer.endElement('info')
                writer.characters('\n')

        except RiffEOF:
            writer.characters('\t')
            writer.startElement('info', {})
            writer.characters('Unexpected problems in file parsing')
            writer.endElement('info')
            writer.characters('\n')
            raise SketchLoadError(_("Unexpected problems in file parsing"))