/************************************************************** * * 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 #include #include #include #include #include #include #include /** @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 WRITERFILTER_DLLPUBLIC Reference { public: /** Pointer to reference @attention The ownership of a reference is transferred when the reference is passed. */ typedef boost::shared_ptr< Reference > 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 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::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::Pointer_t ref) = 0; virtual ~BinaryObj(){} }; /** Handler for a stream. */ class WRITERFILTER_DLLPUBLIC Stream { public: /** Pointer to this stream. */ typedef boost::shared_ptr 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::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
::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::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 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::Pointer_t getProperties() = 0; /** Returns stream of this value. */ virtual writerfilter::Reference::Pointer_t getStream() = 0; /** Returns binary object of this value. */ virtual writerfilter::Reference::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 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::Pointer_t getBinary() = 0; /** Returns reference to stream associated with the SPRM. */ virtual writerfilter::Reference::Pointer_t getStream() = 0; /** Returns reference to properties contained in the SPRM. */ virtual writerfilter::Reference::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 & o, const char * name, writerfilter::Reference::Pointer_t props); void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth & o, const char * name, sal_uInt32 n); void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth & /*o*/, const char * /*name*/, const rtl::OUString & /*str*/); void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth & o, const char * name, writerfilter::Reference::Pointer_t binary); class Token_t { sal_Int32 m_nId; #ifdef DEBUG ::std::string m_string; #endif void assign(sal_Int32 nId); public: Token_t(); Token_t(sal_Int32 nId); virtual ~Token_t(); sal_Int32 getId() const; operator sal_Int32() const; Token_t & operator = (sal_Int32 n); #ifdef DEBUG ::std::string toString() const; #endif }; struct TokenHash { size_t operator()(const Token_t & rToken) const; }; } #endif // INCLUDED_WW8_EVENT_HANDLER_HXX