/* * Copyright (c) 2004, Nate Nielsen * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or * other materials provided with the distribution. * * The names of contributors to this software may not be * used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * * CONTRIBUTORS * Nate Nielsen * */ #ifndef __RTFPARSEHELPERS_H__ #define __RTFPARSEHELPERS_H__ #include "usuals.h" #include "reference.h" #include "sablo.h" #include "rtfformatting.h" class RtfParser; class Destination : public Instance { public: // This is called when the Destination is first used virtual void initialize() {}; // Called when data arrives at destination virtual void charData(wstring data) {}; // Called when the Destination goes out of scope virtual void done() {}; protected: RtfParser* m_parser; friend class RtfParser; }; class Analyser : public Instance { public: // This is called when the Analyser is first used virtual void initialize() {}; // Called when a control word is seen virtual void controlWord(const string& cw, int flags, int param) {}; // Called when a group is seen within this scope virtual void groupStart() {}; // Called when a group ends within this scope virtual void groupEnd() {}; // Called when when this analyser goes out of scope virtual void done() {}; protected: RtfParser* m_parser; friend class RtfParser; }; class Level; typedef Reference DestinationPtr; typedef Reference AnalyserPtr; typedef Reference LevelPtr; class Level : public Instance { public: Level(); virtual ~Level(); LevelPtr getPrevious(); LevelPtr pushLevel(); DOM::Element getElement(); void setElement(DOM::Element element, bool deep = false); AnalyserPtr getAnalyser(bool deep = true); void setAnalyser(AnalyserPtr analyser, bool deep = false); DestinationPtr getDestination(bool deep = true); void setDestination(DestinationPtr destination, bool deep = false); RtfFormatting& getFormatting(); void setTextProperties(RtfFormatting& textProperties); protected: Level(const Level& level); LevelPtr m_previous; DOM::Element m_element; RtfFormatting m_text; DestinationPtr m_destination; AnalyserPtr m_analyser; }; #endif //__RTFPARSEHELPERS_H__