Main Page | Modules | File List | Globals

xaint.h

Go to the documentation of this file.
00001 /* Copyright (c) 2004 Joshua Baker
00002    See the file COPYING for copying permission.
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                   Xaint Section
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',  /* Used with the XaintTree Class. */
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                 XaintParser Section
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 /* Xaint Internal Handlings. */
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 /* Expose some functions for handling a CPP wrapper. 
00230    Not technically a part of the API. */
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                  XaintStream Section
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 /* Expose some functions for handling the CPP wrapper. 
00376    Not technically a part of the API. */
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                  XaintTree Section
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                  XaintElement Section
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 /* Expose some functions for handling the CPP wrapper. 
00520    Not technically a part of the API. */
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   GNU/Linux version convention.
00540   Odd number minor version for development.
00541   Even number minor version for stable releases.
00542   Micro is incremented for each release. And, set back to 0 for
00543   any change to the major or minor versions.
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 

Generated on Sun Apr 25 11:36:04 2004 for Xaint by doxygen 1.3.6