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 <stdio.h>
00037
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00047
00052
00053
00057
00061 #define GWEN_XML_FLAGS_READ_COMMENTS 0x0001
00062
00066 #define GWEN_XML_FLAGS_SHARE_TOPLEVEL 0x0002
00067
00072 #define GWEN_XML_FLAGS_INCLUDE_TO_TOPLEVEL 0x0004
00073
00079 #define GWEN_XML_FLAGS_IGNORE_INCLUDE 0x0008
00080
00084 #define GWEN_XML_FLAGS_WRITE_COMMENTS 0x0010
00085
00090 #define GWEN_XML_FLAGS_INDENT 0x0020
00091
00097 #define GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS 0x0040
00098
00103 #define GWEN_XML_FLAGS_NO_CONDENSE 0x0080
00104
00109 #define GWEN_XML_FLAGS_KEEP_CNTRL 0x0100
00110
00114 #define GWEN_XML_FLAGS_IGNORE_DESCR 0x0200
00115
00116 #define GWEN_XML_FLAGS_KEEP_BLANKS 0x0400
00117
00118 #define GWEN_XML_FLAGS_SIMPLE 0x0800
00119
00123 #define GWEN_XML_FLAGS_HANDLE_HEADERS 0x1000
00124
00128 #define GWEN_XML_FLAGS_DEFAULT \
00129 (\
00130 GWEN_XML_FLAGS_INDENT | \
00131 GWEN_XML_FLAGS_WRITE_COMMENTS\
00132 )
00133
00139 typedef enum {
00142 GWEN_XMLNodeTypeTag=0,
00144 GWEN_XMLNodeTypeData,
00146 GWEN_XMLNodeTypeComment
00147 } GWEN_XMLNODE_TYPE;
00148
00152 typedef struct GWEN__XMLNODE GWEN_XMLNODE;
00153
00154 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API)
00155 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API)
00156
00157
00158 typedef int
00159 (*GWEN_XML_INCLUDE_FN)(GWEN_XMLNODE *n,
00160 const char *path,
00161 const char *file,
00162 GWEN_STRINGLIST *sl,
00163 GWEN_TYPE_UINT32 flags);
00164
00165
00166
00171 GWENHYWFAR_API
00172 GWEN_XMLNODE *GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data);
00173
00177 GWENHYWFAR_API
00178 void GWEN_XMLNode_free(GWEN_XMLNODE *n);
00179
00185 GWENHYWFAR_API
00186 void GWEN_XMLNode_freeAll(GWEN_XMLNODE *n);
00187
00191 GWENHYWFAR_API
00192 GWEN_XMLNODE *GWEN_XMLNode_dup(const GWEN_XMLNODE *n);
00193
00194 GWENHYWFAR_API
00195 GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s,
00196 int len,
00197 GWEN_TYPE_UINT32 flags);
00198
00222
00227 GWENHYWFAR_API
00228 GWEN_XMLNODE *GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n);
00229
00233 GWENHYWFAR_API
00234 void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00235
00240 GWENHYWFAR_API
00241 void GWEN_XMLNode_DelHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00242
00247 GWENHYWFAR_API
00248 void GWEN_XMLNode_ClearHeaders(GWEN_XMLNODE *root);
00249
00273 GWENHYWFAR_API
00274 const char *GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n,
00275 const char *name,
00276 const char *defaultValue);
00277
00285 GWENHYWFAR_API
00286 void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n,
00287 const char *name,
00288 const char *value);
00289
00299 GWENHYWFAR_API
00300 void GWEN_XMLNode_CopyProperties(GWEN_XMLNODE *tn,
00301 const GWEN_XMLNODE *sn,
00302 int overwrite);
00310 GWENHYWFAR_API
00311 GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n);
00312
00314 GWENHYWFAR_API
00315 const char *GWEN_XMLNode_GetData(const GWEN_XMLNODE *n);
00316
00319 GWENHYWFAR_API
00320 void GWEN_XMLNode_SetData(GWEN_XMLNODE *n, const char *data);
00338 GWENHYWFAR_API
00339 void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n);
00340
00341 GWENHYWFAR_API
00342 void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n);
00343
00344 GWENHYWFAR_API
00345 GWEN_TYPE_UINT32 GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n);
00362 GWENHYWFAR_API
00363 GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n);
00364
00372 GWENHYWFAR_API
00373 GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n);
00374
00377 GWENHYWFAR_API
00378 GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n);
00379
00388 GWENHYWFAR_API
00389 GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n);
00390
00402 GWENHYWFAR_API
00403 GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n);
00404
00412 GWENHYWFAR_API
00413 GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n);
00414
00426 GWENHYWFAR_API
00427 GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n);
00428
00454 GWENHYWFAR_API
00455 GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n,
00456 const char *tname,
00457 const char *pname,
00458 const char *pvalue);
00459
00465 GWENHYWFAR_API
00466 GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n,
00467 const char *tname,
00468 const char *pname,
00469 const char *pvalue);
00470
00475 GWENHYWFAR_API
00476 int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent,
00477 const GWEN_XMLNODE *child);
00478
00479 GWENHYWFAR_API
00480 int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1,
00481 const GWEN_XMLNODE *n2,
00482 GWEN_BUFFER *nbuf);
00483
00496 GWENHYWFAR_API
00497 GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n,
00498 const char *path,
00499 GWEN_TYPE_UINT32 flags);
00500
00501
00509
00518 GWENHYWFAR_API
00519 void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00520
00528 GWENHYWFAR_API
00529 void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00530
00534 GWENHYWFAR_API
00535 void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n);
00536
00547 GWENHYWFAR_API
00548 void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn,
00549 int copythem);
00550
00556 GWENHYWFAR_API
00557 GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *n,
00558 GWEN_XMLNODE_TYPE t,
00559 const char *data);
00571 GWENHYWFAR_API
00572 int GWEN_XML_Parse(GWEN_XMLNODE *n, GWEN_BUFFEREDIO *bio,
00573 GWEN_TYPE_UINT32 flags);
00574
00575
00580 GWENHYWFAR_API
00581 int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n);
00582
00583
00588 GWENHYWFAR_API
00589 int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath,
00590 GWEN_TYPE_UINT32 flags);
00591
00603 GWENHYWFAR_API
00604 int GWEN_XML_ReadFileSearch(GWEN_XMLNODE *n, const char *filepath,
00605 GWEN_TYPE_UINT32 flags,
00606 GWEN_STRINGLIST *searchPath);
00607
00608
00612 GWENHYWFAR_API
00613 int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n,
00614 GWEN_BUFFEREDIO *bio,
00615 GWEN_TYPE_UINT32 flags);
00616
00620 GWENHYWFAR_API
00621 int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n,
00622 const char *fname,
00623 GWEN_TYPE_UINT32 flags);
00624
00649
00655 GWENHYWFAR_API
00656 const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n,
00657 const char *name,
00658 const char *defValue);
00659
00660 GWENHYWFAR_API
00661 void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n,
00662 const char *name,
00663 const char *value);
00664
00677 GWENHYWFAR_API
00678 const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n,
00679 const char *name,
00680 const char *defValue);
00681
00689 GWENHYWFAR_API
00690 int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n,
00691 const char *name,
00692 int defValue);
00693
00694 GWENHYWFAR_API
00695 void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n,
00696 const char *name,
00697 int value);
00698
00706
00710 GWENHYWFAR_API
00711 void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, FILE *f, int ind);
00714
00715
00716
00724
00725 typedef struct GWEN_XMLNODE_PATH GWEN_XMLNODE_PATH;
00726
00727
00728 GWENHYWFAR_API
00729 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new();
00730 GWENHYWFAR_API
00731 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np);
00732 GWENHYWFAR_API
00733 void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np);
00734
00738 GWENHYWFAR_API
00739 int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np,
00740 GWEN_XMLNODE *n);
00741
00746 GWENHYWFAR_API
00747 GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np);
00748
00752 GWENHYWFAR_API
00753 void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np);
00756
00757
00758 #ifdef __cplusplus
00759 }
00760 #endif
00761
00762
00763
00764 #endif