pyolian: improve the doc generation
authorDave Andreoli <dave@gurumeditation.it>
Wed, 24 Jan 2018 21:26:29 +0000 (22:26 +0100)
committerWonki Kim <wonki_.kim@samsung.com>
Tue, 3 Apr 2018 09:50:08 +0000 (18:50 +0900)
src/scripts/gendoc/doc_start.template
src/scripts/gendoc/gendoc.py
src/scripts/pyolian/eolian.py

index 640f805..aeeed38 100644 (file)
@@ -2,51 +2,70 @@
 ~~Title: EFL Reference~~
 {{page>:develop:api-include:reference:general&nouser&nolink&nodate}}
 
+====== Python-EFL documentation preview ======
+This is just a work in progress for the future development of the
+Python-EFL Unified API.
+
+Pratically there is nothing python related currently in this documentation,
+so it can be considered valid for all languages.
+
+
+^** Some numbers just for information **^^
+<!--(for label, val in totals)-->
+| ${label}$ | **${val}$** |
+<!--(end)-->
+
+
 <!--(for ns in nspaces)-->
-   <!--(if ns.name.startswith('Efl'))-->
-===== ${ns.name}$ =====
+===== ${ns.name}$ (namespace) =====
 
-      <!--(for i, cls in enumerate(ns.regulars))-->
-         <!--(if i == 0)-->
-^ Classes ^^
-         <!--(end)-->
-| ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
+   <!--(for i, cls in enumerate(sorted(ns.regulars)))-->
+      <!--(if i == 0)-->
+^ Regular Classes ^^
       <!--(end)-->
-#!
-      <!--(for i, cls in enumerate(ns.interfaces))-->
-         <!--(if i == 0)-->
-^ Interfaces ^^
-         <!--(end)-->
 | ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
+   <!--(end)-->
+#!
+   <!--(for i, cls in enumerate(sorted(ns.abstracts)))-->
+      <!--(if i == 0)-->
+^ Abstract Classes ^^
       <!--(end)-->
+| ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
+   <!--(end)-->
 #!
-      <!--(for i, cls in enumerate(ns.mixins))-->
-         <!--(if i == 0)-->
+   <!--(for i, cls in enumerate(sorted(ns.mixins)))-->
+      <!--(if i == 0)-->
 ^ Mixins ^^
-         <!--(end)-->
+      <!--(end)-->
 | ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
+   <!--(end)-->
+#!
+   <!--(for i, cls in enumerate(sorted(ns.interfaces)))-->
+      <!--(if i == 0)-->
+^ Interfaces ^^
       <!--(end)-->
+| ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
+   <!--(end)-->
 #!
-      <!--(for i, typedecl in enumerate(ns.aliases))-->
-         <!--(if i == 0)-->
+   <!--(for i, typedecl in enumerate(sorted(ns.aliases)))-->
+      <!--(if i == 0)-->
 ^ Aliases ^^
-         <!--(end)-->
-| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
       <!--(end)-->
+| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
+   <!--(end)-->
 #!
-      <!--(for i, typedecl in enumerate(ns.structs))-->
-         <!--(if i == 0)-->
+   <!--(for i, typedecl in enumerate(sorted(ns.structs)))-->
+      <!--(if i == 0)-->
 ^ Structures ^^
-         <!--(end)-->
-| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
       <!--(end)-->
+| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
+   <!--(end)-->
 #!
-      <!--(for i, typedecl in enumerate(ns.enums))-->
-         <!--(if i == 0)-->
+   <!--(for i, typedecl in enumerate(sorted(ns.enums)))-->
+      <!--(if i == 0)-->
 ^ Enumerations ^^
-         <!--(end)-->
-| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
       <!--(end)-->
-
+| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
    <!--(end)-->
+
 <!--(end)-->
index 394c641..d328622 100755 (executable)
@@ -79,8 +79,34 @@ def page_path_for_object(obj):
 # render the main start.txt page
 if args.step in ('start', None):
     t = Template('doc_start.template')
+
+    nspaces = [ ns for ns in eolian_db.all_namespaces
+                if ns.name.startswith(args.namespace) ]
+
+    tot_classes = tot_regulars = tot_abstracts = tot_mixins = tot_ifaces = 0
+    for ns in nspaces:
+        for cls in ns.classes:
+            tot_classes += 1
+            if cls.type == eolian.Eolian_Class_Type.REGULAR:
+                tot_regulars += 1
+            elif cls.type == eolian.Eolian_Class_Type.ABSTRACT:
+                tot_abstracts += 1
+            elif cls.type == eolian.Eolian_Class_Type.MIXIN:
+                tot_mixins += 1
+            elif cls.type == eolian.Eolian_Class_Type.INTERFACE:
+                tot_ifaces += 1
+    totals = [
+        ('Namespaces', len(nspaces)),
+        ('ALL Classes', tot_classes),
+        ('Regular classes', tot_regulars),
+        ('Abstract classes', tot_abstracts),
+        ('Mixins', tot_mixins),
+        ('Interfaces', tot_ifaces),
+    ]
+
     output_file = os.path.join(args.root_path,'data','pages','develop','api','start.txt')
-    t.render(output_file, args.verbose, nspaces=eolian_db.all_namespaces)
+    t.render(output_file, args.verbose, nspaces=nspaces, totals=totals)
+
 
 # render a page for each Class
 if args.step in ('classes', None):
index 291865b..6e3b52b 100644 (file)
@@ -318,6 +318,13 @@ class EolianBaseObject(object):
                 return self.name == other
         return False
 
+    def __gt__(self, other):
+        if isinstance(other, EolianBaseObject):
+            if hasattr(self, 'full_name'):
+                return self.full_name > other.full_name
+            elif hasattr(self, 'name'):
+                return self.name > other.name
+
     def __hash__(self):
         return self._obj.value
 
@@ -479,7 +486,11 @@ class Namespace(object):
         return "<eolian.Namespace '{0._name}'>".format(self)
 
     def __eq__(self, other):
-        return self.name == other.name
+        if isinstance(other, Namespace):
+            return self.name == other.name
+        if isinstance(other, str):
+            return self.name == other
+        raise TypeError('Namespace can only compare with Namespace or str')
 
     def __lt__(self, other):
         return self.name < other.name
@@ -510,6 +521,12 @@ class Namespace(object):
                    c.namespace == self._name]
 
     @property
+    def abstracts(self):
+        return [ c for c in self._unit.all_classes
+                if c.type == Eolian_Class_Type.ABSTRACT and
+                   c.namespace == self._name]
+
+    @property
     def mixins(self):
         return [ c for c in self._unit.all_classes
                 if c.type == Eolian_Class_Type.MIXIN and