sync
authorAlan Knowles <alan@roojs.com>
Fri, 30 Jul 2021 04:31:37 +0000 (12:31 +0800)
committerAlan Knowles <alan@roojs.com>
Fri, 30 Jul 2021 04:31:37 +0000 (12:31 +0800)
roojspacker/DocBuilder.vala
roojspacker/DocParser.vala
roojspacker/DocTag.vala
roojspacker/PackerRun.vala
roojspacker/SymbolSet.vala

index c60eb61..7daac44 100644 (file)
@@ -38,17 +38,16 @@ namespace JSDOC
        
                    this.parseSrcFiles();
                    
+                   DocParser.validateAugments();                   
+                   DocParser.fillChildClasses();
+                   DocParser.fillDocChildren();
+                   
+                   
                    this.symbolSet = DocParser.symbols();
                    
                    
-                   var classes =  this.classes();
-                   foreach (var cls in classes) {
-                       foreach (var lookcls in classes) {
-                                       if (lookcls.augments.contains(cls.alias)) {
-                                               cls.addChildClass(lookcls.alias);
-                                       }
-                               }
-               }
+                   var classes =  DocParser.classes();
+                    
                    
                    // this currently uses the concept of publish.js...
                   
@@ -61,12 +60,14 @@ namespace JSDOC
                                //print(JSON.stringify(symbols,null,4));
                                 
                        var jsonAll = new Json.Object(); 
+                       var ar = new Json.Array(); 
                                for (var i = 0, l = classes.size; i < l; i++) {
                                    var symbol = classes.get(i);    
-                                   jsonAll.set_object_member(symbol.alias,  symbol.toClassJSON());
+                                   //
+                                   ar.add_object_element(  symbol.toJson());
 
                                }
-                               
+                               jsonAll.set_array_member("data", ar);
                                var generator = new Json.Generator ();
                            var root = new Json.Node(Json.NodeType.OBJECT);
                   
@@ -197,21 +198,7 @@ namespace JSDOC
                    
                }
                
-               // prehaps move to symbolset?
-               public Gee.ArrayList<Symbol> classes()
-               {
-                       var classes = new Gee.ArrayList<Symbol>();
-                       foreach(var symbol in this.symbolSet.values()) {
-                               if (symbol.isaClass()) { 
-                                       classes.add(symbol);
-                               }
-                       }    
-                       classes.sort( (a,b) => {
-                               return a.alias.collate(b.alias); 
-                       });
-                       return classes;
-               }
-                   
+                
                 
                 
        string tempdir;
@@ -282,7 +269,7 @@ namespace JSDOC
                        this.makeSrcFile(file);
                    }
                    //print(JSON.stringify(symbols,null,4));
-                   var classes = this.classes();
+                   var classes = DocParser.classes();
                     
                     //GLib.debug("classTemplate Process : all classes");
                        
@@ -301,7 +288,7 @@ namespace JSDOC
                        
                        var   class_gen = new Json.Generator ();
                            var  class_root = new Json.Node(Json.NodeType.OBJECT);
-                               class_root.init_object(symbol.toClassDocJSON(this));
+                               class_root.init_object(symbol.toClassDocJSON());
                                class_gen.set_root (class_root);
                                class_gen.pretty=  true;
                                class_gen.indent = 2;
@@ -312,7 +299,7 @@ namespace JSDOC
 
                    }
                    
-                   // outptu class truee
+                   // outptu class tree
                    
                    var   class_tree_gen = new Json.Generator ();
            var  class_tree_root = new Json.Node(Json.NodeType.ARRAY);
@@ -395,6 +382,7 @@ namespace JSDOC
                add.set_string_member("name", name);
                add.set_array_member("cn", new Json.Array());
                add.set_boolean_member("is_class", is_class);
+               
                this.class_tree_map.set(name, add);
                var bits = name.split(".");
                if (bits.length == 1) {
index ccfcc86..891dc14 100644 (file)
@@ -1,6 +1,10 @@
 
 namespace JSDOC
 {
+       public errordomain DocParserError {
+            InvalidAugments
+    }
  
        public class DocParser : Object 
        {
@@ -37,9 +41,79 @@ namespace JSDOC
            public static string currentSourceFile;
     
 
-               
+               public static Gee.ArrayList<Symbol> classes()
+               {
+                       var classes = new Gee.ArrayList<Symbol>();
+                       foreach(var symbol in this.symbols().values()) {
+                               if (symbol.isaClass()) { 
+                                       classes.add(symbol);
+                               }
+                       }    
+                       classes.sort( (a,b) => {
+                               return a.alias.collate(b.alias); 
+                       });
+                       return classes;
+               }
+
+               public static void  validateAugments()
+               {
+                       var classes =  DocParser.classes();
+                   foreach (var cls in classes) {
+                               for(var ii = 0, il = cls.augments.size; ii < il; ii++) {
+                                               var contributer = DocParser.symbols().getSymbol(cls.augments[ii]);
+                                               if (contributer == null) {
+                                                       throw new DocParserError.InvalidAugments("Looking at Class %s, could not find augments %s", 
+                                                                       cls.alias, class.augments[ii]);
+                                                       continue;
+                                               }
+                                                
+                                       }
+                               }
+               }
+
+               public static void  fillChildClasses()
+               {
+                        var classes =  DocParser.classes();
+                        foreach (var cls in classes) {
+                       foreach (var lookcls in classes) {
+                                       if (lookcls.augments.contains(cls.alias)) {
+                                               var extends = "";
+                                               if (lookcls.augments.size > 0) {
+                                                       extends = lookcls.augments.get(0);
+                                                       if ( extends  == lookcls.alias) {
+                                                               extends = lookcls.augments.size > 1 ? lookcls.augments.get(1) : "";
+                                                       }
+                                               }
+                                               cls.addChildClass(lookcls.alias, extends);
+                                       }
+                               }
+               }
+               }
                 
-               
+               public static void  fillDocChildren()
+               {
+                        // lookup symbol : builder.getSymbol()
+                        
+                        var classes =  DocParser.classes();
+                        foreach (var cls in classes) {
+                                var ar = classes.doc_children.slice(0, classes.doc_children.size); // copy?
+                                classes.doc_children.clear();
+                        foreach(var cn in ar) {
+                               var sy = DocParser.symbols().getSymbol(cn);
+                               if (contributer == null) {
+                                               throw new DocParserError.InvalidDocChildren("Looking at Class %s, could not find child %s", 
+                                                               cls.alias, cn);
+                                               continue;
+                                       }
+                                       classes.doc_children.add(cn);
+                                       foreach(var cc in sy.childClassList) {
+                                               classes.doc_children.add(cc);
+                                       }
+                               }
+                       }       
+                        
+                   
+               }
                
                public static void parse(TokenStream ts, string srcFile) 
                {
index 71cbaf2..df050d7 100644 (file)
@@ -196,7 +196,8 @@ namespace JSDOC
                    EnumClass enumc = (EnumClass) typeof (DocTagTitle).class_ref ();
 
                    unowned EnumValue? eval = enumc.get_value_by_name(
-                                "JSDOC_DOC_TAG_TITLE_"+  mi.fetch(1).up().replace("-", "_")
+                       //       "JSDOC_DOC_TAG_TITLE_"+  mi.fetch(1).up()
+                                "JSDOC_DOC_TAG_TITLE_"+  mi.fetch(1).up().replace("-", "_")
                 );
                    if (eval == null) {
                                throw new DocTagException.INVALID_TITLE("title not supported ??");
index 9445994..db5494c 100644 (file)
@@ -353,7 +353,7 @@ namespace JSDOC
                        }  
                        
                        var run_pack = false;
-                       if (opt_target != null || opt_debug_target != null || opt_dump_tokens) {
+                       if (opt_target != null || opt_debug_target != null || opt_dump_tokens ) {
                                // do the actual packing...
                                p.pack( opt_target == null ? "" : opt_target ,
                                                opt_debug_target == null ? "" :  opt_debug_target );
@@ -363,10 +363,12 @@ namespace JSDOC
                                }
                                return;
                }
-               if (opt_doc_target != null) {
+               if (opt_doc_target != null || opt_doc_dump_tree) {
                                // remove trailing /
-                       opt_doc_target = opt_doc_target.has_suffix("/") ? 
-                                       opt_doc_target.substring(0, opt_doc_target.length-1) : opt_doc_target;
+                               if (opt_doc_target  != null ) {
+                                   opt_doc_target = opt_doc_target.has_suffix("/") ? 
+                                               opt_doc_target.substring(0, opt_doc_target.length-1) : opt_doc_target;
+                       }
                        var d = new JSDOC.DocBuilder(p);
                        return;
                } 
index bf82b2a..7f4b8ea 100644 (file)
@@ -25,7 +25,7 @@ namespace JSDOC {
                                return this.__index;
                        }
                }
-                
+               // CTOR - do nothing..?
                public SymbolSet ()
                {