xml.h

Go to the documentation of this file.
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