Pyolian gendoc: use some aux eolian functions to simplify templates

This commit is contained in:
Davide Andreoli 2019-10-07 20:32:05 +02:00
parent 3cdb87990a
commit 70eb1c7b17
4 changed files with 40 additions and 27 deletions

View File

@ -7,14 +7,8 @@ ${UNTOKENIZE(tokens=obj.summary_tokens)}$#!
<!--(elif isinstance(obj, Implement))-->
<!--(if obj.documentation_get(obj.function.type))-->
${UNTOKENIZE(tokens=obj.documentation_get(obj.function.type).summary_tokens)}$#!
<!--(else)-->
<!--(for parent_impl in obj.class_.implements)-->
<!--(if parent_impl.function.name == obj.function.name)-->
<!--(if parent_impl.documentation_get(parent_impl.function.type))-->
${UNTOKENIZE(tokens=parent_impl.documentation_get(parent_impl.function.type).summary_tokens)}$#!
<!--(end)-->
<!--(end)-->
<!--(end)-->
<!--(elif obj.documentation_fallback)-->
${UNTOKENIZE(tokens=obj.documentation_fallback.summary_tokens)}$#!
<!--(end)-->
<!--(elif obj and obj.documentation)-->
${UNTOKENIZE(tokens=obj.documentation.summary_tokens)}$#!
@ -31,14 +25,8 @@ ${UNTOKENIZE(tokens=obj.description_tokens)}$#!
<!--(elif isinstance(obj, Implement))-->
<!--(if obj.documentation_get(obj.function.type))-->
${UNTOKENIZE(tokens=obj.documentation_get(obj.function.type).description_tokens)}$#!
<!--(else)-->
<!--(for parent_impl in obj.class_.implements)-->
<!--(if parent_impl.function.name == obj.function.name)-->
<!--(if parent_impl.documentation_get(parent_impl.function.type))-->
${UNTOKENIZE(tokens=parent_impl.documentation_get(parent_impl.function.type).description_tokens)}$#!
<!--(end)-->
<!--(end)-->
<!--(end)-->
<!--(elif obj.documentation_fallback)-->
${UNTOKENIZE(tokens=obj.documentation_fallback.description_tokens)}$#!
<!--(end)-->
<!--(elif obj and obj.documentation)-->
${UNTOKENIZE(tokens=obj.documentation.description_tokens)}$#!
@ -55,14 +43,8 @@ ${UNTOKENIZE(tokens=obj.documentation.description_tokens)}$#!
<!--(elif isinstance(obj, Implement))-->
<!--(if obj.documentation_get(obj.function.type))-->
//Since ${obj.documentation_get(obj.function.type).since}$//
<!--(else)-->
<!--(for parent_impl in obj.class_.implements)-->
<!--(if parent_impl.function.name == obj.function.name)-->
<!--(if parent_impl.documentation_get(parent_impl.function.type))-->
//Since ${parent_impl.documentation_get(parent_impl.function.type).since}$//
<!--(end)-->
<!--(end)-->
<!--(end)-->
<!--(elif obj.documentation_fallback)-->
//Since ${obj.documentation_fallback.since}$//
<!--(end)-->
<!--(elif obj and obj.documentation and obj.documentation.since)-->
//Since ${obj.documentation.since}$//

View File

@ -1011,6 +1011,11 @@ class Implement(Object):
def __repr__(self):
return "<eolian.Implement '{0.name}'>".format(self)
@cached_property
def parent(self):
c_impl = lib.eolian_aux_implement_parent_get(self)
return Implement(c_impl) if c_impl else None
@cached_property
def class_(self):
c_cls = lib.eolian_implement_class_get(self)
@ -1022,10 +1027,14 @@ class Implement(Object):
return Function(c_func) if c_func else None
def documentation_get(self, ftype=Eolian_Function_Type.METHOD):
# something strange in this eolian api :/ (see 'documentation' property
c_doc = lib.eolian_implement_documentation_get(self, ftype)
# c_doc = lib.eolian_implement_documentation_get(self, ftype)
c_doc = lib.eolian_aux_implement_documentation_get(self, ftype)
return Documentation(c_doc) if c_doc else None
@cached_property
def documentation_fallback(self):
c_doc = lib.eolian_aux_implement_documentation_fallback_get(self)
return Documentation(c_doc) if c_doc else None
# TODO implement util properties for documentation_get
def is_auto(self, ftype=Eolian_Function_Type.METHOD):
return bool(lib.eolian_implement_is_auto(self, ftype))

View File

@ -706,3 +706,17 @@ lib.eolian_error_documentation_get.restype = c_void_p
# EAPI Eina_Bool eolian_error_is_extern(const Eolian_Error *err);
lib.eolian_error_is_extern.argtypes = (c_void_p,)
lib.eolian_error_is_extern.restype = c_bool
# Eolian Aux ################################################################
# EAPI const Eolian_Implement *eolian_aux_implement_parent_get(const Eolian_Implement *impl);
lib.eolian_aux_implement_parent_get.argtypes = (c_void_p,)
lib.eolian_aux_implement_parent_get.restype = c_void_p
# EAPI const Eolian_Documentation *eolian_aux_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type ftype);
lib.eolian_aux_implement_documentation_get.argtypes = (c_void_p, c_int)
lib.eolian_aux_implement_documentation_get.restype = c_void_p
# EAPI const Eolian_Documentation *eolian_aux_implement_documentation_fallback_get(const Eolian_Implement *impl);
lib.eolian_aux_implement_documentation_fallback_get.argtypes = (c_void_p,)
lib.eolian_aux_implement_documentation_fallback_get.restype = c_void_p

View File

@ -407,6 +407,14 @@ class TestEolianImplement(unittest.TestCase):
self.assertFalse(im.is_prop_get)
self.assertFalse(im.is_property)
self.assertTrue(im.is_method)
self.assertIsNone(im.parent)
def test_implement_parent(self):
cls = eolian_db.class_by_name_get('Efl.Ui.Button')
im = [im for im in cls.implements if im.short_name == 'content_unset'][0]
self.assertIsInstance(im, eolian.Implement)
self.assertEqual(im.name, 'Efl.Content.content_unset') # TODO is this right??
self.assertEqual(im.parent.name, 'Efl.Content.content_unset')
class TestEolianEvent(unittest.TestCase):