blob: a428a6197116d68ddb6ffe8fbd4f141cefada2ca [file] [log] [blame]
/**************************************************************
*
* 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 INCLUDED_WW8_EVENT_HANDLER_HXX
#define INCLUDED_WW8_EVENT_HANDLER_HXX
#include <string>
#include <memory>
#include <boost/shared_ptr.hpp>
#include <sal/types.h>
#include <com/sun/star/drawing/XShape.hpp>
#include <com/sun/star/uno/Any.hxx>
#include <WriterFilterDllApi.hxx>
#include <resourcemodel/OutputWithDepth.hxx>
/**
@file WW8ResourceModel.hxx
The classes in this file define the interfaces for the resource
model of the DocTokenizer:
@image html doctok.png
A resource is a set of events that describe an object. A resource
is only an abstract concept. It is not instanciated to a class.
A reference to a resource represents the object that the resource
describes. The reference can be resolved thereby generating the
events of the resource.
A handler receives the events generated by resolving a
reference. There are several types of handlers each accepting their
specific set of events.
References always have a parameter determining the kind of handler
they send the events they generate to. The set of events generated
by resolving the reference is a subset of the events received by
the handler.
*/
typedef sal_uInt32 Id;
namespace writerfilter {
using namespace ::com::sun::star;
using namespace ::std;
/**
Reference to an resource that generates events and sends them to a
handler.
The reference can be resolved, i.e. the resource generates its
events. The events must be suitable for the handler type given by
the template parameter.
@attention The parameter of the template does not determine the
type of the reference's target. It determines the type of the handler!
Example:
A Word document can be represented as a stream of events. Event
types in a Word document are text, properties, tables, starts and
ends of groups. These can be handled by a stream handler (@see
Stream). Thus a reference to a Word document is resolved by
sending these events to a stream handler.
*/
template <class T>
class WRITERFILTER_DLLPUBLIC Reference
{
public:
/**
Pointer to reference
@attention The ownership of a reference is transfered when
the reference is passed.
*/
typedef boost::shared_ptr< Reference<T> > Pointer_t;
virtual ~Reference() {}
/**
Resolves the reference.
The events of the references target resource are generated and
send to a handler.
@param rHandler handler which receives the events
*/
virtual void resolve(T & rHandler) = 0;
/**
Returns the type of the reference aka the name of the access class.
*/
virtual string getType() const = 0;
};
class Value;
class Sprm;
/**
Handler for properties.
*/
class WRITERFILTER_DLLPUBLIC Properties
{
public:
/**
Receives an attribute.
@param name name of the attribute
@param val value of the attribute
*/
virtual void attribute(Id name, Value & val) = 0;
/**
Receives a SPRM.
@param sprm the SPRM received
*/
virtual void sprm(Sprm & sprm) = 0;
virtual ~Properties(){}
};
/**
Handler for tables.
*/
class WRITERFILTER_DLLPUBLIC Table
{
public:
typedef boost::shared_ptr<Table> Pointer_t;
/**
Receives an entry of the table.
@param pos position of the entry in the table
@param ref reference to properties of the entry
*/
virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) = 0;
virtual ~Table() {}
};
/**
Handler for binary objects.
*/
class WRITERFILTER_DLLPUBLIC BinaryObj
{
public:
/**
Receives binary data of the object.
@param buf pointer to buffer containing the data
@param len size of buffer
@param ref reference to properties of binary object
*/
virtual void data(const sal_uInt8* buf, size_t len,
writerfilter::Reference<Properties>::Pointer_t ref) = 0;
virtual ~BinaryObj(){}
};
/**
Handler for a stream.
*/
class WRITERFILTER_DLLPUBLIC Stream
{
public:
/**
Pointer to this stream.
*/
typedef boost::shared_ptr<Stream> Pointer_t;
/**
Receives start mark for group with the same section properties.
*/
virtual void startSectionGroup() = 0;
/**
Receives end mark for group with the same section properties.
*/
virtual void endSectionGroup() = 0;
/**
Receives start mark for group with the same paragraph properties.
*/
virtual void startParagraphGroup() = 0;
/**
Receives end mark for group with the same paragraph properties.
*/
virtual void endParagraphGroup() = 0;
virtual void markLastParagraphInSection( ) { };
/**
Receives start mark for group with the same character properties.
*/
virtual void startCharacterGroup() = 0;
/**
Receives end mark for group with the same character properties.
*/
virtual void endCharacterGroup() = 0;
/**
Receives a shape.
*/
virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ) = 0;
virtual void endShape( ) = 0;
/**
Receives 8-bit per character text.
@param data buffer containing the text
@param len number of characters in the text
*/
virtual void text(const sal_uInt8 * data, size_t len) = 0;
/**
Receives 16-bit per character text.
@param data buffer containing the text
@param len number of characters in the text.
*/
virtual void utext(const sal_uInt8 * data, size_t len) = 0;
/**
Receives properties of the current run of text.
@param ref reference to the properties
*/
virtual void props(writerfilter::Reference<Properties>::Pointer_t ref) = 0;
/**
Receives table.
@param name name of the table
@param ref referecne to the table
*/
virtual void table(Id name,
writerfilter::Reference<Table>::Pointer_t ref) = 0;
/**
Receives a substream.
@param name name of the substream
@param ref reference to the substream
*/
virtual void substream(Id name,
writerfilter::Reference<Stream>::Pointer_t ref) = 0;
/**
Debugging: Receives information about current point in stream.
@param info the information
*/
virtual void info(const string & info) = 0;
virtual ~Stream() {}
};
/**
A value.
The methods of this class may throw exceptions if a certain aspect
makes no sense for a certain value, e.g. the integer value of a
string.
*/
class WRITERFILTER_DLLPUBLIC Value
{
public:
/**
Pointer to a value.
*/
typedef auto_ptr<Value> Pointer_t;
/**
Returns integer representation of the value.
*/
virtual sal_Int32 getInt() const = 0;
/**
Returns string representation of the value.
*/
virtual ::rtl::OUString getString() const = 0;
/**
Returns representation of the value as uno::Any.
*/
virtual uno::Any getAny() const = 0;
/**
Returns properties of this value.
*/
virtual writerfilter::Reference<Properties>::Pointer_t getProperties() = 0;
/**
Returns stream of this value.
*/
virtual writerfilter::Reference<Stream>::Pointer_t getStream() = 0;
/**
Returns binary object of this value.
*/
virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() = 0;
/**
Returns string representation of this value.
*/
virtual string toString() const = 0;
virtual ~Value() {}
};
/**
An SPRM.
*/
class WRITERFILTER_DLLPUBLIC Sprm
{
public:
typedef auto_ptr<Sprm> Pointer_t;
enum Kind { UNKNOWN, CHARACTER, PARAGRAPH, TABLE };
/**
Returns id of the SPRM.
*/
virtual sal_uInt32 getId() const = 0;
/**
Returns value of the SPRM.
*/
virtual Value::Pointer_t getValue() = 0;
/**
Returns reference to binary object contained in the SPRM.
*/
virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() = 0;
/**
Returns reference to stream associated with the SPRM.
*/
virtual writerfilter::Reference<Stream>::Pointer_t getStream() = 0;
/**
Returns reference to properties contained in the SPRM.
*/
virtual writerfilter::Reference<Properties>::Pointer_t getProps() = 0;
/**
Returns the kind of this SPRM.
*/
virtual Kind getKind() = 0;
/**
Returns name of sprm.
*/
virtual string getName() const = 0;
/**
Returns string repesentation of sprm.
*/
virtual string toString() const = 0;
virtual ~Sprm() {}
};
/**
Creates handler for a stream.
*/
Stream::Pointer_t WRITERFILTER_DLLPUBLIC createStreamHandler();
void WRITERFILTER_DLLPUBLIC analyzerIds();
Stream::Pointer_t WRITERFILTER_DLLPUBLIC createAnalyzer();
void WRITERFILTER_DLLPUBLIC logger(string prefix, string message);
void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & o, const char * name, writerfilter::Reference<Properties>::Pointer_t props);
void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & o, const char * name, sal_uInt32 n);
void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
const rtl::OUString & /*str*/);
void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & o, const char * name, writerfilter::Reference<BinaryObj>::Pointer_t binary);
}
#endif // INCLUDED_WW8_EVENT_HANDLER_HXX