/**************************************************************
 * 
 * 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_linguistic2_XHyphenatedWord_idl__
#define __com_sun_star_linguistic2_XHyphenatedWord_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

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


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

module com { module sun { module star { module linguistic2 {

//=============================================================================
/** gives information obtained by a successful hyphenation attempt.

	<P>This interface is used as a return value for some of the hyphenator
	functions.</P>

    @see    <type scope="com::sun::star::linguistic2">XHyphenator</type>
*/
published interface XHyphenatedWord : com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------
	/**
	 	@returns
		 	the word that was hyphenated.
	 */
	string getWord();

	//-------------------------------------------------------------------------
	/**
	 	@returns
			the language of the hyphenated word.

		@see	com::sun::star::lang::Locale
	*/
	com::sun::star::lang::Locale getLocale();

	//-------------------------------------------------------------------------
	/**
		@returns
			the position where hyphenation was applied in the word.

		<P>The value has to be in the range from 0 (after the first character)
	 	to n-2 (before the last character) where n is the length of
	 	the word.</P>
	*/
	short getHyphenationPos();

	//-------------------------------------------------------------------------
	/**
	 	@returns
		 	the hyphenated word as it should be written (without the hyphen
		 	character).
	 */
	string getHyphenatedWord();

	//-------------------------------------------------------------------------
	/**
		@returns
			the position of the hyphen in the hyphenated word.

		<P>The value has to be in the range from 0 (after the first character)
	 	to m-2 (before the last character) where m is the length of
	 	the hyphenated word.</P>
	*/
	short getHyphenPos();

	//-------------------------------------------------------------------------
	/** is used to query if the hyphenation result is an alternative spelling.

	 	<p>A hyphenation result is an alternative spelling if the hyphenated
	 	word is different from the word that was hyphenated.</p>

	 	@returns
	 		<TRUE/> if it is an alternative spelling, <FALSE/> otherwise.
	*/
	boolean isAlternativeSpelling();

};

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

}; }; }; };

#endif

