/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



#ifndef __com_sun_star_uri_XUriSchemeParser_idl__
#define __com_sun_star_uri_XUriSchemeParser_idl__

#include <com/sun/star/uno/XInterface.idl>
#include <com/sun/star/uri/XUriReference.idl>

module com { module sun { module star { module uri {

/**
   parses textual representations of absolute URIs.

   <p>See <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC&nbsp;2396</a> for a
   description of URIs and related terms.</p>

   @since OpenOffice 2.0
 */
published interface XUriSchemeParser: com::sun::star::uno::XInterface {
    /**
       parses the textual representation of an absolute URI.

       <p>This method is used to parse URIs (with no fragment part), not URI
       references (with an optional fragment part).</p>

       <p>If an object is returned, the behaviour of its
       <type scope="com::sun::star::uri">XUriReference</type> methods must
       reflect the fact that the object represents an absolute URI reference
       with the given scheme and scheme-specific part, and without a fragment
       part.</p>

       @param scheme
       the textual representation of the scheme part (without the delimiting
       &ldquo;<code>:</code>&rdquo;).

       @param uriReference
       the textual representation of the scheme-specific part.

       @returns
       an object that supports
       <type scope="com::sun::star::uri">XUriReference</type> (and possibly also
       additional, scheme-specific interfaces), if the given input can be parsed
       into an absolute URI; otherwise, <NULL/> is returned.
     */
    XUriReference parse([in] string scheme, [in] string schemeSpecificPart);
};

}; }; }; };

#endif
