[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash/testsuite/libamf.all s2x.py
From: |
Rob Savoye |
Subject: |
[Gnash-commit] gnash/testsuite/libamf.all s2x.py |
Date: |
Sat, 15 Dec 2007 16:16:07 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Rob Savoye <rsavoye> 07/12/15 16:16:07
Added files:
testsuite/libamf.all: s2x.py
Log message:
Add utility script.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/libamf.all/s2x.py?cvsroot=gnash&rev=1.1
Patches:
Index: s2x.py
===================================================================
RCS file: s2x.py
diff -N s2x.py
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ s2x.py 15 Dec 2007 16:16:07 -0000 1.1
@@ -0,0 +1,561 @@
+#!/usr/bin/python
+
+import sys
+from struct import *
+from xml.dom import minidom
+#s2x Runtime Error Class Definition:
+class s2xErr(Exception):
+ def __init__(self,msg):
+ self.msg=msg
+#constants start:
+#------------------------------------------------------------#
+NUMBER='\x00'
+BOOLEAN='\x01'
+STRING='\x02'
+OBJOBJ='\x03'
+NULL='\x05'
+UNDEF='\x06'
+OBJARR='\x08'
+#RAWARR='\x0A'
+OBJDATE='\x0B'
+OBJM='\x0D'
+OBJXML='\x0F'
+OBJCC='\x10'
+#constants end.
+#------------------------------------------------------------#
+argv=sys.argv
+if len(argv)<3:
+ print 's2x v 0.75 by iceeLyne, Dec., 2003.'
+ print 'usage:'
+ print 'python s2x.py -x foo.sol [foo.xml]'
+ print 'python s2x.py -s foo.xml [foo.sol]'
+else:
+ argvSw=argv[1]
+ argvInpFile=argv[2]
+ if len(argv)>3:
+ argvOutFile=argv[3]
+ else:
+ argvOutFile=''
+ if argvSw=='-x':
+ # parse sol to xml
+ try:
+ f=open(argvInpFile,'rb')
+ except IOError:
+ print 'Could Not Open The Input File: '+argvInpFile
+ else:
+ def num2x():
+ global cparent,sVname
+ s=f.read(8)
+ if s=='\x7F\xF0\x00\x00\x00\x00\x00\x00':
+ sValue='Infinity'
+ elif s=='\xFF\xF0\x00\x00\x00\x00\x00\x00':
+ sValue='-Infinity'
+ elif s=='\x7F\xF8\x00\x00\x00\x00\x00\x00':
+ sValue='NaN'
+ else:
+ nValue,=unpack('>d',s)#Double,Big-endian
+ sValue=str(nValue)
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','number')
+ c.setAttribute('name',sVname)
+ c.setAttribute('value',sValue)
+ def bol2x():
+ global cparent,sVname
+ b=f.read(1)
+ if b=='\x00':
+ sValue='false'
+ elif b=='\x01':
+ sValue='true'
+ else:
+ print 'Warning: Boolean Value Error.'
+ sValue='true'
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','boolean')
+ c.setAttribute('name',sVname)
+ c.setAttribute('value',sValue)
+ def str2x():
+ global cparent,sVname
+ nLenStr,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ s=f.read(nLenStr)
+ s=s.decode('utf-8')#
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','string')
+ c.setAttribute('name',sVname)
+ c.appendChild(d.createCDATASection(s))
+ def obj2x():
+ global cparent,sVname,nLenVname#is necessary
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','object')
+ c.setAttribute('name',sVname)
+ cparent=cparent.lastChild
+ nLenVname,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ while nLenVname!=0:
+ sVname=f.read(nLenVname)
+ sVname=sVname.decode('utf-8')#
+ type=f.read(1)
+ if type==NUMBER:
+ num2x()
+ elif type==BOOLEAN:
+ bol2x()
+ elif type==STRING:
+ str2x()
+ elif type==OBJARR:
+ arr2x()
+ elif type==OBJOBJ:
+ obj2x()
+ elif type==OBJDATE:
+ dat2x()
+ elif type==OBJXML:
+ xml2x()
+ elif type==OBJCC:
+ occ2x()
+ elif type==OBJM:
+ ojm2x()
+ elif type==NULL:
+ nul2x()
+ elif type==UNDEF:
+ und2x()
+ else:
+ raise s2xErr('Unexpected Data Type: '+hex(ord(type)))
+ nLenVname,=unpack('>H',f.read(2))
+ objend=f.read(1)#=='\x09'
+ cparent=cparent.parentNode
+ def arr2x():
+ global cparent,sVname,nLenVname#is necessary
+ nArrLength,=unpack('>L',f.read(4))#Unsigned Long,Big-endian
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','array')
+ c.setAttribute('name',sVname)
+ c.setAttribute('length',str(nArrLength))
+ cparent=cparent.lastChild
+ nLenVname,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ while nLenVname!=0:
+ sVname=f.read(nLenVname)
+ sVname=sVname.decode('utf-8')#
+ type=f.read(1)
+ if type==NUMBER:
+ num2x()
+ elif type==BOOLEAN:
+ bol2x()
+ elif type==STRING:
+ str2x()
+ elif type==OBJOBJ:
+ obj2x()
+ elif type==OBJARR:
+ arr2x()
+ elif type==OBJDATE:
+ dat2x()
+ elif type==OBJXML:
+ xml2x()
+ elif type==OBJCC:
+ occ2x()
+ elif type==OBJM:
+ ojm2x()
+ elif type==NULL:
+ nul2x()
+ elif type==UNDEF:
+ und2x()
+ else:
+ raise s2xErr('Unexpected Data Type: '+hex(ord(type)))
+ nLenVname,=unpack('>H',f.read(2))
+ objend=f.read(1)#=='\x09'
+ cparent=cparent.parentNode
+ def dat2x():
+ global cparent,sVname
+ nMsec,=unpack('>d',f.read(8))#Double,Big-endian
+ nMinOffset,=unpack('>h',f.read(2))#Short,Big-endian
+ nOffset=nMinOffset/60
+ c=cparent.appendChild(d.createComment('DateObject:Milliseconds
Count From Dec. 1, 1969; Timezone UTC + Offset.'))
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','date')
+ c.setAttribute('name',sVname)
+ c.setAttribute('msec',str(nMsec))
+ c.setAttribute('utcoffset',str(-nOffset))
+ def xml2x():
+ global cparent,sVname
+ nLenCData,=unpack('>L',f.read(4))#Unsigned Long,Big-endian
+ sCData=f.read(nLenCData)
+ sCData=sCData.decode('utf-8')#
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','xml')
+ c.setAttribute('name',sVname)
+ c.appendChild(d.createCDATASection(sCData))
+ def occ2x():
+ global cparent,sVname,nLenVname#is necessary
+ nLenCname,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ sCname=f.read(nLenCname)
+ sCname=sCname.decode('utf-8')#
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','c_object')
+ c.setAttribute('name',sVname)
+ c.setAttribute('class_name',sCname)
+ cparent=cparent.lastChild
+ nLenVname,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ while nLenVname!=0:
+ sVname=f.read(nLenVname)
+ sVname=sVname.decode('utf-8')#
+ type=f.read(1)
+ if type==NUMBER:
+ num2x()
+ elif type==BOOLEAN:
+ bol2x()
+ elif type==STRING:
+ str2x()
+ elif type==OBJARR:
+ arr2x()
+ elif type==OBJOBJ:
+ obj2x()
+ elif type==OBJDATE:
+ dat2x()
+ elif type==OBJXML:
+ xml2x()
+ elif type==OBJCC:
+ occ2x()
+ elif type==OBJM:
+ ojm2x()
+ elif type==NULL:
+ nul2x()
+ elif type==UNDEF:
+ und2x()
+ else:
+ raise s2xErr('Unexpected Data Type: '+hex(ord(type)))
+ nLenVname,=unpack('>H',f.read(2))
+ objend=f.read(1)#=='\x09'
+ cparent=cparent.parentNode
+ def ojm2x():
+ global cparent,sVname
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','m_object')
+ c.setAttribute('name',sVname)
+ def nul2x():
+ global cparent,sVname
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','null')
+ c.setAttribute('name',sVname)
+ def und2x():
+ global cparent,sVname
+ c=cparent.appendChild(d.createElement('data'))
+ c.setAttribute('type','undefined')
+ c.setAttribute('name',sVname)
+ d=minidom.parseString('<solx/>')
+ try:
+ f.seek(0,2)
+ nLenFile=f.tell()
+ f.seek(0)
+ sHeader=f.read(2)
+ sLenData=f.read(4)
+ nLenData,=unpack('>L',sLenData)#Unsigned Long,Big-endian
+ if nLenFile!=nLenData+6:
+ print 'Warning: Data Length Mismatch.'
+ sFileType=f.read(4)#=='TCSO'
+ sth1=f.read(6)
+ nLenSoln,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ solname=f.read(nLenSoln)
+ solname=solname.decode('utf-8')#
+ sth2=f.read(4)
+ solxroot=d.firstChild
+ solxroot.setAttribute('std_version','0.75')
+ solxroot.setAttribute('std_author','iceeLyne')
+ solxroot.setAttribute('sol_name',solname)
+ cparent=solxroot
+ while f.tell()<nLenFile:
+ nLenVname,=unpack('>H',f.read(2))#Unsigned Short,Big-endian
+ sVname=f.read(nLenVname)
+ sVname=sVname.decode('utf-8')#
+ type=f.read(1)
+ if type==NUMBER:
+ num2x()
+ elif type==BOOLEAN:
+ bol2x()
+ elif type==STRING:
+ str2x()
+ elif type==OBJOBJ:
+ obj2x()
+ elif type==OBJARR:
+ arr2x()
+ elif type==OBJDATE:
+ dat2x()
+ elif type==OBJXML:
+ xml2x()
+ elif type==OBJCC:
+ occ2x()
+ elif type==OBJM:
+ ojm2x()
+ elif type==NULL:
+ nul2x()
+ elif type==UNDEF:
+ und2x()
+ else:
+ raise s2xErr('Unexpected Data Type: '+hex(ord(type)))
+ end=f.read(1)#=='\x00'
+ sxmloutput=d.toprettyxml('\t','\n','utf-8')
+ if argvOutFile=='':
+ argvOutFile=argvInpFile[:argvInpFile.rfind('.')]+'.xml'
+ foutput=open(argvOutFile,'w')
+ foutput.write(sxmloutput)
+ foutput.close()
+ print 'Converted File: '+argvOutFile+' Was Successfully
Created.'
+ except s2xErr,e:
+ print e.msg
+ except:
+ print 'Unexpected Error.'
+ d.unlink()#
+ f.close()#
+ elif argvSw=='-s':
+ # parse xml to sol
+ try:
+ d=minidom.parse(argvInpFile)
+ except IOError:
+ print 'Could Not Open The Input File: '+argvInpFile
+ except:
+ print 'Error At Parsing XML File Input.'
+ else:
+ def x2num():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+NUMBER
+ sValue=c.getAttribute('value')
+ if sValue=='Infinity':
+ sData+='\x7F\xF0\x00\x00\x00\x00\x00\x00'
+ elif sValue=='-Infinity':
+ sData+='\xFF\xF0\x00\x00\x00\x00\x00\x00'
+ elif sValue=='NaN':
+ sData+='\x7F\xF8\x00\x00\x00\x00\x00\x00'
+ else:
+ nValue=float(sValue)
+ sData+=pack('>d',nValue)
+ def x2bol():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+BOOLEAN
+ sValue=c.getAttribute('value')
+ if sValue=='true':
+ sData+='\x01'
+ elif sValue=='false':
+ sData+='\x00'
+ else:
+ raise s2xErr('Unexpected Boolean Value: '+sValue)
+ def x2str():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+STRING
+ sCData=''
+ for cData in c.childNodes:
+ if cData.nodeType==4:#CDATA_SECTION_NODE
+ sCData=cData.nodeValue
+ break
+ sCData=sCData.encode('utf-8')#
+ nLenCData=len(sCData)
+ sLenCData=pack('>H',nLenCData)
+ sData+=sLenCData+sCData
+ def x2obj():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+OBJOBJ
+ temp=c
+ c=c.firstChild
+ while c:
+ if c.nodeType==1:#ELEMENT_NODE
+ sVname=c.getAttribute('name')
+ sVname=sVname.encode('utf-8')#
+ nLenVname=len(sVname)
+ sLenVname=pack('>H',nLenVname)
+ type=c.getAttribute('type')
+ if type=='number':
+ x2num()
+ elif type=='boolean':
+ x2bol()
+ elif type=='string':
+ x2str()
+ elif type=='object':
+ x2obj()
+ elif type=='array':
+ x2arr()
+ elif type=='date':
+ x2dat()
+ elif type=='xml':
+ x2xml()
+ elif type=='c_object':
+ x2occ()
+ elif type=='m_object':
+ x2ojm()
+ elif type=='null':
+ x2nul()
+ elif type=='undefined':
+ x2und()
+ else:
+ raise s2xErr('Unexpected Data Type: '+type)
+ c=c.nextSibling
+ sData+='\x00\x00\x09'
+ c=temp
+ def x2arr():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+OBJARR
+ nArrLength=float(c.getAttribute('length'))
+ sArrLength=pack('>L',nArrLength)
+ sData+=sArrLength
+ temp=c
+ c=c.firstChild
+ while c:
+ if c.nodeType==1:#ELEMENT_NODE
+ sVname=c.getAttribute('name')
+ sVname=sVname.encode('utf-8')#
+ nLenVname=len(sVname)
+ sLenVname=pack('>H',nLenVname)
+ type=c.getAttribute('type')
+ if type=='number':
+ x2num()
+ elif type=='boolean':
+ x2bol()
+ elif type=='string':
+ x2str()
+ elif type=='object':
+ x2obj()
+ elif type=='array':
+ x2arr()
+ elif type=='date':
+ x2dat()
+ elif type=='xml':
+ x2xml()
+ elif type=='c_object':
+ x2occ()
+ elif type=='m_object':
+ x2ojm()
+ elif type=='null':
+ x2nul()
+ elif type=='undefined':
+ x2und()
+ else:
+ raise s2xErr('Unexpected Data Type: '+type)
+ c=c.nextSibling
+ sData+='\x00\x00\x09'
+ c=temp
+ def x2dat():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+OBJDATE
+ nMsec=float(c.getAttribute('msec'))
+ nMinOffset=-60*int(c.getAttribute('utcoffset'))
+ sData+=pack('>dh',nMsec,nMinOffset)
+ def x2xml():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+OBJXML
+ sCData=''
+ for cData in c.childNodes:
+ if cData.nodeType==4:#CDATA_SECTION_NODE
+ sCData=cData.nodeValue
+ break
+ sCData=sCData.encode('utf-8')#
+ nLenCData=len(sCData)
+ sLenCData=pack('>L',nLenCData)
+ sData+=sLenCData+sCData
+ def x2occ():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+OBJCC
+ sCname=c.getAttribute('class_name')
+ sCname=sCname.encode('utf-8')#
+ nLenCname=len(sCname)
+ sLenCname=pack('>H',nLenCname)
+ sData+=sLenCname+sCname
+ temp=c
+ c=c.firstChild
+ while c:
+ if c.nodeType==1:#ELEMENT_NODE
+ sVname=c.getAttribute('name')
+ sVname=sVname.encode('utf-8')#
+ nLenVname=len(sVname)
+ sLenVname=pack('>H',nLenVname)
+ type=c.getAttribute('type')
+ if type=='number':
+ x2num()
+ elif type=='boolean':
+ x2bol()
+ elif type=='string':
+ x2str()
+ elif type=='object':
+ x2obj()
+ elif type=='array':
+ x2arr()
+ elif type=='date':
+ x2dat()
+ elif type=='xml':
+ x2xml()
+ elif type=='c_object':
+ x2occ()
+ elif type=='m_object':
+ x2ojm()
+ elif type=='null':
+ x2nul()
+ elif type=='undefined':
+ x2und()
+ else:
+ raise s2xErr('Unexpected Data Type: '+type)
+ c=c.nextSibling
+ sData+='\x00\x00\x09'
+ c=temp
+ def x2ojm():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+OBJM
+ def x2nul():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+NULL
+ def x2und():
+ global sData,sLenVname,sVname,c
+ sData+=sLenVname+sVname+UNDEF
+ try:
+ solxroot=d.firstChild
+ if solxroot.tagName!='solx' or
float(solxroot.getAttribute('std_version'))>0.75:
+ raise s2xErr('Not Solx File Or Incorrect File Version.')
+ sHeader='\x00\xBF'
+ sLenData='\x00\x00\x00\x00'
+ sFileType='TCSO'
+ sth1='\x00\x04\x00\x00\x00\x00'
+ solname=solxroot.getAttribute('sol_name')
+ solname=solname.encode('utf-8')#
+ nLenSoln=len(solname)
+ sLenSoln=pack('>H',nLenSoln)#2 bytes
+ sth2='\x00\x00\x00\x00'
+ sData=sFileType+sth1+sLenSoln+solname+sth2
+ c=solxroot.firstChild
+ while c:
+ if c.nodeType==1:#ELEMENT_NODE
+ sVname=c.getAttribute('name')
+ sVname=sVname.encode('utf-8')#
+ nLenVname=len(sVname)
+ sLenVname=pack('>H',nLenVname)
+ type=c.getAttribute('type')
+ if type=='number':
+ x2num()
+ elif type=='boolean':
+ x2bol()
+ elif type=='string':
+ x2str()
+ elif type=='object':
+ x2obj()
+ elif type=='array':
+ x2arr()
+ elif type=='date':
+ x2dat()
+ elif type=='xml':
+ x2xml()
+ elif type=='c_object':
+ x2occ()
+ elif type=='m_object':
+ x2ojm()
+ elif type=='null':
+ x2nul()
+ elif type=='undefined':
+ x2und()
+ else:
+ raise s2xErr('Unexpected Data Type: '+type)
+ sData+='\x00'
+ c=c.nextSibling
+ if argvOutFile=='':
+ argvOutFile=argvInpFile[:argvInpFile.rfind('.')]+'.sol'
+ f=open(argvOutFile,'wb')
+ sLenData=pack('>L',len(sData))
+ f.write(sHeader+sLenData+sData)
+ f.close()
+ print 'Converted File: '+argvOutFile+' Was Successfully
Created.'
+ except s2xErr,e:
+ print e.msg
+## except:
+## print 'Unexpected Error.'
+ d.unlink()#
+ else:
+ print 'Invalid Switch: '+argvSw
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash/testsuite/libamf.all s2x.py,
Rob Savoye <=