/**************************************************************
 * 
 * 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_ProofreadingResult_idl__
#define __com_sun_star_linguistic2_ProofreadingResult_idl__

#ifndef __com_sun_star_text_XFlatParagraph_idl__
#include <com/sun/star/text/XFlatParagraph.idl>
#endif

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

#ifndef __com_sun_star_linguistic2_SingleProofreadingError_idl__
#include <com/sun/star/linguistic2/SingleProofreadingError.idl>
#endif

#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_idl_
#include <com/sun/star/beans/PropertyValue.idl>
#endif



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

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

// forward declaration
interface XProofreader;
    
//=============================================================================
/** holds the results from proofreading a sentence.

	@since	OOo 3.0.1
*/
struct ProofreadingResult
{
    // the document ID
    string aDocumentIdentifier;

    // the paragraph that was checked
    com::sun::star::text::XFlatParagraph xFlatParagraph;

    // text that was checked (the paragraphs content may have changed meanwhile!)
    string aText;

    // language used for checking
    com::sun::star::lang::Locale aLocale;

    // the start of sentence position passed to the proofreader
    long nStartOfSentencePosition;
    
    // the end of sentence position found by the proofreader
    // That is the index following the character terminating the sentence.
    long nBehindEndOfSentencePosition;

    // the start of the next sentence to be checked.
    // Basically obtained by skipping all white spaces after the end of sentence position.
    long nStartOfNextSentencePosition;

    // the list of errors
    sequence< com::sun::star::linguistic2::SingleProofreadingError > aErrors;
    
    // a list of properties
    sequence< com::sun::star::beans::PropertyValue > aProperties;

    // reference to the specific proofreader implementation that reported the error
    com::sun::star::linguistic2::XProofreader xProofreader;
};

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

}; }; }; };

#endif
