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
00026
00027
00028 #ifndef GWENHYWFAR_XML_H
00029 #define GWENHYWFAR_XML_H
00030
00031 #include <gwenhywfar/gwenhywfarapi.h>
00032 #include <gwenhywfar/bufferedio.h>
00033 #include <gwenhywfar/stringlist.h>
00034 #include <gwenhywfar/types.h>
00035 #include <gwenhywfar/list2.h>
00036 #include <gwenhywfar/iolayer.h>
00037
00038 #include <stdio.h>
00039
00040
00041 #ifdef __cplusplus
00042 extern "C" {
00043 #endif
00044
00050
00055
00056
00060
00064 #define GWEN_XML_FLAGS_HANDLE_COMMENTS 0x0001
00065
00070 #define GWEN_XML_FLAGS_INDENT 0x0002
00071
00077 #define GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS 0x0004
00078
00083 #define GWEN_XML_FLAGS_NO_CONDENSE 0x0008
00084
00089 #define GWEN_XML_FLAGS_KEEP_CNTRL 0x0010
00090
00091 #define GWEN_XML_FLAGS_KEEP_BLANKS 0x0020
00092
00093 #define GWEN_XML_FLAGS_SIMPLE 0x0040
00094
00098 #define GWEN_XML_FLAGS_HANDLE_HEADERS 0x0080
00099
00107 #define GWEN_XML_FLAGS_TOLERANT_ENDTAGS 0x0100
00108
00109 #define GWEN_XML_FLAGS_HANDLE_NAMESPACES 0x0200
00110
00114 #define GWEN_XML_FLAGS_DEFAULT \
00115 (\
00116 GWEN_XML_FLAGS_INDENT | \
00117 GWEN_XML_FLAGS_HANDLE_COMMENTS\
00118 )
00119
00125 typedef enum {
00128 GWEN_XMLNodeTypeTag=0,
00130 GWEN_XMLNodeTypeData,
00132 GWEN_XMLNodeTypeComment
00133 } GWEN_XMLNODE_TYPE;
00134
00138 typedef struct GWEN__XMLNODE GWEN_XMLNODE;
00139 typedef struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE;
00140
00141 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API)
00142 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API)
00143
00144 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE_NAMESPACE, GWEN_XMLNode_NameSpace, GWENHYWFAR_API)
00145
00146 #ifdef __cplusplus
00147 }
00148 #endif
00149
00150
00151 #include <gwenhywfar/xmlctx.h>
00152 #include <gwenhywfar/fastbuffer.h>
00153
00154
00155 #ifdef __cplusplus
00156 extern "C" {
00157 #endif
00158
00159
00160
00165 GWENHYWFAR_API
00166 GWEN_XMLNODE *GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data);
00167
00171 GWENHYWFAR_API
00172 void GWEN_XMLNode_free(GWEN_XMLNODE *n);
00173
00179 GWENHYWFAR_API
00180 void GWEN_XMLNode_freeAll(GWEN_XMLNODE *n);
00181
00185 GWENHYWFAR_API
00186 GWEN_XMLNODE *GWEN_XMLNode_dup(const GWEN_XMLNODE *n);
00187
00211
00216 GWENHYWFAR_API
00217 GWEN_XMLNODE *GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n);
00218
00222 GWENHYWFAR_API
00223 void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00224
00229 GWENHYWFAR_API
00230 void GWEN_XMLNode_DelHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00231
00236 GWENHYWFAR_API
00237 void GWEN_XMLNode_ClearHeaders(GWEN_XMLNODE *root);
00238
00262 GWENHYWFAR_API
00263 const char *GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n,
00264 const char *name,
00265 const char *defaultValue);
00266
00274 GWENHYWFAR_API
00275 void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n,
00276 const char *name,
00277 const char *value);
00278
00288 GWENHYWFAR_API
00289 void GWEN_XMLNode_CopyProperties(GWEN_XMLNODE *tn,
00290 const GWEN_XMLNODE *sn,
00291 int overwrite);
00299 GWENHYWFAR_API
00300 GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n);
00301
00303 GWENHYWFAR_API
00304 const char *GWEN_XMLNode_GetData(const GWEN_XMLNODE *n);
00305
00308 GWENHYWFAR_API
00309 void GWEN_XMLNode_SetData(GWEN_XMLNODE *n, const char *data);
00310
00311 GWENHYWFAR_API
00312 const char *GWEN_XMLNode_GetNamespace(const GWEN_XMLNODE *n);
00313
00314 GWENHYWFAR_API
00315 void GWEN_XMLNode_SetNamespace(GWEN_XMLNODE *n, const char *s);
00316
00334 GWENHYWFAR_API
00335 void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n);
00336
00337 GWENHYWFAR_API
00338 void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n);
00339
00340 GWENHYWFAR_API
00341 uint32_t GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n);
00358 GWENHYWFAR_API
00359 GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n);
00360
00368 GWENHYWFAR_API
00369 GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n);
00370
00373 GWENHYWFAR_API
00374 GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n);
00375
00384 GWENHYWFAR_API
00385 GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n);
00386
00398 GWENHYWFAR_API
00399 GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n);
00400
00408 GWENHYWFAR_API
00409 GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n);
00410
00422 GWENHYWFAR_API
00423 GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n);
00424
00450 GWENHYWFAR_API
00451 GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n,
00452 const char *tname,
00453 const char *pname,
00454 const char *pvalue);
00455
00461 GWENHYWFAR_API
00462 GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n,
00463 const char *tname,
00464 const char *pname,
00465 const char *pvalue);
00466
00471 GWENHYWFAR_API
00472 int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent,
00473 const GWEN_XMLNODE *child);
00474
00475 GWENHYWFAR_API
00476 int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1,
00477 const GWEN_XMLNODE *n2,
00478 GWEN_BUFFER *nbuf);
00479
00492 GWENHYWFAR_API
00493 GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n,
00494 const char *path,
00495 uint32_t flags);
00496
00497
00505
00514 GWENHYWFAR_API
00515 void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00516
00524 GWENHYWFAR_API
00525 void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00526
00530 GWENHYWFAR_API
00531 void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n);
00532
00543 GWENHYWFAR_API
00544 void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn,
00545 int copythem);
00546
00552 GWENHYWFAR_API
00553 GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *n,
00554 GWEN_XMLNODE_TYPE t,
00555 const char *data);
00563
00568 GWENHYWFAR_API
00569 int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n);
00570
00571
00572
00573 GWENHYWFAR_API
00574 int GWEN_XMLNode_StripNamespaces(GWEN_XMLNODE *n);
00575
00576
00577 GWENHYWFAR_API
00578 int GWEN_XMLNode_Globalize(GWEN_XMLNODE *n);
00579
00580
00581 GWENHYWFAR_API
00582 int GWEN_XMLNode_GlobalizeWithList(GWEN_XMLNODE *n,
00583 GWEN_XMLNODE_NAMESPACE_LIST *l,
00584 uint32_t *pLastId);
00585
00586
00587 GWENHYWFAR_API
00588 int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb);
00589
00593 GWENHYWFAR_API
00594 int GWEN_XML_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_IO_LAYER *io);
00595
00596
00601 GWENHYWFAR_API
00602 int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags);
00603
00604 GWENHYWFAR_API
00605 GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s,
00606 int len,
00607 uint32_t flags);
00608
00613 GWENHYWFAR_API
00614 int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n,
00615 GWEN_XML_CONTEXT *ctx,
00616 GWEN_IO_LAYER *io);
00617
00621 GWENHYWFAR_API
00622 int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n,
00623 const char *fname,
00624 uint32_t flags);
00625
00626 GWENHYWFAR_API
00627 int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags);
00628
00629
00630
00631
00632 GWENHYWFAR_API
00633 GWEN_XMLNODE_NAMESPACE_LIST *GWEN_XMLNode_GetNameSpaces(const GWEN_XMLNODE *n);
00634
00635 GWENHYWFAR_API
00636 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByName(const GWEN_XMLNODE *n,
00637 const char *s);
00638
00639 GWENHYWFAR_API
00640 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByUrl(const GWEN_XMLNODE *n,
00641 const char *s);
00642
00643 GWENHYWFAR_API
00644 void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns);
00645
00646
00647
00672
00678 GWENHYWFAR_API
00679 const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n,
00680 const char *name,
00681 const char *defValue);
00682
00683 GWENHYWFAR_API
00684 void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n,
00685 const char *name,
00686 const char *value);
00687
00700 GWENHYWFAR_API
00701 const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n,
00702 const char *name,
00703 const char *defValue);
00704
00712 GWENHYWFAR_API
00713 int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n,
00714 const char *name,
00715 int defValue);
00716
00717 GWENHYWFAR_API
00718 void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n,
00719 const char *name,
00720 int value);
00721
00729
00733 GWENHYWFAR_API
00734 void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, FILE *f, int ind);
00737
00738
00739
00747
00748 typedef struct GWEN_XMLNODE_PATH GWEN_XMLNODE_PATH;
00749
00750
00751 GWENHYWFAR_API
00752 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new();
00753 GWENHYWFAR_API
00754 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np);
00755 GWENHYWFAR_API
00756 void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np);
00757
00761 GWENHYWFAR_API
00762 int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np,
00763 GWEN_XMLNODE *n);
00764
00769 GWENHYWFAR_API
00770 GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np);
00771
00775 GWENHYWFAR_API
00776 void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np);
00779
00780
00781
00782 GWENHYWFAR_API
00783 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_new(const char *name,
00784 const char *url);
00785
00786 GWENHYWFAR_API
00787 void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns);
00788
00789 GWENHYWFAR_API
00790 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_dup(const GWEN_XMLNODE_NAMESPACE *ns);
00791
00792 GWENHYWFAR_API
00793 const char *GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns);
00794
00795 GWENHYWFAR_API
00796 const char *GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns);
00797
00798
00799 #ifdef __cplusplus
00800 }
00801 #endif
00802
00803
00804
00805 #endif