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_LIST2_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API);
00155
00156
00157 typedef int
00158 (*GWEN_XML_INCLUDE_FN)(GWEN_XMLNODE *n,
00159 const char *path,
00160 const char *file,
00161 GWEN_STRINGLIST *sl,
00162 GWEN_TYPE_UINT32 flags);
00163
00164
00165
00170 GWENHYWFAR_API
00171 GWEN_XMLNODE *GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data);
00172
00176 GWENHYWFAR_API
00177 void GWEN_XMLNode_free(GWEN_XMLNODE *n);
00178
00184 GWENHYWFAR_API
00185 void GWEN_XMLNode_freeAll(GWEN_XMLNODE *n);
00186
00190 GWENHYWFAR_API
00191 GWEN_XMLNODE *GWEN_XMLNode_dup(const GWEN_XMLNODE *n);
00192
00193 GWENHYWFAR_API
00194 GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s,
00195 int len,
00196 GWEN_TYPE_UINT32 flags);
00197
00221
00226 GWENHYWFAR_API
00227 GWEN_XMLNODE *GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n);
00228
00232 GWENHYWFAR_API
00233 void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00234
00239 GWENHYWFAR_API
00240 void GWEN_XMLNode_DelHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh);
00241
00246 GWENHYWFAR_API
00247 void GWEN_XMLNode_ClearHeaders(GWEN_XMLNODE *root);
00248
00272 GWENHYWFAR_API
00273 const char *GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n,
00274 const char *name,
00275 const char *defaultValue);
00276
00284 GWENHYWFAR_API
00285 void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n,
00286 const char *name,
00287 const char *value);
00288
00298 GWENHYWFAR_API
00299 void GWEN_XMLNode_CopyProperties(GWEN_XMLNODE *tn,
00300 const GWEN_XMLNODE *sn,
00301 int overwrite);
00309 GWENHYWFAR_API
00310 GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n);
00311
00313 GWENHYWFAR_API
00314 const char *GWEN_XMLNode_GetData(const GWEN_XMLNODE *n);
00315
00318 GWENHYWFAR_API
00319 void GWEN_XMLNode_SetData(GWEN_XMLNODE *n, const char *data);
00337 GWENHYWFAR_API
00338 void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n);
00339
00340 GWENHYWFAR_API
00341 void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n);
00342
00343 GWENHYWFAR_API
00344 GWEN_TYPE_UINT32 GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n);
00361 GWENHYWFAR_API
00362 GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n);
00363
00371 GWENHYWFAR_API
00372 GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n);
00373
00376 GWENHYWFAR_API
00377 GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n);
00378
00387 GWENHYWFAR_API
00388 GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n);
00389
00401 GWENHYWFAR_API
00402 GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n);
00403
00411 GWENHYWFAR_API
00412 GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n);
00413
00425 GWENHYWFAR_API
00426 GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n);
00427
00453 GWENHYWFAR_API
00454 GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n,
00455 const char *tname,
00456 const char *pname,
00457 const char *pvalue);
00458
00464 GWENHYWFAR_API
00465 GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n,
00466 const char *tname,
00467 const char *pname,
00468 const char *pvalue);
00469
00474 GWENHYWFAR_API
00475 int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent,
00476 const GWEN_XMLNODE *child);
00477
00478 GWENHYWFAR_API
00479 int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1,
00480 const GWEN_XMLNODE *n2,
00481 GWEN_BUFFER *nbuf);
00482
00495 GWENHYWFAR_API
00496 GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n,
00497 const char *path,
00498 GWEN_TYPE_UINT32 flags);
00499
00500
00508
00517 GWENHYWFAR_API
00518 void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00519
00527 GWENHYWFAR_API
00528 void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child);
00529
00533 GWENHYWFAR_API
00534 void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n);
00535
00546 GWENHYWFAR_API
00547 void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn,
00548 int copythem);
00549
00555 GWENHYWFAR_API
00556 GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *n,
00557 GWEN_XMLNODE_TYPE t,
00558 const char *data);
00570 GWENHYWFAR_API
00571 int GWEN_XML_Parse(GWEN_XMLNODE *n, GWEN_BUFFEREDIO *bio,
00572 GWEN_TYPE_UINT32 flags);
00573
00574
00579 GWENHYWFAR_API
00580 int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n);
00581
00582
00587 GWENHYWFAR_API
00588 int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath,
00589 GWEN_TYPE_UINT32 flags);
00590
00602 GWENHYWFAR_API
00603 int GWEN_XML_ReadFileSearch(GWEN_XMLNODE *n, const char *filepath,
00604 GWEN_TYPE_UINT32 flags,
00605 GWEN_STRINGLIST *searchPath);
00606
00607
00611 GWENHYWFAR_API
00612 int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n,
00613 GWEN_BUFFEREDIO *bio,
00614 GWEN_TYPE_UINT32 flags);
00615
00619 GWENHYWFAR_API
00620 int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n,
00621 const char *fname,
00622 GWEN_TYPE_UINT32 flags);
00623
00648
00654 GWENHYWFAR_API
00655 const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n,
00656 const char *name,
00657 const char *defValue);
00658
00659 GWENHYWFAR_API
00660 void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n,
00661 const char *name,
00662 const char *value);
00663
00676 GWENHYWFAR_API
00677 const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n,
00678 const char *name,
00679 const char *defValue);
00680
00688 GWENHYWFAR_API
00689 int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n,
00690 const char *name,
00691 int defValue);
00692
00693 GWENHYWFAR_API
00694 void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n,
00695 const char *name,
00696 int value);
00697
00705
00709 GWENHYWFAR_API
00710 void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, FILE *f, int ind);
00713
00714
00715
00723
00724 typedef struct GWEN_XMLNODE_PATH GWEN_XMLNODE_PATH;
00725
00726
00727 GWENHYWFAR_API
00728 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new();
00729 GWENHYWFAR_API
00730 GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np);
00731 GWENHYWFAR_API
00732 void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np);
00733
00737 GWENHYWFAR_API
00738 int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np,
00739 GWEN_XMLNODE *n);
00740
00745 GWENHYWFAR_API
00746 GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np);
00747
00751 GWENHYWFAR_API
00752 void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np);
00755
00756
00757 #ifdef __cplusplus
00758 }
00759 #endif
00760
00761
00762
00763 #endif