pyolian: improve the doc generation

This commit is contained in:
Davide Andreoli 2018-01-24 22:26:29 +01:00
parent a32735e9a7
commit 94b6ad8448
3 changed files with 109 additions and 47 deletions

View File

@ -2,51 +2,70 @@
~~Title: EFL Reference~~
{{page>:develop:api-include:reference:general&nouser&nolink&nodate}}
<!--(for ns in nspaces)-->
<!--(if ns.name.startswith('Efl'))-->
===== ${ns.name}$ =====
====== Python-EFL documentation preview ======
This is just a work in progress for the future development of the
Python-EFL Unified API.
<!--(for i, cls in enumerate(ns.regulars))-->
<!--(if i == 0)-->
^ Classes ^^
<!--(end)-->
| ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
<!--(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(ns.mixins))-->
<!--(if i == 0)-->
^ Mixins ^^
<!--(end)-->
| ${CLS_LINK}$ | ${BEST_SUMMARY(obj=cls)}$ |
<!--(end)-->
#!
<!--(for i, typedecl in enumerate(ns.aliases))-->
<!--(if i == 0)-->
^ Aliases ^^
<!--(end)-->
| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
<!--(end)-->
#!
<!--(for i, typedecl in enumerate(ns.structs))-->
<!--(if i == 0)-->
^ Structures ^^
<!--(end)-->
| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
<!--(end)-->
#!
<!--(for i, typedecl in enumerate(ns.enums))-->
<!--(if i == 0)-->
^ Enumerations ^^
<!--(end)-->
| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
<!--(end)-->
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)-->
===== ${ns.name}$ (namespace) =====
<!--(for i, cls in enumerate(sorted(ns.regulars)))-->
<!--(if i == 0)-->
^ Regular Classes ^^
<!--(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(sorted(ns.mixins)))-->
<!--(if i == 0)-->
^ Mixins ^^
<!--(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(sorted(ns.aliases)))-->
<!--(if i == 0)-->
^ Aliases ^^
<!--(end)-->
| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
<!--(end)-->
#!
<!--(for i, typedecl in enumerate(sorted(ns.structs)))-->
<!--(if i == 0)-->
^ Structures ^^
<!--(end)-->
| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
<!--(end)-->
#!
<!--(for i, typedecl in enumerate(sorted(ns.enums)))-->
<!--(if i == 0)-->
^ Enumerations ^^
<!--(end)-->
| ${TYPEDECL_LINK}$ | ${BEST_SUMMARY(obj=typedecl)}$ |
<!--(end)-->
<!--(end)-->
<!--(end)-->

View File

@ -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):

View 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
@ -509,6 +520,12 @@ class Namespace(object):
if c.type == Eolian_Class_Type.REGULAR and
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