: DOC_LINE_LIMIT)
static void
-_generate_ref(const char *refn, Eina_Strbuf *wbuf, Eina_Bool use_legacy)
+_generate_ref(const Eolian_Unit *src, const char *refn, Eina_Strbuf *wbuf,
+ Eina_Bool use_legacy)
{
const Eolian_Declaration *decl = eolian_declaration_get_by_name(refn);
if (decl)
eina_stringshare_del(bname);
goto noref;
}
- _generate_ref(bname, wbuf, use_legacy);
+ _generate_ref(src, bname, wbuf, use_legacy);
eina_strbuf_append(wbuf, sfx);
eina_stringshare_del(bname);
return;
return;
}
- const Eolian_Class *cl = eolian_class_get_by_name(bname);
+ const Eolian_Class *cl = eolian_class_get_by_name(src, bname);
const Eolian_Function *fn = NULL;
/* match methods and properties; we're only figuring out existence */
Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
while ((mname != refn) && (*mname != '.')) --mname;
if (mname == refn) goto noref;
bname = eina_stringshare_add_length(refn, mname - refn);
- cl = eolian_class_get_by_name(bname);
+ cl = eolian_class_get_by_name(src, bname);
eina_stringshare_del(bname);
}
if (cl)
}
static int
-_append_section(const char *desc, int ind, int curl, Eina_Strbuf *buf,
- Eina_Strbuf *wbuf, Eina_Bool use_legacy)
+_append_section(const Eolian_Unit *src, const char *desc, int ind, int curl,
+ Eina_Strbuf *buf, Eina_Strbuf *wbuf, Eina_Bool use_legacy)
{
Eina_Bool try_note = EINA_TRUE;
while (*desc)
++desc;
if (*(desc - 1) == '.') --desc;
Eina_Stringshare *refn = eina_stringshare_add_length(ref, desc - ref);
- _generate_ref(refn, wbuf, use_legacy);
+ _generate_ref(src, refn, wbuf, use_legacy);
eina_stringshare_del(refn);
}
else
}
static void
-_gen_doc_brief(const char *summary, const char *since, const char *group,
- const char *el, int indent, Eina_Strbuf *buf,
+_gen_doc_brief(const Eolian_Unit *src, const char *summary, const char *since,
+ const char *group, const char *el, int indent, Eina_Strbuf *buf,
Eina_Bool use_legacy)
{
int curl = 4 + indent;
eina_strbuf_append(buf, "/**< ");
else
eina_strbuf_append(buf, "/** ");
- curl = _append_section(summary, indent, curl, buf, wbuf, use_legacy);
+ curl = _append_section(src, summary, indent, curl, buf, wbuf, use_legacy);
eina_strbuf_free(wbuf);
curl = _append_extra(el, indent, curl, EINA_FALSE, buf);
curl = _append_since(since, indent, curl, buf);
}
static void
-_gen_doc_full(const char *summary, const char *description, const char *since,
+_gen_doc_full(const Eolian_Unit *src, const char *summary,
+ const char *description, const char *since,
const char *group, const char *el, int indent, Eina_Strbuf *buf,
Eina_Bool use_legacy)
{
curl += _indent_line(buf, indent);
eina_strbuf_append(buf, " * @brief ");
curl += sizeof(" * @brief ") - 1;
- _append_section(summary, indent, curl, buf, wbuf, use_legacy);
+ _append_section(src, summary, indent, curl, buf, wbuf, use_legacy);
eina_strbuf_append_char(buf, '\n');
_indent_line(buf, indent);
eina_strbuf_append(buf, " *\n");
curl = _indent_line(buf, indent);
eina_strbuf_append(buf, " * ");
- _append_section(description, indent, curl + 3, buf, wbuf, use_legacy);
+ _append_section(src, description, indent, curl + 3, buf, wbuf, use_legacy);
curl = _append_extra(el, indent, curl, EINA_TRUE, buf);
curl = _append_since(since, indent, curl, buf);
eina_strbuf_append_char(buf, '\n');
}
static Eina_Strbuf *
-_gen_doc_buf(const Eolian_Documentation *doc, const char *group,
- const char *el, int indent, Eina_Bool use_legacy)
+_gen_doc_buf(const Eolian_Unit *src, const Eolian_Documentation *doc,
+ const char *group, const char *el, int indent,
+ Eina_Bool use_legacy)
{
if (!doc) return NULL;
Eina_Strbuf *buf = eina_strbuf_new();
if (!desc)
- _gen_doc_brief(sum, since, group, el, indent, buf, use_legacy);
+ _gen_doc_brief(src, sum, since, group, el, indent, buf, use_legacy);
else
- _gen_doc_full(sum, desc, since, group, el, indent, buf, use_legacy);
+ _gen_doc_full(src, sum, desc, since, group, el, indent, buf, use_legacy);
return buf;
}
Eina_Strbuf *
-eo_gen_docs_full_gen(const Eolian_Documentation *doc, const char *group,
- int indent, Eina_Bool use_legacy)
+eo_gen_docs_full_gen(const Eolian_Unit *src, const Eolian_Documentation *doc,
+ const char *group, int indent, Eina_Bool use_legacy)
{
- return _gen_doc_buf(doc, group, NULL, indent, use_legacy);
+ return _gen_doc_buf(src, doc, group, NULL, indent, use_legacy);
}
Eina_Strbuf *
-eo_gen_docs_event_gen(const Eolian_Event *ev, const char *group)
+eo_gen_docs_event_gen(const Eolian_Unit *src, const Eolian_Event *ev,
+ const char *group)
{
if (!ev) return NULL;
return bufs;
}
- return _gen_doc_buf(doc, group, p, 0, EINA_FALSE);
+ return _gen_doc_buf(src, doc, group, p, 0, EINA_FALSE);
}
Eina_Strbuf *
-eo_gen_docs_func_gen(const Eolian_Function *fid, Eolian_Function_Type ftype,
- int indent, Eina_Bool use_legacy)
+eo_gen_docs_func_gen(const Eolian_Unit *src, const Eolian_Function *fid,
+ Eolian_Function_Type ftype, int indent,
+ Eina_Bool use_legacy)
{
const Eolian_Function_Parameter *par = NULL;
const Eolian_Function_Parameter *vpar = NULL;
/* only summary, nothing else; generate standard brief doc */
if (!desc && !par && !vpar && !rdoc && (ftype == EOLIAN_METHOD || !pdoc))
{
- _gen_doc_brief(sum ? sum : "No description supplied.", since, group,
+ _gen_doc_brief(src, sum ? sum : "No description supplied.", since, group,
NULL, indent, buf, use_legacy);
return buf;
}
curl += _indent_line(buf, indent);
eina_strbuf_append(buf, " * @brief ");
curl += sizeof(" * @brief ") - 1;
- _append_section(sum ? sum : "No description supplied.",
+ _append_section(src, sum ? sum : "No description supplied.",
indent, curl, buf, wbuf, use_legacy);
eina_strbuf_append_char(buf, '\n');
{
curl = _indent_line(buf, indent);
eina_strbuf_append(buf, " * ");
- _append_section(desc, indent, curl + 3, buf, wbuf, use_legacy);
+ _append_section(src, desc, indent, curl + 3, buf, wbuf, use_legacy);
eina_strbuf_append_char(buf, '\n');
if (par || rdoc || pdoc || since)
{
const char *pdesc = eolian_documentation_description_get(pdoc);
curl = _indent_line(buf, indent);
eina_strbuf_append(buf, " * ");
- _append_section(eolian_documentation_summary_get(pdoc), indent,
+ _append_section(src, eolian_documentation_summary_get(pdoc), indent,
curl + 3, buf, wbuf, use_legacy);
eina_strbuf_append_char(buf, '\n');
if (pdesc)
eina_strbuf_append(buf, " *\n");
curl = _indent_line(buf, indent);
eina_strbuf_append(buf, " * ");
- _append_section(pdesc, indent, curl + 3, buf, wbuf, use_legacy);
+ _append_section(src, pdesc, indent, curl + 3, buf, wbuf, use_legacy);
eina_strbuf_append_char(buf, '\n');
}
if (par || rdoc || since)
{
eina_strbuf_append_char(buf, ' ');
curl += 1;
- _append_section(eolian_documentation_summary_get(adoc),
+ _append_section(src, eolian_documentation_summary_get(adoc),
indent, curl, buf, wbuf, use_legacy);
}
curl = _indent_line(buf, indent);
eina_strbuf_append(buf, " * @return ");
curl += sizeof(" * @return ") - 1;
- _append_section(eolian_documentation_summary_get(rdoc), indent, curl,
- buf, wbuf, use_legacy);
+ _append_section(src, eolian_documentation_summary_get(rdoc), indent,
+ curl, buf, wbuf, use_legacy);
eina_strbuf_append_char(buf, '\n');
if (since)
{
* @return A documentation comment
*
*/
-Eina_Strbuf *eo_gen_docs_full_gen(const Eolian_Documentation *doc, const char *group, int indent, Eina_Bool use_legacy);
+Eina_Strbuf *eo_gen_docs_full_gen(const Eolian_Unit *unit, const Eolian_Documentation *doc, const char *group, int indent, Eina_Bool use_legacy);
/*
* @brief Generate function documentation
* @return A documentation comment
*
*/
-Eina_Strbuf *eo_gen_docs_func_gen(const Eolian_Function *fid, Eolian_Function_Type ftype, int indent, Eina_Bool use_legacy);
+Eina_Strbuf *eo_gen_docs_func_gen(const Eolian_Unit *unit, const Eolian_Function *fid, Eolian_Function_Type ftype, int indent, Eina_Bool use_legacy);
/*
* @brief Generate event documentation
* @return A documentation comment
*
*/
-Eina_Strbuf *eo_gen_docs_event_gen(const Eolian_Event *ev, const char *group);
+Eina_Strbuf *eo_gen_docs_event_gen(const Eolian_Unit *unit, const Eolian_Event *ev, const char *group);
#endif
}
static void
-_gen_func(const Eolian_Function *fid, Eolian_Function_Type ftype,
- Eina_Strbuf *buf, char *cname, char *cnameu, Eina_Bool legacy)
+_gen_func(const Eolian_Unit *src, const Eolian_Function *fid,
+ Eolian_Function_Type ftype, Eina_Strbuf *buf, char *cname,
+ char *cnameu, Eina_Bool legacy)
{
Eina_Stringshare *fcn = eolian_function_full_c_name_get(fid, ftype, legacy);
if (!fcn)
hasdoc = !!eolian_implement_documentation_get(fimp, EOLIAN_PROPERTY);
if (hasdoc)
{
- Eina_Strbuf *dbuf = eo_gen_docs_func_gen(fid, ftype, 0, legacy);
+ Eina_Strbuf *dbuf = eo_gen_docs_func_gen(src, fid, ftype, 0, legacy);
eina_strbuf_append(buf, eina_strbuf_string_get(dbuf));
eina_strbuf_append_char(buf, '\n');
eina_strbuf_free(dbuf);
}
void
-eo_gen_header_gen(const Eolian_Unit *src EINA_UNUSED, const Eolian_Class *cl,
+eo_gen_header_gen(const Eolian_Unit *src, const Eolian_Class *cl,
Eina_Strbuf *buf, Eina_Bool legacy)
{
if (!cl)
const Eolian_Documentation *doc = eolian_class_documentation_get(cl);
if (doc)
{
- Eina_Strbuf *cdoc = eo_gen_docs_full_gen(doc,
+ Eina_Strbuf *cdoc = eo_gen_docs_full_gen(src, doc,
eolian_class_full_name_get(cl), 0, EINA_FALSE);
if (cdoc)
{
{
case EOLIAN_PROP_GET:
case EOLIAN_PROP_SET:
- _gen_func(fid, ftype, buf, cname, cnameu, legacy);
+ _gen_func(src, fid, ftype, buf, cname, cnameu, legacy);
break;
case EOLIAN_PROPERTY:
- _gen_func(fid, EOLIAN_PROP_SET, buf, cname, cnameu, legacy);
+ _gen_func(src, fid, EOLIAN_PROP_SET, buf, cname, cnameu, legacy);
eina_strbuf_append_char(buf, '\n');
- _gen_func(fid, EOLIAN_PROP_GET, buf, cname, cnameu, legacy);
+ _gen_func(src, fid, EOLIAN_PROP_GET, buf, cname, cnameu, legacy);
break;
default:
- _gen_func(fid, EOLIAN_METHOD, buf, cname, cnameu, legacy);
+ _gen_func(src, fid, EOLIAN_METHOD, buf, cname, cnameu, legacy);
}
}
eina_iterator_free(itr);
eina_strbuf_append_printf(buf, "EWAPI extern const "
"Efl_Event_Description _%s;\n\n", evn);
- Eina_Strbuf *evdbuf = eo_gen_docs_event_gen(ev,
+ Eina_Strbuf *evdbuf = eo_gen_docs_event_gen(src, ev,
eolian_class_full_name_get(cl));
eina_strbuf_append(buf, eina_strbuf_string_get(evdbuf));
eina_strbuf_append_char(buf, '\n');
eina_strbuf_free(cltd);
}
- const Eolian_Class *cl = eolian_class_get_by_file(ifname);
+ const Eolian_Class *cl = eolian_class_get_by_file(src, ifname);
eo_gen_header_gen(src, cl, buf, legacy);
if (cl || !legacy)
{
INF("generating source: %s", ofname);
Eina_Strbuf *buf = eina_strbuf_new();
- const Eolian_Class *cl = eolian_class_get_by_file(ifname);
+ const Eolian_Class *cl = eolian_class_get_by_file(src, ifname);
eo_gen_types_source_gen(src, ifname, buf);
eo_gen_source_gen(src, cl, buf);
if (cl || (eot && eina_strbuf_length_get(buf)))
{
INF("generating impl: %s", ofname);
- const Eolian_Class *cl = eolian_class_get_by_file(ifname);
+ const Eolian_Class *cl = eolian_class_get_by_file(src, ifname);
if (!cl)
return EINA_FALSE;
}
void
-eo_gen_source_gen(const Eolian_Unit *src EINA_UNUSED,
+eo_gen_source_gen(const Eolian_Unit *src,
const Eolian_Class *cl, Eina_Strbuf *buf)
{
if (!cl)
eina_strbuf_append(buf, ", NULL");
EINA_ITERATOR_FOREACH(itr, iname)
{
- const Eolian_Class *icl = eolian_class_get_by_name(iname);
+ const Eolian_Class *icl = eolian_class_get_by_name(src, iname);
Eina_Stringshare *mname = eolian_class_c_name_get(icl);
eina_strbuf_append_printf(buf, ", %s", mname);
eina_stringshare_del(mname);
#include "docs.h"
static Eina_Strbuf *
-_type_generate(const Eolian_Typedecl *tp, Eina_Bool full, Eina_Bool legacy)
+_type_generate(const Eolian_Unit *src, const Eolian_Typedecl *tp,
+ Eina_Bool full, Eina_Bool legacy)
{
char *grp = strdup(eolian_typedecl_full_name_get(tp));
char *p = strrchr(grp, '.');
if (p) *p = '\0';
- Eina_Strbuf *buf = eo_gen_docs_full_gen(eolian_typedecl_documentation_get(tp),
+ Eina_Strbuf *buf = eo_gen_docs_full_gen(src, eolian_typedecl_documentation_get(tp),
grp, 0, legacy);
free(grp);
if (!buf) buf = eina_strbuf_new();
const char *nl = strrchr(eina_strbuf_string_get(buf), '\n');
if (nl)
{
- Eina_Strbuf *fbuf = eo_gen_docs_full_gen(fdoc, NULL,
+ Eina_Strbuf *fbuf = eo_gen_docs_full_gen(src, fdoc, NULL,
strlen(nl), legacy);
if (fbuf)
eina_strbuf_append_printf(buf, " %s",
const char *nl = strrchr(eina_strbuf_string_get(buf), '\n');
if (nl)
{
- Eina_Strbuf *fbuf = eo_gen_docs_full_gen(fdoc, NULL,
+ Eina_Strbuf *fbuf = eo_gen_docs_full_gen(src, fdoc, NULL,
strlen(nl), legacy);
if (fbuf)
eina_strbuf_append_printf(buf, " %s",
}
static Eina_Strbuf *
-_var_generate(const Eolian_Variable *vr, Eina_Bool legacy)
+_var_generate(const Eolian_Unit *src, const Eolian_Variable *vr, Eina_Bool legacy)
{
char *fn = strdup(eolian_variable_full_name_get(vr));
char *p = strrchr(fn, '.');
if (p) *p = '\0';
- Eina_Strbuf *buf = eo_gen_docs_full_gen(eolian_variable_documentation_get(vr),
+ Eina_Strbuf *buf = eo_gen_docs_full_gen(src, eolian_variable_documentation_get(vr),
fn, 0, legacy);
if (p)
{
return buf;
}
-void eo_gen_types_header_gen(const Eolian_Unit *src EINA_UNUSED,
+void eo_gen_types_header_gen(const Eolian_Unit *src,
const char *eof, Eina_Strbuf *buf,
Eina_Bool full, Eina_Bool legacy)
{
if (!vr || eolian_variable_is_extern(vr))
continue;
- Eina_Strbuf *vbuf = _var_generate(vr, legacy);
+ Eina_Strbuf *vbuf = _var_generate(src, vr, legacy);
if (vbuf)
{
eina_strbuf_append(buf, eina_strbuf_string_get(vbuf));
continue;
}
- Eina_Strbuf *tbuf = _type_generate(tp, full, legacy);
+ Eina_Strbuf *tbuf = _type_generate(src, tp, full, legacy);
if (tbuf)
{
eina_strbuf_append(buf, eina_strbuf_string_get(tbuf));
}
}
-Eina_Strbuf *eo_gen_class_typedef_gen(const Eolian_Unit *src EINA_UNUSED,
- const char *eof)
+Eina_Strbuf *eo_gen_class_typedef_gen(const Eolian_Unit *src, const char *eof)
{
- const Eolian_Class *cl = eolian_class_get_by_file(eof);
+ const Eolian_Class *cl = eolian_class_get_by_file(src, eof);
if (!cl)
return NULL;
char *clfn = eo_gen_c_full_name_get(eolian_class_full_name_get(cl));
Eina_Bool eolian_all_eo_files_parse();
Eina_Bool eolian_all_eot_files_parse();
Eina_Bool eolian_database_validate();
- const Eolian_Class *eolian_class_get_by_name(const char *class_name);
- const Eolian_Class *eolian_class_get_by_file(const char *file_name);
+ const Eolian_Class *eolian_class_get_by_name(const Eolian_Unit *unit, const char *class_name);
+ const Eolian_Class *eolian_class_get_by_file(const Eolian_Unit *unit, const char *file_name);
const char *eolian_class_file_get(const Eolian_Class *klass);
const char *eolian_class_full_name_get(const Eolian_Class *klass);
const char *eolian_class_name_get(const Eolian_Class *klass);
}
})
-M.class_get_by_name = function(cname)
- local v = eolian.eolian_class_get_by_name(cname)
+M.class_get_by_name = function(unit, cname)
+ local v = eolian.eolian_class_get_by_name(unit, cname)
if v == nil then return nil end
return v
end
-M.class_get_by_file = function(fname)
- local v = eolian.eolian_class_get_by_file(fname)
+M.class_get_by_file = function(unit, fname)
+ local v = eolian.eolian_class_get_by_file(unit, fname)
if v == nil then return nil end
return v
end
/*
* @brief Gets a class by its name
*
+ * @param[in] unit the unit to look in
* @param[in] class_name name of the class to get.
* @return the class
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_class_get_by_name(const char *class_name);
+EAPI const Eolian_Class *eolian_class_get_by_name(const Eolian_Unit *unit, const char *class_name);
/*
* @brief Gets a class by its filename (name.eo)
*
+ * @param[in] unit the unit to look in
* @param[in] file_name the filename
* @return the class stored in the file
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_class_get_by_file(const char *file_name);
+EAPI const Eolian_Class *eolian_class_get_by_file(const Eolian_Unit *unit, const char *file_name);
/*
* @brief Returns the name of the file containing the given class.
}
EAPI const Eolian_Class *
-eolian_class_get_by_name(const char *class_name)
+eolian_class_get_by_name(const Eolian_Unit *unit EINA_UNUSED,
+ const char *class_name)
{
if (!_classes) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(class_name);
}
EAPI const Eolian_Class *
-eolian_class_get_by_file(const char *file_name)
+eolian_class_get_by_file(const Eolian_Unit *unit EINA_UNUSED,
+ const char *file_name)
{
if (!_classesf) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(file_name);
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
if (eolian_type_type_get(tp) != EOLIAN_TYPE_CLASS)
return NULL;
- return eolian_class_get_by_name(tp->full_name);
+ /* FIXME: pass unit properly */
+ return eolian_class_get_by_name(NULL, tp->full_name);
}
EAPI size_t
eo_lexer_syntax_error(ls, ebuf);
}
_parse_dep(ls, fname, iname);
- const Eolian_Class *dep = eolian_class_get_by_name(iname);
+ /* FIXME: pass unit properly */
+ const Eolian_Class *dep = eolian_class_get_by_name(NULL, iname);
if (!dep)
{
char ebuf[PATH_MAX];
/* we can do a depth first search, it's easier and doesn't matter
* which part of the inheritance tree we find the class in
*/
- const Eolian_Class *fcl = _get_impl_class(eolian_class_get_by_name(s), cln);
+ /* FIXME: pass unit properly */
+ const Eolian_Class *fcl = _get_impl_class(eolian_class_get_by_name(NULL, s), cln);
if (fcl)
return fcl;
}
return EOLIAN_DOC_REF_INVALID;
*evname++ = '\0';
- const Eolian_Class *cl = eolian_class_get_by_name(name);
+ /* FIXME: pass unit properly */
+ const Eolian_Class *cl = eolian_class_get_by_name(NULL, name);
if (!cl)
return EOLIAN_DOC_REF_INVALID;
*suffix++ = '\0';
}
- const Eolian_Class *cl = eolian_class_get_by_name(name);
+ /* FIXME: pass unit properly */
+ const Eolian_Class *cl = eolian_class_get_by_name(NULL, name);
if (!cl)
return EOLIAN_DOC_REF_INVALID;