/**
 * Summary: library of generic URI related routines
 * Description: library of generic URI related routines
 *              Implements RFC 2396
 *
 * Copy: See Copyright for the status of this software.
 *
 * Author: Daniel Veillard
 */

#ifndef __XML_URI_H__
#define __XML_URI_H__

#include "xmlversion.h"
#include "tree.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * xmlURI:
 *
 * A parsed URI reference. This is a struct containing the various fields
 * as described in RFC 2396 but separated for further processing.
 */
typedef struct _xmlURI xmlURI;
typedef xmlURI *xmlURIPtr;
struct _xmlURI {
    char *scheme;       /* the URI scheme */
    char *opaque;       /* opaque part */
    char *authority;    /* the authority part */
    char *server;       /* the server part */
    char *user;         /* the user part */
    int port;           /* the port number */
    char *path;         /* the path string */
    char *query;        /* the query string */
    char *fragment;     /* the fragment identifier */
    int  cleanup;       /* parsing potentially unclean URI */
};

/*
 * This function is in tree.h:
 * xmlChar *    xmlNodeGetBase  (xmlDocPtr doc,
 *                               xmlNodePtr cur);
 */
XMLPUBFUN xmlURIPtr XMLCALL     
                xmlCreateURI            (void);
XMLPUBFUN xmlChar * XMLCALL     
                xmlBuildURI             (const xmlChar *URI,
                                         const xmlChar *base);
XMLPUBFUN xmlChar * XMLCALL     
                xmlBuildRelativeURI     (const xmlChar *URI,
                                         const xmlChar *base);
XMLPUBFUN xmlURIPtr XMLCALL     
                xmlParseURI             (const char *str);
XMLPUBFUN xmlURIPtr XMLCALL     
                xmlParseURIRaw          (const char *str,
                                         int raw);
XMLPUBFUN int XMLCALL           
                xmlParseURIReference    (xmlURIPtr uri,
                                         const char *str);
XMLPUBFUN xmlChar * XMLCALL     
                xmlSaveUri              (xmlURIPtr uri);
XMLPUBFUN void XMLCALL          
                xmlPrintURI             (FILE *stream,
                                         xmlURIPtr uri);
XMLPUBFUN xmlChar * XMLCALL       
                xmlURIEscapeStr         (const xmlChar *str,
                                         const xmlChar *list);
XMLPUBFUN char * XMLCALL                
                xmlURIUnescapeString    (const char *str,
                                         int len,
                                         char *target);
XMLPUBFUN int XMLCALL           
                xmlNormalizeURIPath     (char *path);
XMLPUBFUN xmlChar * XMLCALL     
                xmlURIEscape            (const xmlChar *str);
XMLPUBFUN void XMLCALL          
                xmlFreeURI              (xmlURIPtr uri);
XMLPUBFUN xmlChar* XMLCALL      
                xmlCanonicPath          (const xmlChar *path);
XMLPUBFUN xmlChar* XMLCALL      
                xmlPathToURI            (const xmlChar *path);

#ifdef __cplusplus
}
#endif
#endif /* __XML_URI_H__ */
