00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GWENHYWFAR_XML_H
00026 #define GWENHYWFAR_XML_H
00027
00028 #include <gwenhywfar/gwenhywfarapi.h>
00029 #include <gwenhywfar/stringlist.h>
00030 #include <gwenhywfar/types.h>
00031 #include <gwenhywfar/list2.h>
00032 #include <gwenhywfar/syncio.h>
00033
00034 #include <stdio.h>
00035
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00046
00051
00052
00056
00060 #define GWEN_XML_FLAGS_HANDLE_COMMENTS 0x0001
00061
00066 #define GWEN_XML_FLAGS_INDENT 0x0002
00067
00073 #define GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS 0x0004
00074
00079 #define GWEN_XML_FLAGS_NO_CONDENSE 0x0008
00080
00085 #define GWEN_XML_FLAGS_KEEP_CNTRL 0x0010
00086
00087 #define GWEN_XML_FLAGS_KEEP_BLANKS 0x0020
00088
00089 #define GWEN_XML_FLAGS_SIMPLE 0x0040
00090
00094 #define GWEN_XML_FLAGS_HANDLE_HEADERS 0x0080
00095
00103 #define GWEN_XML_FLAGS_TOLERANT_ENDTAGS 0x0100
00104
00105 #define GWEN_XML_FLAGS_HANDLE_NAMESPACES 0x0200
00106
00110 #define GWEN_XML_FLAGS_DEFAULT \
00111 (\
00112 GWEN_XML_FLAGS_INDENT | \
00113 GWEN_XML_FLAGS_HANDLE_COMMENTS\
00114 )
00115
00121 typedef enum {
00124 GWEN_XMLNodeTypeTag=0,
00126 GWEN_XMLNodeTypeData,
00128 GWEN_XMLNodeTypeComment
00129 } GWEN_XMLNODE_TYPE;
00130
00134 typedef struct GWEN__XMLNODE GWEN_XMLNODE;
00135 typedef struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE;
00136
00137 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API)
00138 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API)
00139
00140 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE_NAMESPACE, GWEN_XMLNode_NameSpace, GWENHYWFAR_API)
00141
00142 #ifdef __cplusplus
00143 }
00144 #endif
00145
00146
00147 #include <gwenhywfar/xmlctx.h>
00148 #include <gwenhywfar/fastbuffer.h>
00149
00150
00151 #ifdef __cplusplus
00152 extern "C" {
00153 #endif
00154
00155
00156
00161 GWENHYWFAR_API
00162 GWEN_XMLNODE *GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data);
00163
00167 GWENHYWFAR_API
00168 void GWEN_XMLNode_free(GWEN_XMLNODE *n);
00169
00175 GWENHYWFAR_API
00176 void GWEN_XMLNode_freeAll(GWEN_XMLNODE *n);
00177
00181 GWENHYWFAR_API
00182 GWEN_XMLNODE *GWEN_XMLNode_dup(const GWEN_XMLNODE *n);
00183
00207
00212 GWENHYWFAR_API
00213 GWEN_XMLNODE *GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n);
00214
00218 GWENHYWFAR_API
00219 void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00220
00225 GWENHYWFAR_API
00226 void GWEN_XMLNode_DelHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00227
00232 GWENHYWFAR_API
00233 void GWEN_XMLNode_ClearHeaders(GWEN_XMLNODE *root);
00234
00258 GWENHYWFAR_API
00259 const char *GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n,
00260 const char *name,
00261 const char *defaultValue);
00262
00270 GWENHYWFAR_API
00271 void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n,
00272 const char *name,
00273 const char *value);
00274
00284 GWENHYWFAR_API
00285 void GWEN_XMLNode_CopyProperties(GWEN_XMLNODE *tn,
00286 const GWEN_XMLNODE *sn,
00287 int overwrite);
00295 GWENHYWFAR_API
00296 GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n);
00297
00299 GWENHYWFAR_API
00300 const char *GWEN_XMLNode_GetData(const GWEN_XMLNODE *n);
00301
00304 GWENHYWFAR_API
00305 void GWEN_XMLNode_SetData(GWEN_XMLNODE *n, const char *data);
00306
00307 GWENHYWFAR_API
00308 const char *GWEN_XMLNode_GetNamespace(const GWEN_XMLNODE *n);
00309
00310 GWENHYWFAR_API
00311 void GWEN_XMLNode_SetNamespace(GWEN_XMLNODE *n, const char *s);
00312
00330 GWENHYWFAR_API
00331 void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n);
00332
00333 GWENHYWFAR_API
00334 void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n);
00335
00336 GWENHYWFAR_API
00337 uint32_t GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n);
00354 GWENHYWFAR_API
00355 GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n);
00356
00364 GWENHYWFAR_API
00365 GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n);
00366
00369 GWENHYWFAR_API
00370 GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n);
00371
00380 GWENHYWFAR_API
00381 GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n);
00382
00394 GWENHYWFAR_API
00395 GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n);
00396
00404 GWENHYWFAR_API
00405 GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n);
00406
00418 GWENHYWFAR_API
00419 GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n);
00420
00446 GWENHYWFAR_API
00447 GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n,
00448 const char *tname,
00449 const char *pname,
00450 const char *pvalue);
00451
00457 GWENHYWFAR_API
00458 GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n,
00459 const char *tname,
00460 const char *pname,
00461 const char *pvalue);
00462
00467 GWENHYWFAR_API
00468 int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent,
00469 const GWEN_XMLNODE *child);
00470
00471 GWENHYWFAR_API
00472 int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1,
00473 const GWEN_XMLNODE *n2,
00474 GWEN_BUFFER *nbuf);
00475
00488 GWENHYWFAR_API
00489 GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n,
00490 const char *path,
00491 uint32_t flags);
00492
00493
00501
00510 GWENHYWFAR_API
00511 void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00512
00520 GWENHYWFAR_API
00521 void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00522
00526 GWENHYWFAR_API
00527 void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n);
00528
00539 GWENHYWFAR_API
00540 void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn,
00541 int copythem);
00542
00548 GWENHYWFAR_API
00549 GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *n,
00550 GWEN_XMLNODE_TYPE t,
00551 const char *data);
00559
00564 GWENHYWFAR_API
00565 int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n);
00566
00567
00568
00569 GWENHYWFAR_API
00570 int GWEN_XMLNode_StripNamespaces(GWEN_XMLNODE *n);
00571
00572
00573 GWENHYWFAR_API
00574 int GWEN_XMLNode_Globalize(GWEN_XMLNODE *n);
00575
00576
00577 GWENHYWFAR_API
00578 int GWEN_XMLNode_GlobalizeWithList(GWEN_XMLNODE *n,
00579 GWEN_XMLNODE_NAMESPACE_LIST *l,
00580 uint32_t *pLastId);
00581
00582
00583 GWENHYWFAR_API
00584 int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb);
00585
00589 GWENHYWFAR_API
00590 int GWEN_XMLContext_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *io);
00591
00592 GWENHYWFAR_API
00593 int GWEN_XMLContext_ReadFromFile(GWEN_XML_CONTEXT *ctx, const char *fname);
00594
00595 GWENHYWFAR_API
00596 int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text);
00597
00598
00603 GWENHYWFAR_API
00604 int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags);
00605
00606 GWENHYWFAR_API
00607 GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s,
00608 int len,
00609 uint32_t flags);
00610
00614 GWENHYWFAR_API
00615 int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n,
00616 GWEN_XML_CONTEXT *ctx,
00617 GWEN_SYNCIO *sio);
00618
00622 GWENHYWFAR_API
00623 int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n,
00624 const char *fname,
00625 uint32_t flags);
00626
00627 GWENHYWFAR_API
00628 int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags);
00629
00630
00631
00632
00633 GWENHYWFAR_API
00634 GWEN_XMLNODE_NAMESPACE_LIST *GWEN_XMLNode_GetNameSpaces(const GWEN_XMLNODE *n);
00635
00636 GWENHYWFAR_API
00637 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByName(const GWEN_XMLNODE *n,
00638 const char *s);
00639
00640 GWENHYWFAR_API
00641 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByUrl(const GWEN_XMLNODE *n,
00642 const char *s);
00643
00644 GWENHYWFAR_API
00645 void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns);
00646
00647
00648
00673
00679 GWENHYWFAR_API
00680 const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n,
00681 const char *name,
00682 const char *defValue);
00683
00684 GWENHYWFAR_API
00685 void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n,
00686 const char *name,
00687 const char *value);
00688
00701 GWENHYWFAR_API
00702 const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n,
00703 const char *name,
00704 const char *defValue);
00705
00713 GWENHYWFAR_API
00714 int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n,
00715 const char *name,
00716 int defValue);
00717
00718 GWENHYWFAR_API
00719 void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n,
00720 const char *name,
00721 int value);
00722
00730
00734 GWENHYWFAR_API
00735 void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, int ind);
00738
00739
00740
00748
00749 typedef struct GWEN_XMLNODE_PATH GWEN_XMLNODE_PATH;
00750
00751
00752 GWENHYWFAR_API
00753 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new(void);
00754 GWENHYWFAR_API
00755 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np);
00756 GWENHYWFAR_API
00757 void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np);
00758
00762 GWENHYWFAR_API
00763 int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np,
00764 GWEN_XMLNODE *n);
00765
00770 GWENHYWFAR_API
00771 GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np);
00772
00776 GWENHYWFAR_API
00777 void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np);
00780
00781
00782
00783 GWENHYWFAR_API
00784 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_new(const char *name,
00785 const char *url);
00786
00787 GWENHYWFAR_API
00788 void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns);
00789
00790 GWENHYWFAR_API
00791 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_dup(const GWEN_XMLNODE_NAMESPACE *ns);
00792
00793 GWENHYWFAR_API
00794 const char *GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns);
00795
00796 GWENHYWFAR_API
00797 const char *GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns);
00798
00799
00800 #ifdef __cplusplus
00801 }
00802 #endif
00803
00804
00805
00806 #endif