/**************************************************************
 * 
 * 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_util_SearchDescriptor_idl__ 
#define __com_sun_star_util_SearchDescriptor_idl__ 
 
#ifndef __com_sun_star_util_XSearchDescriptor_idl__ 
#include <com/sun/star/util/XSearchDescriptor.idl> 
#endif 
 
#ifndef __com_sun_star_beans_XPropertySet_idl__ 
#include <com/sun/star/beans/XPropertySet.idl> 
#endif 
 
 
//============================================================================= 
 
module com {  module sun {  module star {  module util {  
 
//============================================================================= 
 
/** describes what and how to search within a container.
 */
published service SearchDescriptor
{ 
	interface com::sun::star::util::XSearchDescriptor; 
	
	interface com::sun::star::beans::XPropertySet; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, the search is done backwards in the document.
	 */
	[property] boolean SearchBackwards; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, the case of the letters is important for the match.
	 */
	[property] boolean SearchCaseSensitive; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, only complete words will be found.
	 */
	[property] boolean SearchWords; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, the search string is evaluated as a regular expression.
	 */
	[property] boolean SearchRegularExpression; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, it is searched for positions where the paragraph style with 
		the name of the search pattern is applied.
	 */
	[property] boolean SearchStyles; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, a "similarity search" is performed.
		
		<p>In the case of a similarity search, the following properties
		specify the kind of similarity:
		</p>
		<ul>
		<li>SearchSimilarityRelax
		</li>
		<li>SearchSimilarityRemove
		</li>
		<li>SearchSimilarityAdd
		</li>
		<li>SearchSimilarityExchange
		</li>
		</ul>
	 */
	[property] boolean SearchSimilarity; 
 
	//------------------------------------------------------------------------- 
	/** If <TRUE/>, all similarity rules are applied together.
		
		<p>In the case of a relaxed similarity search, the following
		properties are applied together:
		
		</p>
		<ul>
		<li>SearchSimilarityRemove
		</li>
		<li>SearchSimilarityAdd
		</li>
		<li>SearchSimilarityExchange
		</li>
		</ul>
	 */
	[property] boolean SearchSimilarityRelax; 
 
	//------------------------------------------------------------------------- 
	/** This property specifies the number of characters that may be 
		ignored to match the search pattern.
	 */
	[property] short SearchSimilarityRemove; 
 
	//------------------------------------------------------------------------- 
	/** specifies the number of characters that must be 
		added to match the search pattern.
	 */
	[property] short SearchSimilarityAdd; 
 
	//------------------------------------------------------------------------- 
	/** This property specifies the number of characters that must 
		be replaced to match the search pattern.
	 */
	[property] short SearchSimilarityExchange; 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
