/**************************************************************
 * 
 * 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_text_GenericTextDocument_idl__
#define __com_sun_star_text_GenericTextDocument_idl__

#ifndef __com_sun_star_document_OfficeDocument_idl__
#include <com/sun/star/document/OfficeDocument.idl>
#endif

#ifndef __com_sun_star_text_XTextDocument_idl__
#include <com/sun/star/text/XTextDocument.idl>
#endif

#ifndef __com_sun_star_util_XSearchable_idl__
#include <com/sun/star/util/XSearchable.idl>
#endif

#ifndef _com_sun_star_util_XRefreshable_idl_
#include <com/sun/star/util/XRefreshable.idl>
#endif

#ifndef __com_sun_star_text_XFootnotesSupplier_idl__
#include <com/sun/star/text/XFootnotesSupplier.idl>
#endif

#ifndef __com_sun_star_text_XEndnotesSupplier_idl__
#include <com/sun/star/text/XEndnotesSupplier.idl>
#endif

#ifndef __com_sun_star_util_XReplaceable_idl__
#include <com/sun/star/util/XReplaceable.idl>
#endif

#ifndef __com_sun_star_text_XPagePrintable_idl__
#include <com/sun/star/text/XPagePrintable.idl>
#endif

#ifndef __com_sun_star_text_XReferenceMarksSupplier_idl__
#include <com/sun/star/text/XReferenceMarksSupplier.idl>
#endif

#ifndef __com_sun_star_text_XLineNumberingSupplier_idl__
#include <com/sun/star/text/XLineNumberingSupplier.idl>
#endif

#ifndef __com_sun_star_text_XChapterNumberingSupplier_idl__
#include <com/sun/star/text/XChapterNumberingSupplier.idl>
#endif

#ifndef __com_sun_star_text_XTextGraphicObjectsSupplier_idl__
#include <com/sun/star/text/XTextGraphicObjectsSupplier.idl>
#endif

#ifndef __com_sun_star_text_XTextEmbeddedObjectsSupplier_idl__
#include <com/sun/star/text/XTextEmbeddedObjectsSupplier.idl>
#endif

#ifndef __com_sun_star_text_XTextTablesSupplier_idl__
#include <com/sun/star/text/XTextTablesSupplier.idl>
#endif

#ifndef __com_sun_star_style_XStyleFamiliesSupplier_idl__
#include <com/sun/star/style/XStyleFamiliesSupplier.idl>
#endif

#ifndef __com_sun_star_util_XNumberFormatsSupplier_idl__
#include <com/sun/star/util/XNumberFormatsSupplier.idl>
#endif

#ifndef __com_sun_star_text_XBookmarksSupplier_idl__
#include <com/sun/star/text/XBookmarksSupplier.idl>
#endif

#ifndef __com_sun_star_text_XDocumentIndexesSupplier_idl__
#include <com/sun/star/text/XDocumentIndexesSupplier.idl>
#endif

#ifndef __com_sun_star_text_XTextFieldsSupplier_idl__
#include <com/sun/star/text/XTextFieldsSupplier.idl>
#endif

#ifndef __com_sun_star_text_XTextFramesSupplier_idl__
#include <com/sun/star/text/XTextFramesSupplier.idl>
#endif

#ifndef __com_sun_star_text_XTextSectionsSupplier_idl__
#include <com/sun/star/text/XTextSectionsSupplier.idl>
#endif

#ifndef __com_sun_star_lang_XMultiServiceFactory_idl__
#include <com/sun/star/lang/XMultiServiceFactory.idl>
#endif

#ifndef __com_sun_star_lang_Locale_idl__
#include <com/sun/star/lang/Locale.idl>
#endif

//=============================================================================

 module com {  module sun {  module star {  module text {

//=============================================================================

/** A text document is a model component which contains text
	structured by paragraphs.

	<p>Each paragraph and each portion of text can be fitted with
    some attributes (technically properties).</p>

    <p>Its declared as generic text document, because its function is
    needed by different derived services (TextDocument/WebDocument/GlobalDocument).</p>

	<p>In addition, all text objects can be searched.</p>
 */
published service GenericTextDocument
{
	service com::sun::star::document::OfficeDocument;

	/** provides methods to create instances of several text document
		services.
		A text document provides several services which need the context
		of a text document and these text document dependent services are
		created at the text document directly and not over the global service
		manager.
	 */
	interface com::sun::star::lang::XMultiServiceFactory;
    
	interface com::sun::star::text::XTextDocument;

	interface com::sun::star::util::XSearchable;

	interface com::sun::star::util::XRefreshable;

	[optional] interface com::sun::star::text::XFootnotesSupplier;

	[optional] interface com::sun::star::text::XEndnotesSupplier;

	[optional] interface com::sun::star::util::XReplaceable;

	[optional] interface com::sun::star::text::XPagePrintable;

	[optional] interface com::sun::star::text::XReferenceMarksSupplier;

	[optional] interface com::sun::star::text::XLineNumberingSupplier;

	[optional] interface com::sun::star::text::XChapterNumberingSupplier;

	[optional] interface com::sun::star::beans::XPropertySet;

	[optional] interface com::sun::star::text::XTextGraphicObjectsSupplier;

	[optional] interface com::sun::star::text::XTextEmbeddedObjectsSupplier;

	[optional] interface com::sun::star::text::XTextTablesSupplier;

	[optional] interface com::sun::star::style::XStyleFamiliesSupplier;

	/** @since OOo 1.1.2
	 */
	[optional] interface com::sun::star::text::XBookmarksSupplier;

	/** @since OOo 1.1.2
	 */
	[optional] interface com::sun::star::text::XDocumentIndexesSupplier;

	/** @since OOo 1.1.2
	 */
	[optional] interface com::sun::star::text::XTextFieldsSupplier;

	/** @since OOo 1.1.2
	 */
	[optional] interface com::sun::star::text::XTextFramesSupplier;

	/** @since OOo 1.1.2
	 */
	[optional] interface com::sun::star::text::XTextSectionsSupplier;

	/** @since OOo 1.1.2
	 */
	[optional] interface com::sun::star::util::XNumberFormatsSupplier;
    //-------------------------------------------------------------------------

	/** contains the identifier of the default locale of the document.
	 */
	[optional, property] com::sun::star::lang::Locale CharLocale;

	//-------------------------------------------------------------------------

	/** contains the count of all characters in the document.
	 */
	[optional, readonly, property] long CharacterCount;


	//-------------------------------------------------------------------------

	/** contains the count of all paragraphs in the document.
	 */
	[optional, readonly, property] long ParagraphCount;

	//-------------------------------------------------------------------------

	/** contains the count of all words in the document.@see WordSeparator
	 */
	[optional, readonly, property] long WordCount;

	//-------------------------------------------------------------------------

	/** contains a string that consists of characters that mark the
		separation of words in counting the words in a document.



		<p> I.e. slash and backslash. Whitespaces (tab stop,
		space, paragraph break, line break) always separate
		words.</p>@see WordCount
	 */
	[optional, property] string WordSeparator;

        //-------------------------------------------------------------------------
        /** specifies the concordance file taken into account when
         *  creating an index.
         *
         *  When no concordance file should be used the string is empty.
         *  Used for text documents only.
	 *
	 *  @since OOo 1.1.2
         */
        [optional, property] string IndexAutoMarkFileURL;

        //-------------------------------------------------------------------------
        /** specifies if change recording is active.
	 *
	 *  @since OOo 1.1.2
         */
        [optional, property] boolean RecordChanges;

        //-------------------------------------------------------------------------
        /** specifies the first 4 digit year to be used when years
         *  are given in 2 digits.
         *
         *  Example: if set to 1930
         *    Oct-12-29 will be interpreted as Oct-12-2029
         *    Oct-12-30 will be interpreted as Oct-12-1930
         *    Oct-12-02 will be interpreted as Oct-12-2002
	 *
	 *  @since OOo 1.1.2
         */
        [optional, property] short TwoDigitYear;
};

//=============================================================================

}; }; }; };

#endif
