gwenhywfar
4.3.1
|
00001 /*************************************************************************** 00002 begin : Sat Jun 28 2003 00003 copyright : (C) 2003-2010 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * * 00008 * This library is free software; you can redistribute it and/or * 00009 * modify it under the terms of the GNU Lesser General Public * 00010 * License as published by the Free Software Foundation; either * 00011 * version 2.1 of the License, or (at your option) any later version. * 00012 * * 00013 * This library is distributed in the hope that it will be useful, * 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00016 * Lesser General Public License for more details. * 00017 * * 00018 * You should have received a copy of the GNU Lesser General Public * 00019 * License along with this library; if not, write to the Free Software * 00020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * 00021 * MA 02111-1307 USA * 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 /* defgroup */ 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); /* defgroup */ /* defgroup (all)*/ 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