JSDOC/CompressWhite.js
[gnome.introspection-doc-generator] / JSDOC / CompressWhite.js
index d60beec..13d6df7 100644 (file)
@@ -8,9 +8,9 @@
    @arg packer {Packer} 
  */
  
-CompressWhite =  function (ts, packer)
+CompressWhite =  function (ts, packer, keepWhite)
 {
-    
+    keepWhite = keepWhite || false;
     ts.rewind();
     //var str = File.read(fn);
     var rep_var = 1;
@@ -21,6 +21,7 @@ CompressWhite =  function (ts, packer)
             break;
         }
         if (tok.type == "WHIT") {
+           
             continue;
             //if (tok._isDoc) {
             //    continue;
@@ -32,7 +33,16 @@ CompressWhite =  function (ts, packer)
             
             
         }
-        
+        if (tok.data == "}")  {
+            
+            if (ts.lookTok(1).type == 'NAME' && ts.look(1,true).name == "NEWLINE") {
+            
+                ts.look(0).outData = ts.look(0).data+"\n";
+            }
+            // restore.. 
+            
+            continue;
+        }
         // add semi-colon's where linebreaks are used... - not foolproof yet.!
         if (tok.type == "NAME")  {
             //var tokident = ts.look(-1).data + tok.data + ts.look(1).data +  ts.look(2).data;
@@ -62,17 +72,63 @@ CompressWhite =  function (ts, packer)
                 //println("got = function() ");
                 var cu = ts.cursor;
                 
-                ts.balance("(");
-                ts.balance("{");
+                 if (!ts.balance("(") ){
+                    ts.dump(cu-40, cu);
+                    print(">>>>>>>>>>>>>>>>>HERE>>>>>>>>>>>>");
+                    ts.dump(cu, cu+40);
+                    
+                    throw "could not find end lbrace!!!";
+                }
+                //print("AFTER BALANCE (");
+                //ts.dump(cu, ts.cursor);
+                //ts.cursor--; // cursor at the (
+                if (!ts.balance("{") ){
+                    ts.dump(cu-40, cu);
+                    print(">>>>>>>>>>>>>>>>>HERE>>>>>>>>>>>>");
+                    ts.dump(cu, cu+40);
+                    
+                    throw "could not find end lbrace!!!";
+                }
+                //print('FN: '+ts.tokens[cu].toString());
+                //print('F1: '+ts.lookTok(1).toString());
+                //print('F2: '+ts.look(1,true).toString());
+                
                 // if next is not ';' -> make it so...
                 // although this var a=function(){},v,c; causes 
-                if (!ts.lookTok(1).isData(';') && !ts.lookTok(1).isData('}') && ts.lookTok(1,true).isLineBreak()) {
-                    ts.cur().outData = ts.look(0).data+";";
+                if (ts.lookTok(1).data != ';' && ts.lookTok(1).data != '}' && ts.look(1,true).name == "NEWLINE") {
+                    
+                    ts.look(0).outData = ts.look(0).data+";";
+                   // print("ADDING SEMI: " + ts.look(0).toString());
+                    //ts.dump(cu, ts.cursor+2);
+                }
+                
+                 //ts.dump(cu, ts.cursor+2);
+                // restore.. 
+                ts.cursor = cu;
+                continue;
+            }
+            // next item is a name..
+            if ((ts.lookTok(1).type == 'NAME' || ts.lookTok(1).type == 'KEYW' ) &&  ts.look(1,true).name == "NEWLINE") {
+                // preserve linebraek
+                ts.look(0).outData = ts.look(0).data+"\n";
+            }
+            // method call followed by name..
+            if (ts.lookTok(1).data == "(")  {
+                var cu = ts.cursor;
+                
+                ts.balance("(");
+                 // although this var a=function(){},v,c; causes 
+                
+                if (ts.lookTok(1).type == 'NAME' && ts.look(1,true).name == "NEWLINE") {
+                
+                    ts.look(0).outData = ts.look(0).data+"\n";
                 }
                 // restore.. 
                 ts.cursor = cu;
                 continue;
             }
+            
+            
             // function a () { ... };
                 /*
             if (ts.look(-1).isTypeN(Script.TOKfunction) &&  ts.look(1).isTypeN(Script.TOKlparen)) {
@@ -101,10 +157,14 @@ CompressWhite =  function (ts, packer)
                 var cu = ts.cursor;
                 
                 if (!ts.balance("{") ){
+                    ts.dump(cu-40, cu);
+                    print(">>>>>>>>>>>>>>>>>HERE>>>>>>>>>>>>");
+                    ts.dump(cu, cu+40);
+                    
                     throw "could not find end lbrace!!!";
                 }
                 // if next is not ';' -> make it so...
-
+                
                 if (ts.lookTok(1).data != ';' && ts.lookTok(1).data != '}' && ts.look(1,true).name=="NEWLINE") {
                     ts.look(0).outData = ts.look(0).data +";";
                 }
@@ -114,6 +174,8 @@ CompressWhite =  function (ts, packer)
             }
             
             // any more??
+            // a = function(....) { } 
+          
         }
         
         
@@ -209,14 +271,19 @@ CompressWhite =  function (ts, packer)
     var outoff = 0;
     out.length = ts.slen; // prealloc.
     out = '';
+    var tok;
     while (true) {
-        var tok = ts.nextTok();
+        
+        tok = keepWhite ? ts.next() : ts.nextTok();
+        
         if (!tok) {
             break;
         }
+        if (tok.name == "COMM") {
+            tok.outData == '\n';
+        }
         
-        
-        if (tok.type == "NAME"  && tok.identifier && tok.identifier.mungedValue.length) {
+        if (tok.type == "NAME"  && tok.identifier && tok.identifier.mungedValue && tok.identifier.mungedValue.length) {
             //f.write(tok.identifier.mungedValue);
             out += tok.identifier.mungedValue;
             continue;
@@ -230,8 +297,8 @@ CompressWhite =  function (ts, packer)
                 continue;
             }
         }
-        //f.write(tok.outData);
-        out += tok.outData;
+     
+        out += tok.outData !== false ? tok.outData : tok.data;
         
         if ((tok.outData == ';') && (out.length - outoff > 255)) {
             outoff = out.length;