/**************************************************************
 * 
 * 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_FootnoteSettings_idl__
#define __com_sun_star_text_FootnoteSettings_idl__


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

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

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

/** provides access to the settings of footnotes or endnotes in a
	(text) document.
 */
published service FootnoteSettings
{
	//-------------------------------------------------------------------------

	/** contains the name of the character style that is used
			for the label in front of the footnote/endnote text.
	 */
	[property] string CharStyleName;

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

	/** contains the numbering type for the numbering of the
		footnotes/endnotes.
	 */
	[property] short NumberingType;

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

	/** contains the page style that is used for the page that
			contains the footnote/endnote texts
	 */
	[property] string PageStyleName;

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

	/** contains the paragraph style that is used for the
			footnote/endnote text.
	 */
	[property] string ParaStyleName;

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

	/** contains the prefix for the footnote/endnote symbol.
	 */
	[property] string Prefix;

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

	/** contains the first number of the automatic numbering
		of footnotes/endnotes.
	 */
	[property] short StartAt;

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

	/** contains the suffix for the footnote/endnote symbol.
	 */
	[property] string Suffix;

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

	/** contains the string at the restart of the footnote
		text after a break.

		<p>For footnotes only.</p>
	 */
	[optional, property] string BeginNotice;

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

	/** contains the string at the end of a footnote part in
		front of a break.

		<p>For footnotes only.</p>
	 */
	[optional, property] string EndNotice;

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

	/** contains the type of the counting of the footnote numbers.

        <p>For footnotes only.</p>
        @see FootnoteNumbering
	 */
	[optional, property] short FootnoteCounting;

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

	/** If <TRUE/>, the footnote text is shown at the end of the document.

		<p>For footnotes only.</p>
	 */
	[optional, property] boolean PositionEndOfDoc;

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

    /** contains the name of the character style that is used
        for footnote/endnote anchor in the text.

        @since OpenOffice 2.0
     */
    [optional, property] string AnchorCharStyleName;

};

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

}; }; }; };

#endif
