15 #include "tm_typemanager_p.h"
17 #include <gwenhywfar/debug.h>
18 #include <gwenhywfar/misc.h>
19 #include <gwenhywfar/directory.h>
26 #define TM_TYPEMANAGER_XMLFLAGS (\
27 GWEN_XML_FLAGS_DEFAULT | \
28 GWEN_XML_FLAGS_HANDLE_HEADERS | \
29 GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS \
40 tym->typeList=Typemaker2_Type_List_new();
42 tym->lang=strdup(
"c");
52 Typemaker2_Type_List_free(tym->typeList);
70 if (s) tym->lang=strdup(s);
78 return tym->apiDeclaration;
85 free(tym->apiDeclaration);
86 if (s) tym->apiDeclaration=strdup(s);
87 else tym->apiDeclaration=
NULL;
101 Typemaker2_Type_List_Add(ty, tym->typeList);
110 ty=Typemaker2_Type_List_First(tym->typeList);
115 if (n && strcasecmp(s, n)==0)
117 ty=Typemaker2_Type_List_Next(ty);
168 "File [%s] does not contain a tm2 element",
180 if (s && *s && strcasecmp(s, tym->lang)==0)
186 "File [%s] does not contain a <typedef> element for type [%s] and language [%s]",
220 const char *baseType,
221 const char *nType,
const char *nPrefix) {
232 tbuf[
sizeof(tbuf)-1]=0;
236 tbuf[
sizeof(tbuf)-1]=0;
240 tbuf[
sizeof(tbuf)-1]=0;
300 "File [%s] does not contain a tm2 element",
310 "File [%s] does not contain a type element",
340 Typemaker2_Type_List_Add(ty, tym->typeList);
375 TYPEMAKER2_TYPE_LIST2 *tlist2) {
380 TYPEMAKER2_TYPE_LIST2 *tl;
381 TYPEMAKER2_TYPE_LIST2_ITERATOR *it;
397 "File [%s] does not contain a tm2 element",
407 "File [%s] does not contain a type element",
414 tl=Typemaker2_Type_List2_new();
425 Typemaker2_Type_List2_free(tl);
439 Typemaker2_Type_List_Add(ty, tym->typeList);
440 Typemaker2_Type_List2_PushBack(tl, ty);
457 it=Typemaker2_Type_List2_First(tl);
459 ty=Typemaker2_Type_List2Iterator_Data(it);
465 Typemaker2_Type_List2Iterator_free(it);
466 Typemaker2_Type_List2_free(tl);
471 ty=Typemaker2_Type_List2Iterator_Next(it);
473 Typemaker2_Type_List2Iterator_free(it);
477 it=Typemaker2_Type_List2_First(tl);
479 ty=Typemaker2_Type_List2Iterator_Data(it);
485 Typemaker2_Type_List2Iterator_free(it);
486 Typemaker2_Type_List2_free(tl);
491 Typemaker2_Type_List2_PushBack(tlist2, ty);
493 ty=Typemaker2_Type_List2Iterator_Next(it);
495 Typemaker2_Type_List2Iterator_free(it);
499 Typemaker2_Type_List2_free(tl);
507 TYPEMAKER2_TYPE_LIST2 *tlist2) {
527 "File [%s] does not contain a tm2 element",
537 "File [%s] does not contain a type element",
567 Typemaker2_Type_List_Add(ty, tym->typeList);
568 Typemaker2_Type_List2_PushBack(tlist2, ty);
644 TYPEMAKER2_MEMBER_LIST *ml;
652 m=Typemaker2_Member_List_First(ml);
686 m=Typemaker2_Member_List_Next(m);
690 m=Typemaker2_Member_List_First(ml);
720 m=Typemaker2_Member_List_Next(m);
764 Typemaker2_Type_List_Add(ty, tym->typeList);
798 for (i=0; i<indent; i++) fprintf(f,
" ");
799 fprintf(f,
"TypeManager\n");
801 for (i=0; i<indent; i++) fprintf(f,
" ");
802 fprintf(f,
"Types\n");
804 ty=Typemaker2_Type_List_First(tym->typeList);
807 ty=Typemaker2_Type_List_Next(ty);
void Typemaker2_TypeManager_AddFolder(TYPEMAKER2_TYPEMANAGER *tym, const char *s)
const char * Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s)
TYPEMAKER2_TYPE * Typemaker2_TypeManager_GetType(TYPEMAKER2_TYPEMANAGER *tym, const char *s)
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i)
int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_TYPE * Typemaker2_TypeManager_FindType(TYPEMAKER2_TYPEMANAGER *tym, const char *s)
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
TYPEMAKER2_ENUM * Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
void Typemaker2_TypeManager_Dump(TYPEMAKER2_TYPEMANAGER *tym, FILE *f, int indent)
#define GWEN_FREE_OBJECT(varname)
GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
void Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER *tm, const char *s)
TYPEMAKER2_TYPE * Typemaker2_TypeManager_LoadType(TYPEMAKER2_TYPEMANAGER *tym, const char *typeName)
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
TYPEMAKER2_TYPE * Typemaker2_Type_new()
int Typemaker2_TypeManager_LoadTypeFile2(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
void Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_ENUM *te)
void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s)
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
void Typemaker2_TypeManager_free(TYPEMAKER2_TYPEMANAGER *tym)
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
int Typemaker2_TypeManager_MakeTypeDerivatives(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty, const char *baseType, const char *nType, const char *nPrefix)
const char * Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_FLAGS_ENUM
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
TYPEMAKER2_TYPEMANAGER * Typemaker2_TypeManager_new()
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s)
#define DBG_ERROR(dbg_logger, format, args...)
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
const char * Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty)
int Typemaker2_TypeManager_MakeTypeList1(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
#define GWEN_ERROR_NOT_FOUND
#define DBG_INFO(dbg_logger, format, args...)
void Typemaker2_TypeManager_AddType(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
int Typemaker2_TypeManager_MakeTypeList2(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty)
void Typemaker2_TypeManager_SetApiDeclaration(TYPEMAKER2_TYPEMANAGER *tym, const char *s)
TYPEMAKER2_TYPE * Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty)
int Typemaker2_TypeManager_MakeTypeTree(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s)
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
const char * Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER *tm)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
void Typemaker2_TypeManager_SetLanguage(TYPEMAKER2_TYPEMANAGER *tym, const char *s)
#define GWEN_ERROR_NO_DATA
void Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER *tm, int i)
const char * Typemaker2_TypeManager_GetLanguage(const TYPEMAKER2_TYPEMANAGER *tym)
int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty)
GWEN_STRINGLIST * GWEN_StringList_new(void)
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST2
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
TYPEMAKER2_ENUM * Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s)
#define TYPEMAKER2_FLAGS_VOLATILE
int Typemaker2_TypeManager_LoadTypeFileNoLookup(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2)
struct GWEN__XMLNODE GWEN_XMLNODE
#define TM_TYPEMANAGER_XMLFLAGS
TYPEMAKER2_TYPE * Typemaker2_TypeManager_LoadTypeFile(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1