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);
00327 GWENHYWFAR_API
00328 void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n);
00329
00330 GWENHYWFAR_API
00331 void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n);
00332
00333 GWENHYWFAR_API
00334 uint32_t GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n);
00351 GWENHYWFAR_API
00352 GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n);
00353
00361 GWENHYWFAR_API
00362 GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n);
00363
00366 GWENHYWFAR_API
00367 GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n);
00368
00377 GWENHYWFAR_API
00378 GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n);
00379
00391 GWENHYWFAR_API
00392 GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n);
00393
00401 GWENHYWFAR_API
00402 GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n);
00403
00415 GWENHYWFAR_API
00416 GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n);
00417
00443 GWENHYWFAR_API
00444 GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n,
00445 const char *tname,
00446 const char *pname,
00447 const char *pvalue);
00448
00454 GWENHYWFAR_API
00455 GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n,
00456 const char *tname,
00457 const char *pname,
00458 const char *pvalue);
00459
00464 GWENHYWFAR_API
00465 int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent,
00466 const GWEN_XMLNODE *child);
00467
00468 GWENHYWFAR_API
00469 int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1,
00470 const GWEN_XMLNODE *n2,
00471 GWEN_BUFFER *nbuf);
00472
00485 GWENHYWFAR_API
00486 GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n,
00487 const char *path,
00488 uint32_t flags);
00489
00490
00498
00507 GWENHYWFAR_API
00508 void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00509
00517 GWENHYWFAR_API
00518 void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00519
00523 GWENHYWFAR_API
00524 void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n);
00525
00536 GWENHYWFAR_API
00537 void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn,
00538 int copythem);
00539
00545 GWENHYWFAR_API
00546 GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *n,
00547 GWEN_XMLNODE_TYPE t,
00548 const char *data);
00556
00561 GWENHYWFAR_API
00562 int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n);
00563
00564
00565 GWENHYWFAR_API
00566 int GWEN_XMLNode_Globalize(GWEN_XMLNODE *n);
00567
00568
00569 GWENHYWFAR_API
00570 int GWEN_XMLNode_GlobalizeWithList(GWEN_XMLNODE *n,
00571 GWEN_XMLNODE_NAMESPACE_LIST *l,
00572 uint32_t *pLastId);
00573
00574
00575 GWENHYWFAR_API
00576 int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb);
00577
00581 GWENHYWFAR_API
00582 int GWEN_XML_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_IO_LAYER *io);
00583
00584
00589 GWENHYWFAR_API
00590 int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags);
00591
00592 GWENHYWFAR_API
00593 GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s,
00594 int len,
00595 uint32_t flags);
00596
00601 GWENHYWFAR_API
00602 int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n,
00603 GWEN_XML_CONTEXT *ctx,
00604 GWEN_IO_LAYER *io);
00605
00609 GWENHYWFAR_API
00610 int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n,
00611 const char *fname,
00612 uint32_t flags);
00613
00614 GWENHYWFAR_API
00615 int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags);
00616
00617
00618
00619
00620 GWENHYWFAR_API
00621 GWEN_XMLNODE_NAMESPACE_LIST *GWEN_XMLNode_GetNameSpaces(const GWEN_XMLNODE *n);
00622
00623 GWENHYWFAR_API
00624 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByName(const GWEN_XMLNODE *n,
00625 const char *s);
00626
00627 GWENHYWFAR_API
00628 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByUrl(const GWEN_XMLNODE *n,
00629 const char *s);
00630
00631 GWENHYWFAR_API
00632 void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns);
00633
00634
00635
00660
00666 GWENHYWFAR_API
00667 const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n,
00668 const char *name,
00669 const char *defValue);
00670
00671 GWENHYWFAR_API
00672 void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n,
00673 const char *name,
00674 const char *value);
00675
00688 GWENHYWFAR_API
00689 const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n,
00690 const char *name,
00691 const char *defValue);
00692
00700 GWENHYWFAR_API
00701 int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n,
00702 const char *name,
00703 int defValue);
00704
00705 GWENHYWFAR_API
00706 void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n,
00707 const char *name,
00708 int value);
00709
00717
00721 GWENHYWFAR_API
00722 void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, FILE *f, int ind);
00725
00726
00727
00735
00736 typedef struct GWEN_XMLNODE_PATH GWEN_XMLNODE_PATH;
00737
00738
00739 GWENHYWFAR_API
00740 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new();
00741 GWENHYWFAR_API
00742 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np);
00743 GWENHYWFAR_API
00744 void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np);
00745
00749 GWENHYWFAR_API
00750 int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np,
00751 GWEN_XMLNODE *n);
00752
00757 GWENHYWFAR_API
00758 GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np);
00759
00763 GWENHYWFAR_API
00764 void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np);
00767
00768
00769
00770 GWENHYWFAR_API
00771 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_new(const char *name,
00772 const char *url);
00773
00774 GWENHYWFAR_API
00775 void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns);
00776
00777 GWENHYWFAR_API
00778 GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_dup(const GWEN_XMLNODE_NAMESPACE *ns);
00779
00780 GWENHYWFAR_API
00781 const char *GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns);
00782
00783 GWENHYWFAR_API
00784 const char *GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns);
00785
00786
00787 #ifdef __cplusplus
00788 }
00789 #endif
00790
00791
00792
00793 #endif