00001
00002
00003
00004
00005
00023 #ifndef __XAINT_H__
00024 #define __XAINT_H__
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029 #ifdef XAINT_DLL
00030 #define XAINT_API __declspec(dllexport)
00031 #else
00032 #define XAINT_API
00033 #endif
00034
00035
00036
00037
00038
00039
00040 typedef unsigned long XaintType;
00041 typedef unsigned char XaintChar;
00042 typedef unsigned long XaintBool;
00043 typedef unsigned long XaintNum;
00044 typedef unsigned long XaintErr;
00045 typedef void * XaintUnknown;
00047 enum XaintError_enum
00048 {
00049 XAINT_ERR_NIL = 0,
00050 XAINT_ERR_OOM = 1,
00051 XAINT_ERR_TOK = 2,
00052 XAINT_ERR_FIL = 3,
00053 };
00056 enum XaintType_enum
00057 {
00058 XAINT_TYPE_LIST = '(',
00059 XAINT_TYPE_SLIST = '(',
00060 XAINT_TYPE_ELIST = ')',
00061 XAINT_TYPE_SNAME = '[',
00062 XAINT_TYPE_NAME = ']',
00063 XAINT_TYPE_ENAME = ']',
00064 XAINT_TYPE_STRING = '\"',
00065 XAINT_TYPE_COMMENT = '*',
00066 XAINT_TYPE_PRAGMA = '?',
00067 XAINT_TYPE_WS = ' ',
00068 XAINT_TYPE_TREE = 'T',
00069 };
00072 enum XaintBool_enum
00073 {
00074 XAINT_FALSE = 0,
00075 XAINT_TRUE = 1,
00076 };
00078 XAINT_API void *Xaint_malloc(XaintNum size);
00084 XAINT_API void *Xaint_realloc(void *ptr, XaintNum size);
00091 XAINT_API void Xaint_free(void *ptr);
00096 typedef unsigned char UTF8Char;
00100 typedef unsigned long UCS4Char;
00104 XAINT_API UCS4Char *CreateUCS4String(UTF8Char *string);
00110 XAINT_API UTF8Char *CreateUTF8String(UCS4Char *string);
00116 XAINT_API void FreeUTF8String(UTF8Char *string);
00121 XAINT_API void FreeUCS4String(UCS4Char *string);
00126
00127
00128
00129 typedef struct XaintParser_type XaintParser;
00130 typedef void (*XaintParserEventFunc)(XaintParser *xaintpr, XaintChar *data, XaintType type);
00131 typedef void (*XaintParserDataRequestFunc)(XaintParser *xaintpr);
00132 XAINT_API XaintParser *XaintParser_new(void);
00196 XAINT_API void XaintParser_delete(XaintParser *xaintpr);
00198 XAINT_API void XaintParser_setEvent(XaintParser *xaintpr, XaintParserEventFunc event);
00200 XAINT_API XaintParserEventFunc XaintParser_getEvent(XaintParser *xaintpr);
00202 XAINT_API void XaintParser_setDataRequest(XaintParser *xaintpr, XaintParserDataRequestFunc dataRequest);
00204 XAINT_API XaintParserDataRequestFunc XaintParser_getDataRequest(XaintParser *xaintpr);
00206 XAINT_API void XaintParser_setUserData(XaintParser *xaintpr, XaintUnknown userData);
00208 XAINT_API XaintUnknown XaintParser_getUserData(XaintParser *xaintpr);
00210 XAINT_API XaintErr XaintParser_getLastError(XaintParser *xaintpr);
00212 XAINT_API XaintNum XaintParser_getRowNum(XaintParser *xaintpr);
00214 XAINT_API XaintNum XaintParser_getColNum(XaintParser *xaintpr);
00216 XAINT_API void XaintParser_feedData(XaintParser *xaintpr, XaintChar *data, XaintNum size);
00218 XAINT_API XaintBool XaintParser_parse(XaintParser *xaintpr);
00220 XAINT_API XaintBool XaintParser_parseString(XaintParser *xaintpr, XaintChar *string);
00225
00226 XAINT_API void XaintParser_INTERNAL_oom(XaintParser *xaintpr, int v);
00227 XAINT_API void XaintParser_INTERNAL_set_lastError(XaintParser *xaintpr, XaintNum lastError);
00228
00229
00230
00231 typedef void (*XaintParserOnDelete)(XaintParser *xaintpr);
00232 XAINT_API XaintParserOnDelete XaintParser_getOnDelete(XaintParser *xaintpr);
00233 XAINT_API void XaintParser_setOnDelete(XaintParser *xaintpr, XaintParserOnDelete OnDelete);
00234 XAINT_API void XaintParser_setClassInstance(XaintParser *xaintpr, XaintUnknown ClassInstance);
00235 XAINT_API XaintUnknown XaintParser_getClassInstance(XaintParser *xaintpr);
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 typedef struct XaintStream_type XaintStream;
00249 typedef void (*XaintStreamPairEvent)(XaintStream *xaintst, XaintChar *key, XaintChar *value, XaintChar *ws, XaintType type);
00250 typedef void (*XaintStreamWhitespaceEvent)(XaintStream *xaintst, XaintChar *data);
00251 typedef void (*XaintStreamPragmaEvent)(XaintStream *xaintst, XaintChar *data);
00252 typedef void (*XaintStreamCommentEvent)(XaintStream *xaintst, XaintChar *data);
00253 typedef void (*XaintStreamDataRequest)(XaintStream *xaintst);
00254 XaintStream *XaintStream_new(void);
00326 XAINT_API void XaintStream_delete(XaintStream *xaintst);
00328 XAINT_API void XaintStream_setStoreRecordNames(XaintStream *xaintst, XaintBool storeRecordNames);
00330 XAINT_API XaintBool XaintStream_getStoreRecordNames(XaintStream *xaintst);
00332 XAINT_API XaintChar *XaintStream_getRecordName(XaintStream *xaintst);
00335 XAINT_API void XaintStream_setPairEvent(XaintStream *xaintst, XaintStreamPairEvent event);
00337 XAINT_API XaintStreamPairEvent XaintStream_getPairEvent(XaintStream *xaintst);
00339 XAINT_API void XaintStream_setWhitespaceEvent(XaintStream *xaintst, XaintStreamWhitespaceEvent event);
00341 XAINT_API XaintStreamWhitespaceEvent XaintStream_getWhitespaceEvent(XaintStream *xaintst);
00343 XAINT_API void XaintStream_setPragmaEvent(XaintStream *xaintst, XaintStreamPragmaEvent event);
00345 XAINT_API XaintStreamPragmaEvent XaintStream_getPragmaEvent(XaintStream *xaintst);
00347 XAINT_API void XaintStream_setCommentEvent(XaintStream *xaintst, XaintStreamCommentEvent event);
00349 XAINT_API XaintStreamCommentEvent XaintStream_getCommentEvent(XaintStream *xaintst);
00351 XAINT_API void XaintStream_setDataRequest(XaintStream *xaintst, XaintStreamDataRequest dataRequest);
00353 XAINT_API XaintStreamDataRequest XaintStream_getDataRequest(XaintStream *xaintst);
00355 XAINT_API void XaintStream_setUserData(XaintStream *xaintst, XaintUnknown userData);
00357 XAINT_API XaintUnknown XaintStream_getUserData(XaintStream *xaintst);
00359 XAINT_API XaintErr XaintStream_getLastError(XaintStream *xaintst);
00361 XAINT_API XaintNum XaintStream_getRowNum(XaintStream *xaintst);
00363 XAINT_API XaintNum XaintStream_getColNum(XaintStream *xaintst);
00365 XAINT_API void XaintStream_feedData(XaintStream *xaintst, XaintChar *data, XaintNum size);
00367 XAINT_API XaintBool XaintStream_parse(XaintStream *xaintst);
00369 XAINT_API XaintBool XaintStream_parseString(XaintStream *xaintst, XaintChar *string);
00374 XAINT_API XaintParser *XaintStream_INTERNAL_get_xaintpr(XaintStream *xaintst);
00375
00376
00377 typedef void (*XaintStreamOnDelete)(XaintStream *xaint);
00378 XAINT_API XaintStreamOnDelete XaintStream_getOnDelete(XaintStream *xaintst);
00379 XAINT_API void XaintStream_setOnDelete(XaintStream *xaintst, XaintStreamOnDelete onDelete);
00380 XAINT_API void XaintStream_setClassInstance(XaintStream *xaintst, XaintUnknown ClassInstance);
00381 XAINT_API XaintUnknown XaintStream_getClassInstance(XaintStream *xaintst);
00382
00383
00384
00385 typedef struct XaintTree_type XaintTree;
00386 typedef struct XaintElement_type XaintElement;
00387 typedef XaintBool (*XaintTreeDataEvent)(XaintTree *xainttr, XaintUnknown data, XaintNum size, XaintBool finished);
00389 typedef void (*XaintTreeDataRequest)(XaintTree *xainttr);
00391 XAINT_API XaintTree *XaintTree_new(void);
00393 XAINT_API void XaintTree_delete(XaintTree *xainttr);
00395 XAINT_API void XaintTree_setUseBOM(XaintTree *xainttr, XaintBool useBOM);
00397 XAINT_API XaintBool XaintTree_getUseBOM(XaintTree *xainttr);
00399 XAINT_API void XaintTree_setPath(XaintTree *xainttr, XaintChar *path);
00401 XAINT_API XaintChar *XaintTree_getPath(XaintTree *xainttr);
00403 XAINT_API void XaintTree_setUserData(XaintTree *cametr, XaintUnknown userData);
00405 XAINT_API XaintUnknown XaintTree_getUserData(XaintTree *xainttr);
00407 XAINT_API XaintErr XaintTree_getLastError(XaintTree *xainttr);
00409 XAINT_API XaintNum XaintTree_getRowNum(XaintTree *xainttr);
00411 XAINT_API XaintNum XaintTree_getColNum(XaintTree *xainttr);
00413 XAINT_API XaintElement *XaintTree_getRoot(XaintTree *xainttr);
00415 XAINT_API XaintBool XaintTree_load(XaintTree *xainttr, XaintChar *path);
00417 XAINT_API XaintBool XaintTree_parse(XaintTree *xainttr);
00419 XAINT_API XaintBool XaintTree_parseString(XaintTree *xainttr, XaintChar *string);
00421 XAINT_API XaintBool XaintTree_save(XaintTree *xainttr);
00423 XAINT_API XaintChar *XaintTree_saveToMemory(XaintTree *xainttr);
00425 XAINT_API XaintBool XaintTree_saveToEvent(XaintTree *xainttr, XaintTreeDataEvent event);
00427 XAINT_API void XaintTree_setDataRequest(XaintTree *xainttr, XaintTreeDataRequest dataRequest);
00429 XAINT_API void XaintTree_feedData(XaintTree *xainttr, XaintUnknown data, XaintNum size);
00431 XAINT_API XaintBool XaintTree_setAutoWS(XaintTree *xainttr, XaintBool autoWS, XaintChar *lineBreak, XaintChar character, XaintNum count);
00437 XAINT_API void XaintTree_deleteAllElements(XaintTree *xainttr);
00439 XAINT_API XaintStream *XaintTree_getXaintStreamInstance(XaintTree *xainttr);
00440
00441
00442
00443
00444
00445
00446 XAINT_API XaintElement *XaintElement_new(void);
00448 XAINT_API void XaintElement_delete(XaintElement *element);
00450 XAINT_API XaintType XaintElement_getType(XaintElement *element);
00452 XAINT_API void XaintElement_setType(XaintElement *element, XaintType type);
00454 XAINT_API XaintChar *XaintElement_getValue(XaintElement *element);
00456 XAINT_API void XaintElement_setValue(XaintElement *element, XaintChar *value);
00458 XAINT_API XaintChar *XaintElement_getName(XaintElement *element);
00460 XAINT_API void XaintElement_setName(XaintElement *element, XaintChar *name);
00462 XAINT_API XaintChar *XaintElement_getWS(XaintElement *element);
00464 XAINT_API void XaintElement_setWS(XaintElement *element, XaintChar *ws);
00466 XAINT_API XaintTree *XaintElement_getTree(XaintElement *element);
00468 XAINT_API XaintElement *XaintElement_getParent(XaintElement *element);
00470 XAINT_API XaintElement *XaintElement_getNext(XaintElement *element);
00472 XAINT_API XaintElement *XaintElement_getPrev(XaintElement *element);
00474 XAINT_API XaintElement *XaintElement_getChild(XaintElement *element);
00476 XAINT_API XaintNum XaintElement_getNumberOfElements(XaintElement *element);
00478 XAINT_API XaintElement *XaintElement_getNextByType(XaintElement *element, XaintType type);
00480 XAINT_API XaintElement *XaintElement_getPrevByType(XaintElement *element, XaintType type);
00482 XAINT_API XaintElement *XaintElement_getChildByType(XaintElement *element, XaintType type);
00484 XAINT_API XaintNum XaintElement_getNumberOfElementsByType(XaintElement *element, XaintType type);
00486 XAINT_API void XaintElement_setProperty(XaintElement *element, XaintChar *name, XaintChar *value);
00488 XAINT_API XaintChar *XaintElement_getProperty(XaintElement *element, XaintChar *name);
00490 XAINT_API XaintBool XaintElement_push(XaintElement *parentElement, XaintElement *newElement);
00492 XAINT_API XaintBool XaintElement_pushBefore(XaintElement *refElement, XaintElement *newElement);
00494 XAINT_API XaintBool XaintElement_pushAfter(XaintElement *refElement, XaintElement *newElement);
00496 XAINT_API XaintBool XaintElement_pop(XaintElement *element);
00498 XAINT_API XaintBool XaintElement_isNomad(XaintElement *element);
00500 XAINT_API XaintBool XaintElement_isAnonymous(XaintElement *element);
00502 XAINT_API XaintBool XaintElement_isEmpty(XaintElement *element);
00504 XAINT_API XaintBool XaintElement_hasProperties(XaintElement *element);
00506 XAINT_API XaintNum XaintElement_numberOfProperties(XaintElement *element);
00508 XaintBool XaintElement_saveToEvent(XaintElement *element, XaintTreeDataEvent event);
00510 XaintChar *XaintElement_saveToMemory(XaintElement *element);
00512 XaintBool XaintElement_save(XaintElement *element);
00514 XaintElement *XaintElement_copy(XaintElement *element);
00516 XaintTree *XaintElement_formTree(XaintElement *element);
00519
00520
00521 typedef void (*XaintTreeOnDelete)(XaintTree *xaint);
00522 XAINT_API XaintTreeOnDelete XaintTree_getOnDelete(XaintTree *xainttr);
00523 XAINT_API void XaintTree_setOnDelete(XaintTree *xainttr, XaintTreeOnDelete onDelete);
00524 XAINT_API void XaintTree_setClassInstance(XaintTree *xainttr, XaintUnknown ClassInstance);
00525 XAINT_API XaintUnknown XaintTree_getClassInstance(XaintTree *xainttr);
00526
00527 typedef void (*XaintElementOnDelete)(XaintElement *element);
00528 XAINT_API XaintElementOnDelete XaintElement_getOnDelete(XaintElement *element);
00529 XAINT_API void XaintElement_setOnDelete(XaintElement *element, XaintElementOnDelete OnDelete);
00530 XAINT_API void XaintElement_setClassInstance(XaintElement *element, XaintUnknown ClassInstance);
00531 XAINT_API XaintUnknown XaintElement_getClassInstance(XaintElement *element);
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545 #define XAINT_MAJOR_VERSION 1
00546 #define XAINT_MINOR_VERSION 0
00547 #define XAINT_MICRO_VERSION 5
00548
00549
00550
00551
00552 #ifdef __cplusplus
00553 }
00554 #endif
00555 #endif
00556
00557