Changeset 82

Show
Ignore:
Timestamp:
11/20/06 16:55:25 (2 years ago)
Author:
Jan-Klaas Kollhof
Message:

updates

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/experimental/jsolait/jsolait.js

    r81 r82  
    4242     
    4343    ///The location where jsolait is installed. 
    44     //do not edit the following lines, it will be replaced by the build script 
    45     /*@baseURI begin*/ 
    4644    mod.baseURI="./jsolait"; 
    47     /*@baseURI end*/ 
    4845     
    4946    try{// to guess the location where jsolait is installed 
     
    7370    mod.moduleSearchURIs = [".", "%(baseURI)s/lib"]; 
    7471    
    75     mod.packagesURI = "%(baseURI)s/../jsolait-packages"; 
     72    mod.packagesURI = "%(baseURI)s/packages"; 
    7673     
    7774    mod.modules={}; 
     
    231228    }; 
    232229     
    233      
    234230    /** 
    235231        Creates a new class object which inherits from superClass. 
     
    316312            } 
    317313        } 
    318         //make sure all jsolait objects have a id method 
     314        //make sure all jsolait objects have an id method 
    319315        if(proto.__id__ === undefined){ 
    320316            proto.__id__=function(){ 
     
    326322 
    327323        //run the class setup function provided as classScope 
    328         if(classScope.length-1 > baseProtos.length){ 
    329             var privId = '__priv__' + __class__.__id__; 
    330             classScope.apply(this,[proto, privId].concat(baseProtos)); 
    331         }else{ 
    332             classScope.apply(this,[proto].concat(baseProtos)); 
    333         } 
     324        var privId = '__priv__' + __class__.__id__; 
     325        classScope.apply(this,[proto, privId].concat(baseProtos)); 
    334326         
    335327        //make sure the toString points to __str__, this will make overwriting __str__ after object construction impossible (todo ?) 
     
    517509        publ.sourceURI; 
    518510    }); 
    519      
    520511 
    521512    mod.loadURI=function(uri, cb){ 
     
    569560            } 
    570561         
    571          
    572562            try{ 
    573563                xmlhttp.open("GET", uri, true); 
     
    594584         
    595585        var searchURIs = []; 
    596          
    597586        if(mod.moduleSourceURIs[name] != undefined){ 
    598587            searchURIs.push(mod.moduleSourceURIs[name].format(mod)); 
     
    606595                searchURIs.push("%s/%s.js".format(mod.packagesURI.format(mod),name.join('/'))); 
    607596            } 
    608              
    609597            for(var i=0;i<mod.moduleSearchURIs.length; i++){ 
    610598                searchURIs.push("%s/%s.js".format(mod.moduleSearchURIs[i].format(mod), name.join("/"))); 
     
    676664    mod.createModuleFromSource =function(name, source, sourceURI, createdCB){ 
    677665        var newMod = new mod.ModuleClass(name, source, sourceURI); 
    678      
     666         
    679667        var cmpSrc = mod.compileSource(source); 
    680668         
     
    772760        } 
    773761    }; 
    774  
    775762     
    776763    mod.ModuleClass=Class(function(publ,priv,supr){ 
     
    814801    }); 
    815802     
    816     mod.createModule=function(name, source, sourceURI, modFn){ 
    817         var newMod = new mod.ModuleClass(name, source, sourceURI); 
    818          
    819         try{//to run the module source 
    820             modFn.call(newMod, newMod); 
    821         }catch(e){ 
    822             throw new mod.CreateModuleFailed(newMod, e); 
    823         } 
    824          
    825         applyNames(newMod); 
    826         
    827         mod.modules[name] = newMod; 
    828         return newMod; 
    829     }; 
    830      
    831      
    832     mod.Module = function(name, modFn){ 
    833         return mod.createModule(name, str(modFn), 'unknown', modFn); 
    834     }; 
    835      
    836803    var applyNames=function(container){ 
    837804        for(var n in container){ 
     
    843810    }; 
    844811 
     812 
     813//begin compiler 
     814    var or=function(){ 
     815        var a=[]; 
     816        for(var i=0;i<arguments.length;i++){ 
     817            a.push(grp(arguments[i])); 
     818        } 
     819        return a.join('|'); 
     820    } 
     821    var grp=function(a){return '(' + a + ')'; }; 
     822    var wrd=function(w){ 
     823        w= w.replace(/\\/g,'\\\\'); 
     824        w= w.replace(/\(/g,'\\('); 
     825        w= w.replace(/\)/g,'\\)'); 
     826        w= w.replace(/\//g,'\\/'); 
     827        w= w.replace(/\*/g,'\\*'); 
     828        w= w.replace(/\./g,'\\.'); 
     829        w= w.replace(/\]/g,'\\]'); 
     830        w= w.replace(/\[/g,'\\['); 
     831        w= w.replace(/\{/g,'\\{'); 
     832        w= w.replace(/\}/g,'\\}'); 
     833        return '\\b' + w + '\\b'; 
     834    }; 
     835 
     836    var parens= function(a){return '\\('+a+'\\)';}; 
     837    var re=function(s){ return new RegExp(s,'g');}; 
     838    var string=function(d){return   d + '(\\\\'+d+'|.' + d + ')*?' ;}; 
     839    var identifier=function(){return '\\w+';}; 
     840    var anyWhiteSpaceStart= grp('(^|[\\n\\r])\\s*') ; 
     841    var someWhiteSpaceStart= grp('(^|[\\n\\r])\\s*') ; 
     842    var startOfLine= grp('^|[\\n\\r]'); 
     843    var blockComment='/\\*([\\n\\r]|.)*?\\*/'; 
     844    var comment='//' + '.*' ; 
     845    var methodDecl= grp([wrd('function'), wrd('def'),wrd('publ')].join('|')) +'\\s+' +grp(identifier()) + '\\s*' +  grp(parens('.*?')); 
     846     
     847    var moduleFunctionStatement = startOfLine + methodDecl ; 
     848    var classMethodStatement = someWhiteSpaceStart + methodDecl; 
     849     
     850    var classMember= someWhiteSpaceStart + wrd('publ')+ '\\s+'  +grp(identifier()); 
     851    var classStatement = anyWhiteSpaceStart + wrd('class')+'\\s+'  +grp(identifier()) + '\\s+' + wrd('extends') +'\\s+' + grp('.+?') + '\\s*\\(\\{'; 
     852    var simpleClassStatement = anyWhiteSpaceStart + wrd('class')+'\\s+'  +grp(identifier()) + '\\s*\\(\\{'; 
     853     
     854    var importStatement = anyWhiteSpaceStart + wrd('import')+'\\s+'  + grp('.+?') + '[\\r\\n;]'; 
     855    var iterStatement= anyWhiteSpaceStart + wrd('iter') + '\\s*\\(\\s*' +grp(identifier())+  '\\s+' + wrd('in') + '\\s+' + grp('.+?') + '\\)\\s*\\{'; 
     856    var modLevelAssignment=startOfLine +grp(identifier())+'\\s*='; 
     857    var modGlobaling =wrd('mod') + '\\s+' + grp(identifier())  +'\\s*='; 
     858    var tupleAssingnment ='\\s\\[' + grp('.*?')  + '\\]\\s*=' + grp('.+?') + ';'; 
     859    var allStatments=re(or(blockComment, comment, string("'"), string('"'),  
     860                                    classStatement, simpleClassStatement, classMethodStatement,  moduleFunctionStatement,  
     861                                    classMember,importStatement,iterStatement,modLevelAssignment,modGlobaling,tupleAssingnment)); 
     862     
     863    var Replacer=Class(function(publ,priv,supr){ 
     864        publ.__init__=function(match, repl){ 
     865            this.match=re(match); 
     866            this.replacement=repl; 
     867        }; 
     868         
     869        publ.run = function(a){ 
     870            if(a.match(this.match)){ 
     871                if(typeof this.replacement=='function'){ 
     872                    return this.replacement(a,RegExp.$1,RegExp.$2,RegExp.$3,RegExp.$4,RegExp.$5,RegExp.$6,RegExp.$7,RegExp.$8,RegExp.$9); 
     873                }else{ 
     874                    return a.replace(this.match, this.replacement); 
     875                } 
     876            }else{ 
     877                return null; 
     878            } 
     879        }; 
     880    }); 
     881 
    845882    mod.compileSource=function(src){ 
    846         var or=function(){ 
    847             var a=[]; 
    848             for(var i=0;i<arguments.length;i++){ 
    849                 a.push(grp(arguments[i])); 
    850             } 
    851             return a.join('|'); 
    852         } 
    853          
    854         var grp=function(a){ 
    855             return '(' + a + ')'; 
    856         } 
    857  
    858         var wrd=function(w){ 
    859             w= w.replace(/\\/g,'\\\\'); 
    860             w= w.replace(/\(/g,'\\('); 
    861             w= w.replace(/\)/g,'\\)'); 
    862             w= w.replace(/\//g,'\\/'); 
    863             w= w.replace(/\*/g,'\\*'); 
    864             w= w.replace(/\./g,'\\.'); 
    865             w= w.replace(/\]/g,'\\]'); 
    866             w= w.replace(/\[/g,'\\['); 
    867             w= w.replace(/\{/g,'\\{'); 
    868             w= w.replace(/\}/g,'\\}'); 
    869              
    870             return '\\b' + w + '\\b'; 
    871         }; 
    872          
    873  
    874         var parens= function(a){ 
    875             return '\\('+a+'\\)'; 
    876         } 
    877          
    878         var re=function(s){ 
    879             return new RegExp(s,'g'); 
    880         }; 
    881          
    882         var string=function(d){ 
    883             return   d + '(\\\\'+d+'|.' + d + ')*?' ; 
    884         }; 
    885          
    886         var identifier=function(){ 
    887            return '\\w+'; 
    888         }; 
    889          
    890         var anyWhiteSpaceStart= grp('(^|[\\n\\r])\\s*') ; 
    891         var someWhiteSpaceStart= grp('(^|[\\n\\r])\\s*') ; 
    892         var startOfLine= grp('^|[\\n\\r]'); 
    893          
    894         var blockComment='/\\*([\\n\\r]|.)*?\\*/'; 
    895          
    896         var comment='//' + '.*' ; 
    897          
    898         var methodDecl= grp([wrd('function'), wrd('def'),wrd('publ')].join('|')) ; 
    899          
    900         var moduleFunctionStatement = startOfLine + methodDecl +'\\s+' +grp(identifier()) + '\\s*' +  grp(parens('.*?')); 
    901          
    902         var classMethodStatement = someWhiteSpaceStart + methodDecl +'\\s+' +grp(identifier()) +  '\\s*' + grp(parens('.*?')); 
    903          
    904         var classMember= someWhiteSpaceStart + wrd('publ')+ '\\s+'  +grp(identifier()); 
    905          
    906         var classStatement = anyWhiteSpaceStart + wrd('class')+'\\s+'  +grp(identifier()) + '\\s+' + wrd('extends') +'\\s+' + grp('.+?') + '\\(\\{'; 
    907         var simpleClassStatement = anyWhiteSpaceStart + wrd('class')+'\\s+'  +grp(identifier()) + '\\s*\\(\\{'; 
    908          
    909         var importStatement = anyWhiteSpaceStart + wrd('import')+'\\s+'  + grp('.+?') + '[\\r\\n;]'; 
    910          
    911         var iterStatement= anyWhiteSpaceStart + wrd('iter') + '\\s*\\(\\s*' +grp(identifier())+  '\\s+' + wrd('in') + '\\s+' + grp('.+?') + '\\)\\{'; 
    912          
    913         var modLevelAssignment=startOfLine +grp(identifier())+'\\s*='; 
    914          
    915         var modGlobaling =wrd('mod') + '\\s+' + grp(identifier())  +'\\s*='; 
    916          
    917         var tupleAssingnment ='\\s\\[' + grp('.*?')  + '\\]\\s*=' + grp('.+?') + ';'; 
    918     
    919         var allStatments=re(or(blockComment, comment, string("'"), string('"'),  
    920                                         classStatement, simpleClassStatement, classMethodStatement,  moduleFunctionStatement,  
    921                                         classMember,importStatement,iterStatement,modLevelAssignment,modGlobaling,tupleAssingnment)); 
    922          
    923  
    924         var Replacer=Class(function(publ,priv,supr){ 
    925             publ.__init__=function(match, repl){ 
    926                 this.match=re(match); 
    927                 this.replacement=repl; 
    928             }; 
    929              
    930             publ.run = function(a){ 
    931                 if(a.match(this.match)){ 
    932                     return a.replace(this.match, this.replacement); 
    933                 }else{ 
    934                     return null; 
    935                 } 
    936             }; 
     883        var imports=[]; 
     884         
     885        var replacers=[ 
     886            new Replacer(moduleFunctionStatement, '$1var $3 = mod.$3=function$4' ), 
     887            new Replacer(classMethodStatement, '$1publ.$4=function$5' ) ,       
     888            new Replacer(classStatement, function(s, re1,re2,re3,baseNames){ 
     889                s=s.replace(this.match,'$1var $3 = mod.$3=Class("$3", $4, function(publ,priv,supr){var '); 
     890                var names = baseNames.split(','); 
     891                for(var i=0;i<names.length;i++){ 
     892                    var name=names[i].replace(/\s/g,''); 
     893                    names[i]='$' + name + '=' + name + '.prototype'; 
     894                } 
     895                s= s + names.join(', ') + ';'; 
     896                return s; 
     897            }),        
     898            new Replacer(simpleClassStatement, '$1var $3 = mod.$3=Class("$3", function(publ,priv,supr){' ),        
     899            new Replacer(classMember, '$1publ.$3' ), 
     900            new Replacer(modLevelAssignment, '$1var $2 = mod.$2 =' ), 
     901            new Replacer(modGlobaling, '$1 = mod.$1 =' ), 
     902            new Replacer(importStatement, function(s, re1,re2,impcode){ 
     903                imports.push(impcode); 
     904                return '/*' + s + '*/'; 
     905            }), 
     906            new Replacer(iterStatement, function(s){ 
     907                imports.push('itertools:iter'); 
     908                return s.replace(this.match, "$1for(var $3,  _$3_iterator_= iter($4);  ($3=_$3_iterator_.next())!== undefined;){"); 
     909            }), 
     910            new Replacer(tupleAssingnment, function(s, names, expr){ 
     911                names = names.replace(/\s/g,'').split(','); 
     912                var s =' var ' + names.join(',')+', _' + names.join('_') + '=' + expr +';' 
     913                for(var i=0;i<names.length;i++){ 
     914                    s+=names[i] + '= _' + names.join('_') + '['+i+'];'; 
     915                } 
     916                return s; 
     917            }) 
     918        ];     
     919         
     920        src =src.replace(allStatments, function(a){ 
     921            var reslt=null; 
     922            for(var i=0;i<replacers.length;i++){ 
     923                rslt=replacers[i].run(a); 
     924                if(rslt!=null){  
     925                    return rslt; 
     926                } 
     927            } 
     928            return a; 
    937929        }); 
    938930         
    939          
    940         var compile=function(src){ 
    941             var replacers=[ 
    942                 new Replacer(moduleFunctionStatement, '$1var $3 = mod.$3=function$4' ), 
    943                 new Replacer(classMethodStatement, '$1publ.$4=function$5' ) ,       
    944                 new Replacer(classStatement, '$1var $3 = mod.$3=Class("$3", $4, function(publ,priv,supr){' ),        
    945                 new Replacer(simpleClassStatement, '$1var $3 = mod.$3=Class("$3", function(publ,priv,supr){' ),        
    946                 new Replacer(classMember, '$1publ.$3' ), 
    947                 new Replacer(modLevelAssignment, '$1var $2 = mod.$2 =' ), 
    948                 new Replacer(modGlobaling, '$1 = mod.$1 =' ) 
    949             ]; 
    950              
    951             var importRE=re(importStatement); 
    952             var iterRE =re(iterStatement); 
    953             var tupleRE =re(tupleAssingnment); 
    954              
    955             var imports=[]; 
    956              
    957             src =src.replace(allStatments, function(a){ 
    958                 var reslt=null; 
    959  
    960                  
    961                 for(var i=0;i<replacers.length;i++){ 
    962                     rslt=replacers[i].run(a); 
    963                     if(rslt!=null){  
    964                         return rslt; 
    965                     }else{ 
    966                         if(a.match(importRE)){ 
    967                             imports.push(RegExp.$3); 
    968                             return '/*' + a + '*/'; 
    969                         }else if(a.match(iterRE)){ 
    970                             imports.push('itertools:iter'); 
    971  
    972                             return a.replace(iterRE, "$1for(var $3,  _$3_iterator_= iter($4);  ($3=_$3_iterator_.next())!== undefined;){"); 
    973                         }else if(a.match(tupleRE)){ 
    974                             var names= RegExp.$1; 
    975                             var expr= RegExp.$2; 
    976                              
    977                             names = names.replace(/\s/g,'').split(','); 
    978                             var s =' var ' + names.join(',')+', _' + names.join('_') + '=' + expr +';' 
    979                             for(var i=0;i<names.length;i++){ 
    980                                 s+=names[i] + '= _' + names.join('_') + '['+i+'];'; 
    981                             } 
    982                             return s; 
    983                         } 
    984                     } 
    985                 } 
    986                 return a; 
    987             }); 
    988              
    989             return {imports: imports, src:src}; 
    990         }; 
    991         var src = compile(src); 
    992         //print(src.src) 
    993         return src; 
    994     }; 
    995      
     931        //print(src) 
     932        return {imports: imports, src:src}; 
     933    }; 
     934//end compiler     
    996935 
    997936    mod.run=function(modName, methodName, alertError){ 
  • branches/experimental/jsolait/jsolait.wsf

    r81 r82  
    3030     
    3131    <script language="JavaScript" src="./jsolait.js" /> 
     32    <script language="JavaScript" src="./packages/packages.pth" /> 
     33 
    3234     
    3335    <script language="JavaScript"> <![CDATA[ 
     36        var fs= new ActiveXObject("Scripting.FileSystemObject"); 
     37 
    3438        jsolait.__sourceURI__ = 'file://' + WScript.scriptFullName.slice(0,-3) + "js"; 
     39        jsolait.baseURI = 'file://' + fs.getParentFolderName(WScript.scriptFullName); 
     40        jsolait.moduleSearchURIs = ["%(baseURI)s/lib"].concat(ModuleSearchPaths); 
     41         
     42         
    3543        setTimeout=function(fn){ 
    3644            fn(); 
    3745        }; 
    3846 
    39     jsolait.Module("jsolaitws", function(mod){ 
    4047 
    41         mod.__version__ = "$Revision$" 
    42         mod.__sourceURI__ = 'file://' + WScript.scriptFullName; 
    43          
    44         var fs= new ActiveXObject("Scripting.FileSystemObject"); 
    45         ///The location where jsolait is installed. 
    46         jsolait.baseURI = 'file://' + fs.getParentFolderName(WScript.scriptFullName); 
    47         jsolait.moduleSearchURIs = ["%(baseURI)s/lib"]; 
    48          
    49         var wshShell= new ActiveXObject("WScript.Shell"); 
    50         var ForReading = 1, ForWriting = 2; 
    51          
    5248        print = function(m){ 
    5349            var s=[]; 
     
    5854            WScript.echo(s.join(" ")); 
    5955        } 
    60          
     56         
    6157        pprint= function(m, indent){ 
    6258            var m = m.split("\n"); 
     
    8278        } 
    8379        pprint.indent=0; 
    84          
     80 
    8581        Error.prototype.toString=function(){ 
    86             return  this.name +": " + this.message; 
     82            s="" 
     83            for(var key in this){ 
     84                s+='\n' + key+':' + this[key]  
     85            } 
     86            return   s; 
    8787        } 
    8888 
    89         mod.run=function(finishedCB){ 
    90              
    91             if (WScript.arguments.unnamed.length==0){ 
    92                 WScript.Arguments.ShowUsage();                                               
    93                 return; 
    94             }else{ 
    95                 //var fileName=fs.getAbsolutePathName(WScript.arguments.unnamed.item(0)); 
    96                 var fileName=WScript.arguments.unnamed.item(0); 
    97                 //todo:check if file exists 
    98             } 
    99              
    100             //get the base of the file to execute 
    101             var fileBase= fs.getParentFolderName(fileName); 
    102             //make sure the search path is updated to include the fileBase 
    103             jsolait.moduleSearchURIs = [fileBase,  "%(baseURI)s/lib"]; 
    104              
    105             //change working dir to the file's location 
    106             //todo:is it OK to change cwd? 
    107             if(fileBase.slice(0, 'file://'.length) == 'file://'){ 
    108                 wshShell.currentDirectory = fileBase.slice('file://'.length); 
    109             } 
    110  
    111             if(fileName.toLowerCase() != jsolait.__sourceURI__.toLowerCase()  &&  fileName.toLowerCase() != mod.__sourceURI__.toLowerCase()){ 
    112                 jsolait.moduleSourceURIs['__main__']=fileName; 
     89        __wsFinished__=false; 
     90        try{    
     91            jsolait.loadModule("wscript", function(jsolaitws,err){ 
     92                jsolaitws.run( function(err){ 
     93                    __wsFinished__=true; 
     94                    if(err){ 
     95                        print(''+err); 
     96                        throw err; 
     97                    } 
    11398                 
    114                 jsolait.loadModule('__main__', function(modl, err){ 
    115                     if(err){ 
    116                         finishedCB(err); 
    117                     }else{ 
    118                         try{ 
    119                             var tmain =typeof(modl.__main__); 
    120                         }catch(e){ 
    121                             var tmain=""; 
    122                         } 
    123                          
    124                         if(tmain=='function'){ 
    125                             //todo find arguments 
    126                             if(WScript.arguments.named.exists("script-args")){ 
    127                                 var args = WScript.arguments.named.Item("script-args"); 
    128                                 switch(args.slice(0,1)){ 
    129                                     case "{": case "'":  case "[":  case '"': 
    130                                         break; 
    131                                     default: 
    132                                         args = jsolait.repr(args); 
    133                                 } 
    134                                 f=new Function( "return " + args); 
    135                                 args = [f()]; 
    136                             }else{ 
    137                                 var args =[]; 
    138                             } 
    139                              
    140                             try{ 
    141                                 modl.__main__.apply(modl, args); 
    142                                 finishedCB(null); 
    143                             }catch(e){ 
    144                                 finishedCB( new mod.Exception("runing %s  __main__()  failed\n".format(modl),e)); 
    145                             } 
    146                         } 
    147                     } 
    148                 });  
    149             } 
    150         }; 
    151     }); 
    152  
    153     try{    
    154         jsolait.loadModule("jsolaitws", function(jsolaitws,err){ 
    155             jsolaitws.run( function(err){ 
    156                 if(err){ 
    157                     WScript.Echo(''+err); 
    158                 } 
    159              
     99                }); 
    160100            }); 
    161         }); 
    162     }catch(e){ 
     101        }catch(e){ 
     102            throw e; 
     103        } 
    163104         
    164     } 
    165         
     105        while(!__wsFinished__){ 
     106            WScript.sleep(0); 
     107        } 
     108            
    166109    ]]> 
    167110    </script> 
  • branches/experimental/jsolait/lib/jsonrpc.js

    r79 r82  
    7373        @param trace=undefined  The error causing this Exception 
    7474    **/ 
    75     publ __init__(err, trace){ 
    76         supr.__init__.call(this, err,trace); 
     75    publ __init__(msg, err, trace){ 
     76        supr.__init__.call(this, msg, trace); 
     77        this.error = err; 
    7778    }; 
    7879}); 
     
    129130**/ 
    130131class JSONRPCMethod({ 
    131  
     132     
    132133    var postData = function(url, user, pass, data, callback){ 
    133134        if(callback == null){//todo ===undefined 
     
    156157                var rslt = unmarshall(respTxt); 
    157158                if(rslt.error != null){ 
    158                     throw new JSONRPCError(rslt.error); 
     159                    throw new JSONRPCError('Error returned by Service', rslt.error); 
    159160                }else{ 
    160161                    return rslt.result; 
     
    186187    publ __call__(){ 
    187188        var args=new Array(); 
     189         
     190        for(var i=0;i<this._defaultArgs.length;i++){ 
     191            args.push(this._defaultArgs[i]); 
     192        } 
     193         
    188194        for(var i=0;i<arguments.length;i++){ 
    189195            args.push(arguments[i]); 
     
    245251    ///The password used for HTTP authorization. 
    246252    publ password; 
     253     
     254    publ _defaultArgs=[]; 
    247255}); 
    248256 
  • branches/experimental/test/test.js

    r80 r82  
    1212    var step=function(i){ 
    1313        var modName= 'test_' + moduleNames[i]; 
     14        logger.log('loading', modName) 
    1415        jsolait.loadModule(modName, function(m,err){ 
    1516            if(err){