gnash-commit
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]