davemds pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=ac2f3896dfbf275427f7b9ed933fd3cd6f571596

commit ac2f3896dfbf275427f7b9ed933fd3cd6f571596
Author: Dave Andreoli <d...@gurumeditation.it>
Date:   Sat Oct 5 12:20:44 2019 +0200

    Pyolian gendoc: the last hidden bits of documentation ref tokens
    
    Now links works also inside documentation text \o/
---
 src/scripts/gendoc/doc_macros.include |  10 +++-
 src/scripts/pyolian/eolian.py         | 101 +++++++++++++++++++---------------
 src/scripts/pyolian/eolian_lib.py     |   4 +-
 src/scripts/pyolian/generator.py      |   1 +
 4 files changed, 68 insertions(+), 48 deletions(-)

diff --git a/src/scripts/gendoc/doc_macros.include 
b/src/scripts/gendoc/doc_macros.include
index 6dfd45e6d7..877b7c67bf 100644
--- a/src/scripts/gendoc/doc_macros.include
+++ b/src/scripts/gendoc/doc_macros.include
@@ -78,7 +78,15 @@ ${'\n\n' if i else ''}$#!
          <!--(if token.type == Eolian_Doc_Token_Type.TEXT)-->
 %%${token.text}$%%#!
          <!--(elif token.type == Eolian_Doc_Token_Type.REF)-->
-**REF ${token.text}$ ${token.ref}$ ??**#!
+            <!--(if token.ref_type == Eolian_Object_Type.FUNCTION)-->
+${CLS_LINK(cls=token.ref_obj)}$.${FUNC_LINK(func=token.ref_attr)}$#!
+            <!--(elif token.ref_type == Eolian_Object_Type.TYPEDECL)-->
+${TYPEDECL_LINK(typedecl=token.ref_obj)}$#!
+            <!--(elif token.ref_type == Eolian_Object_Type.CLASS)-->
+${CLS_LINK(cls=token.ref_obj)}$#!
+            <!--(else)-->
+**TODO REF ${token.ref_type}$**$#!
+            <!--(end)-->
          <!--(elif token.type == Eolian_Doc_Token_Type.MARKUP_MONOSPACE)-->
 ''${token.text}$''#!
          <!--(elif token.type == Eolian_Doc_Token_Type.MARK_NOTE)-->
diff --git a/src/scripts/pyolian/eolian.py b/src/scripts/pyolian/eolian.py
index a8b77e15e9..50db1e6f3c 100644
--- a/src/scripts/pyolian/eolian.py
+++ b/src/scripts/pyolian/eolian.py
@@ -37,6 +37,25 @@ _already_halted = False
 
 
 #  Eolian Enums  ##############################################################
+class Eolian_Object_Type(IntEnum):
+    UNKNOWN = 0
+    CLASS = 1
+    TYPEDECL = 2
+    STRUCT_FIELD = 3
+    ENUM_FIELD = 4
+    TYPE = 5
+    CONSTANT = 6
+    EXPRESSION = 7
+    FUNCTION = 8
+    FUNCTION_PARAMETER = 9
+    EVENT = 10
+    PART = 11
+    IMPLEMENT = 12
+    CONSTRUCTOR = 13
+    DOCUMENTATION = 14
+    ERROR = 15
+
+
 class Eolian_Function_Type(IntEnum):
     UNRESOLVED = 0
     PROPERTY = 1
@@ -782,7 +801,7 @@ class Constructor(Object):
 
 class Event(Object):
     def __repr__(self):
-        return "<eolian.Event '{0.name}', c_name='{0.c_name}'>".format(self)
+        return "<eolian.Event '{0.name}', c_macro='{0.c_macro}'>".format(self)
 
     @cached_property
     def c_macro(self):
@@ -1262,7 +1281,7 @@ class _Eolian_Doc_Token_Struct(ctypes.Structure):
                 ("text_end", c_char_p)]
 
 
-class Documentation(Object):  # OK (1 TODO Unit*)
+class Documentation(Object):
     def __repr__(self):
         t = self.summary if len(self.summary) < 40 else self.summary[:40] + 
'...'
         return "<eolian.Documentation summary='{}'>".format(t)
@@ -1293,8 +1312,7 @@ class Documentation(Object):  # OK (1 TODO Unit*)
         """ return a list of paragraphs, each one is a list of tokens """
         return self._tokenize(self.description)
 
-    @classmethod
-    def _tokenize(cls, full_text):
+    def _tokenize(self, full_text):
         paragraphs = []
         if not full_text:
             return paragraphs
@@ -1309,8 +1327,10 @@ class Documentation(Object):  # OK (1 TODO Unit*)
             while next_chunk:
                 typ = lib.eolian_doc_token_type_get(byref(tok))
                 txt = lib.eolian_doc_token_text_get(byref(tok))
-                #  ref =  # TODO ... Stupido parametro '*unit'  :(
-                tokens.append(Documentation_Token(typ, txt))
+                ref_obj = c_void_p(0)
+                ref_attr = c_void_p(0)
+                ref_type = lib.eolian_doc_token_ref_resolve(byref(tok), 
self.unit.state, byref(ref_obj), byref(ref_attr))
+                tokens.append(Documentation_Token(typ, txt, ref_type, ref_obj, 
ref_attr))
                 lib.free(c_void_p(txt))
                 next_chunk = 
lib.eolian_documentation_tokenize(c_char_p(next_chunk), byref(tok))
             paragraphs.append(tokens)
@@ -1319,10 +1339,12 @@ class Documentation(Object):  # OK (1 TODO Unit*)
 
 
 class Documentation_Token(object):
-    def __init__(self, c_token_type, c_text):
+    def __init__(self, c_token_type, c_text, c_ref_type, c_ref_obj, 
c_ref_attr):
         self._type = Eolian_Doc_Token_Type(c_token_type)
         self._text = _str_to_py(c_text)
-        self._ref = None  # TODO
+        self._ref_type = Eolian_Object_Type(c_ref_type)
+        self._ref_obj = Object(c_ref_obj) if c_ref_obj else None
+        self._ref_attr = Object(c_ref_attr) if c_ref_attr else None
 
     def __repr__(self):
         t = self.text if len(self.text) < 40 else self.text[:40] + '...'
@@ -1338,8 +1360,16 @@ class Documentation_Token(object):
         return self._text
 
     @property
-    def ref(self):
-        return self._ref
+    def ref_type(self):
+        return self._ref_type
+
+    @property
+    def ref_obj(self):
+        return self._ref_obj
+
+    @property
+    def ref_attr(self):
+        return self._ref_attr
 
 
 class Error(Object):
@@ -1382,42 +1412,23 @@ def _str_to_py(s):
 
 #  internal Object type -> Class mapping  #####################################
 
-class _Eolian_Object_Type(IntEnum):
-    UNKNOWN = 0
-    CLASS = 1
-    TYPEDECL = 2
-    STRUCT_FIELD = 3
-    ENUM_FIELD = 4
-    TYPE = 5
-    CONSTANT = 6
-    EXPRESSION = 7
-    FUNCTION = 8
-    FUNCTION_PARAMETER = 9
-    EVENT = 10
-    PART = 11
-    IMPLEMENT = 12
-    CONSTRUCTOR = 13
-    DOCUMENTATION = 14
-    ERROR = 15
-
-
 _eolian_type_class_mapping = {
-    _Eolian_Object_Type.UNKNOWN: Object,
-    _Eolian_Object_Type.CLASS: Class,
-    _Eolian_Object_Type.TYPEDECL: Typedecl,
-    _Eolian_Object_Type.STRUCT_FIELD: Struct_Type_Field,
-    _Eolian_Object_Type.ENUM_FIELD: Enum_Type_Field,
-    _Eolian_Object_Type.TYPE: Type,
-    _Eolian_Object_Type.CONSTANT: Constant,
-    _Eolian_Object_Type.EXPRESSION: Expression,
-    _Eolian_Object_Type.FUNCTION: Function,
-    _Eolian_Object_Type.FUNCTION_PARAMETER: Function_Parameter,
-    _Eolian_Object_Type.EVENT: Event,
-    _Eolian_Object_Type.PART: Part,
-    _Eolian_Object_Type.IMPLEMENT: Implement,
-    _Eolian_Object_Type.CONSTRUCTOR: Constructor,
-    _Eolian_Object_Type.DOCUMENTATION: Documentation,
-    _Eolian_Object_Type.ERROR: Error,
+    Eolian_Object_Type.UNKNOWN: Object,
+    Eolian_Object_Type.CLASS: Class,
+    Eolian_Object_Type.TYPEDECL: Typedecl,
+    Eolian_Object_Type.STRUCT_FIELD: Struct_Type_Field,
+    Eolian_Object_Type.ENUM_FIELD: Enum_Type_Field,
+    Eolian_Object_Type.TYPE: Type,
+    Eolian_Object_Type.CONSTANT: Constant,
+    Eolian_Object_Type.EXPRESSION: Expression,
+    Eolian_Object_Type.FUNCTION: Function,
+    Eolian_Object_Type.FUNCTION_PARAMETER: Function_Parameter,
+    Eolian_Object_Type.EVENT: Event,
+    Eolian_Object_Type.PART: Part,
+    Eolian_Object_Type.IMPLEMENT: Implement,
+    Eolian_Object_Type.CONSTRUCTOR: Constructor,
+    Eolian_Object_Type.DOCUMENTATION: Documentation,
+    Eolian_Object_Type.ERROR: Error,
 }
 
 
diff --git a/src/scripts/pyolian/eolian_lib.py 
b/src/scripts/pyolian/eolian_lib.py
index a92d896972..e73c37e1db 100644
--- a/src/scripts/pyolian/eolian_lib.py
+++ b/src/scripts/pyolian/eolian_lib.py
@@ -690,8 +690,8 @@ lib.eolian_doc_token_text_get.argtypes = (c_void_p,)
 lib.eolian_doc_token_text_get.restype = c_void_p  # char* TO BE FREED
 
 # EAPI Eolian_Object_Type eolian_doc_token_ref_resolve(const Eolian_Doc_Token 
*tok, const Eolian_State *state, const Eolian_Object **data, const 
Eolian_Object **data2);
-#  lib.eolian_doc_token_ref_resolve.argtypes = (c_void_p, c_void_p, ???, ???)
-#  lib.eolian_doc_token_ref_resolve.restype = c_int
+lib.eolian_doc_token_ref_resolve.argtypes = (c_void_p, c_void_p, c_void_p, 
c_void_p)
+lib.eolian_doc_token_ref_resolve.restype = c_int
 
 
 #  Eolian_Error  ##############################################################
diff --git a/src/scripts/pyolian/generator.py b/src/scripts/pyolian/generator.py
index 28138f531f..67c636fc9c 100755
--- a/src/scripts/pyolian/generator.py
+++ b/src/scripts/pyolian/generator.py
@@ -134,6 +134,7 @@ class Template(pyratemp.Template):
             'Documentation_Token': eolian.Documentation_Token,
             'Error': eolian.Error,
             # Eolian Enums
+            'Eolian_Object_Type': eolian.Eolian_Object_Type,
             'Eolian_Function_Type': eolian.Eolian_Function_Type,
             'Eolian_Parameter_Direction': eolian.Eolian_Parameter_Direction,
             'Eolian_Class_Type': eolian.Eolian_Class_Type,

-- 


Reply via email to