/**************************************************************
 * 
 * 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_modules_idl__
#define __com_sun_star_modules_idl__

module com { module sun { module star {

/// security and authenticates interfaces
module auth {};

/// Java AWT-like user interface toolkit interface specifications for UNO.
module awt {};

/** UNO Accessibility API

    <p>This modules contains the basic interfaces of the UAA (UNO
    Accessibility API).  Services that describe how these interfaces are
    implemented can be found in other modules.  The services in this module
    describe only what every accessible object has to support.</p>

    <p>Making a class accessible starts by supporting the <type
    scope="::com::sun::star::accessibility">XAccessible</type> interface.
    This interface' only method returns the actual accessibility object, an
    instance of <type
    scope="::com::sun::star::accessibility">XAccessibleContext</type>.
    These two interfaces may be implemented by the same class in which case
    a call to <method scope="::com::sun::star::accessibility"
    >XAccessible::getAccessible</method> returns the same object that is
    called.  Alternatively the implementation of the <type
    scope="::com::sun::star::accessibility">XAccessibleContext</type>
    interface can be done by another class.  This makes it possible to put
    all accessibility implementations into their own library which has only
    to be loaded when necessary.</p>

    <p>Note that all other interfaces have to be implemented by the same
    class that implements the <type
    scope="::com::sun::star::accessibility">XAccessibleContext</type>
    interface.  Note also that there is no way back from an accessibility
    object to the object from which it has been obtained by means of the
    UAA.  If you need such a back-link you have to provide one on your
    own.</p>
*/
module accessibility {};

/// Charting diagram interfaces.
module chart {};

/** New implementation of Charting diagram interfaces.  This module
    contains only a rather small public API.  In addition there is a
    private API in the chart2 project.
 */
module chart2 {};

/// Access to the tree of configuration data.
module configuration {};

/// Clipboard and Drag&amp;Drop interfaces.
module datatransfer {};

/// Office document related interfaces.
module document {};

/// Office document content related interfaces.
module office {};

/// Drawing and shape specific interfaces.
module drawing {};

/// Interfaces for managing forms and controls.
module form {};

/// Interfaces for mathematical formulas.
module formula {};

/// Desktop environment framework interfaces.
module frame {};

/// Interfaces and data types to deal with basic geometric entities
module geometry {};

/// Interfaces for graphic handling
module graphic {};

/// Interface for internationalization (deprecated draft).
module i18n {};

/// Interfaces to control installations.
module installation {};

/// lightweight directory access protocol (LDAP)
module ldap {};

/// Spell checker, hyphenation and thesaurus interfaces.
module linguistic2 {};

/// Interfaces for Email connectivity 
module mail {};

/// Media type interfaces
module media {};

/// Interfaces for Mozilla integration.
module mozilla {};

/// Pretty Good Privacy (deprecated).
module pgp {};

/// Netscape-like plugin interfaces.
module plugin {};

/// Presentation specific interfaces.
module presentation {};

/// Interfaces and data structures for rendering
module rendering {};

/// Interfaces to access (UI) resource files.
module resource {};

/// Interfaces for scanner control.
module scanner {};

/// Basic interfaces for database access.
module sdb {};

/// Database component interfaces.
module sdbc {};

/// High-level database component interfaces.
module sdbcx {};

/// Interfaces to control the setup process.
module setup {};

/// Spreadsheet specific interfaces.
module sheet {};

/// Formatting and layout style and stylesheet interfaces.
module style {};

/// Interfaces for import/export of Scaleable Vector Format.
module svg {};

/// Data synchronization interfaces (deprecated).
module sync {};

/// Data synchronization interfaces (deprecated).
module sync2 {};

/// Table specific interfaces (for text and spreadsheet).
module table {};

/// Task management interfaces.
module task {};

/// Test interfaces for core-reflection, introspection and marshalling.
module test {};

/// Text specific interfaces.
module text {};

/// Universal Content Broker interfaces.
module ucb {};

/// Dialogs and other UI elements.
module ui {};

/// Miscellaneous interfaces for sorting, connecting objects etc.
module util {};

/// Document view specfic interfaces (e.g. selection access and printing).
module view {};

/// XML related interfaces.
module xml {};

/// Host operating system integration interfaces.
module system {};

/// Package file format interfaces.
module packages {};

/// image manupulation interfaces.
module image {};

/// interfaces for XForms (XML-based forms) implementation
module xforms {};

/// interfaces for report interfaces
module report {};

/** RDF (Resource Description Framework) and metadata interfaces.

    <p>
    This module provides interfaces for storing and accessing metadata
    in <a href="http://www.w3.org/RDF/">Resource Description Framework</a>
    format.
    The API consists of two main parts: the RDF data model and the ODF
    document integration.
    </p>

    <p>
    The <a href="http://www.w3.org/TR/rdf-concepts/">RDF data model</a>
    describes graphs of statements.
    The nodes in the graph are of type <type scope="rdf">XNode</type>,
    which has several subtypes: <type scope="rdf">XResource</type>,
    <type scope="rdf">XBlankNode</type>,
    <type scope="rdf">XURI</type> and <type scope="rdf">XLiteral</type>.
    Statements are then triples of nodes, and have type
    <type scope="rdf">Statement</type>.
    </p>

    <p>
    The main part of the RDF data model is the
    <type scope="rdf">XRepository</type>, which consists of a set of graphs.
    The repository allows for importing/exporting graphs from/to files,
    as well as querying the contents of the repository.
    The type of the graphs is <type scope="rdf">XNamedGraph</type>.
    </p>

    <p>
    Documents that support metadata implement the interfaces
    <type scope="rdf">XRepositorySupplier</type> and
    <type scope="rdf">XDocumentMetadataAccess</type>.
    Furthermore, all elements of ODF documents that may have metadata attached
    implement the interface <type scope="rdf">XMetadatable</type>.
    </p>

 */
module rdf {};

}; }; };

#endif

