/**************************************************************
 * 
 * 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_style_CharacterProperties_Complex_idl__
#define __com_sun_star_style_CharacterProperties_Complex_idl__

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

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

 module com {  module sun {  module star {  module style {

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

/** This is a set of properties to describe the style of characters in complex texts.
 */
published service CharacterPropertiesComplex
{
	//-------------------------------------------------------------------------
	/** This value contains the height of the characters in point.
	 */
	[property] float CharHeightComplex;
	//-------------------------------------------------------------------------
	/** This property contains the value of the font weight.@see com::sun::star::awt::FontWeight
	 */
	[property] float CharWeightComplex;
	//-------------------------------------------------------------------------
	/** This property specifies the name of the font style.
		<p>It may contain more than one name separated by comma.</p>
	 */
	[property] string CharFontNameComplex;
	//-------------------------------------------------------------------------
	/** This property contains the name of the font style.
		<p>This property may be empty.</p>
	 */
	[property] string CharFontStyleNameComplex;
	//-------------------------------------------------------------------------
	/** This property contains font family as specified in
		com.sun.star.awt.FontFamily .
	 */
	[property] short CharFontFamilyComplex;
	//-------------------------------------------------------------------------
	/** This property contains the text encoding of the font as specified in
		com.sun.star.awt.CharSet.
	 */
	[property] short CharFontCharSetComplex;
	//-------------------------------------------------------------------------
	/** This property contains the font pitch as specified in com.sun.star.awt.FontPitch.
	 */
	[property] short CharFontPitchComplex;
	//-------------------------------------------------------------------------
	/** This property contains the value of the posture of the document.@see com::sun::star::awt::FontSlant
	 */
	[property] com::sun::star::awt::FontSlant CharPostureComplex;

	//-------------------------------------------------------------------------
	/** contains the value of the locale.
	 */
	[property] com::sun::star::lang::Locale CharLocaleComplex;
};
}; }; }; };
#endif

