From 8bbe32f26a5cf26311ab803b4bf2d32aac93c24d Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 5 Jul 2013 12:56:02 +0200 Subject: RTF import: extract RTFListener out of RTFDocumentImpl Change-Id: I735f6a3148ece6f28644c5433180482f8cc1323f --- writerfilter/source/rtftok/rtfdocumentimpl.hxx | 189 +++----------------- writerfilter/source/rtftok/rtflistener.hxx | 203 ++++++++++++++++++++++ writerfilter/source/rtftok/rtfskipdestination.cxx | 4 +- writerfilter/source/rtftok/rtfskipdestination.hxx | 6 +- writerfilter/source/rtftok/rtftokenizer.cxx | 5 +- writerfilter/source/rtftok/rtftokenizer.hxx | 9 +- 6 files changed, 240 insertions(+), 176 deletions(-) create mode 100644 writerfilter/source/rtftok/rtflistener.hxx (limited to 'writerfilter') diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 0d77b6e95198..5c39af1a115e 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -24,149 +24,12 @@ #include #include #include +#include class SvStream; namespace writerfilter { namespace rtftok { - enum RTFInternalState - { - INTERNAL_NORMAL, - INTERNAL_BIN, - INTERNAL_HEX - }; - - // Note that this is not a 1:1 mapping between destination control - // words, e.g. RTF_PICT gets mapped to DESTINATION_PICT or - // DESTINATION_SHAPEPROPERTYVALUEPICT, etc. - enum RTFDestinationState - { - DESTINATION_NORMAL, - DESTINATION_SKIP, - DESTINATION_FONTTABLE, - DESTINATION_FONTENTRY, - DESTINATION_COLORTABLE, - DESTINATION_STYLESHEET, - DESTINATION_STYLEENTRY, - DESTINATION_FIELD, - DESTINATION_FIELDINSTRUCTION, - DESTINATION_FIELDRESULT, - DESTINATION_LISTTABLE, - DESTINATION_LISTPICTURE, - DESTINATION_LISTENTRY, - DESTINATION_LISTOVERRIDETABLE, - DESTINATION_LISTOVERRIDEENTRY, - DESTINATION_LISTLEVEL, - DESTINATION_LEVELTEXT, - DESTINATION_LEVELNUMBERS, - DESTINATION_SHPPICT, - DESTINATION_PICT, - DESTINATION_PICPROP, - DESTINATION_SHAPEPROPERTY, - DESTINATION_SHAPEPROPERTYNAME, - DESTINATION_SHAPEPROPERTYVALUE, - DESTINATION_SHAPE, - DESTINATION_SHAPEINSTRUCTION, - DESTINATION_SHAPEPROPERTYVALUEPICT, - DESTINATION_NESTEDTABLEPROPERTIES, - DESTINATION_FOOTNOTE, - DESTINATION_BOOKMARKSTART, - DESTINATION_BOOKMARKEND, - DESTINATION_REVISIONTABLE, - DESTINATION_REVISIONENTRY, - DESTINATION_SHAPETEXT, - DESTINATION_FORMFIELD, - DESTINATION_FORMFIELDNAME, - DESTINATION_FORMFIELDLIST, - DESTINATION_DATAFIELD, - DESTINATION_INFO, - DESTINATION_CREATIONTIME, - DESTINATION_REVISIONTIME, - DESTINATION_PRINTTIME, - DESTINATION_AUTHOR, - DESTINATION_KEYWORDS, - DESTINATION_OPERATOR, - DESTINATION_COMPANY, - DESTINATION_COMMENT, - DESTINATION_OBJECT, - DESTINATION_OBJDATA, - DESTINATION_RESULT, - DESTINATION_ANNOTATIONDATE, - DESTINATION_ANNOTATIONAUTHOR, - DESTINATION_FALT, - DESTINATION_FLYMAINCONTENT, - DESTINATION_DRAWINGOBJECT, - DESTINATION_PARAGRAPHNUMBERING, - DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE, - DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER, - DESTINATION_TITLE, - DESTINATION_SUBJECT, - DESTINATION_DOCCOMM, - DESTINATION_ATNID, - DESTINATION_MOMATH, - DESTINATION_MR, - DESTINATION_MF, - DESTINATION_MFPR, - DESTINATION_MCTRLPR, - DESTINATION_MNUM, - DESTINATION_MDEN, - DESTINATION_MACC, - DESTINATION_MACCPR, - DESTINATION_MCHR, - DESTINATION_MPOS, - DESTINATION_MVERTJC, - DESTINATION_MSTRIKEH, - DESTINATION_MDEGHIDE, - DESTINATION_ME, - DESTINATION_MBAR, - DESTINATION_MBARPR, - DESTINATION_MD, - DESTINATION_MDPR, - DESTINATION_MBEGCHR, - DESTINATION_MSEPCHR, - DESTINATION_MENDCHR, - DESTINATION_MFUNC, - DESTINATION_MFUNCPR, - DESTINATION_MFNAME, - DESTINATION_MLIMLOW, - DESTINATION_MLIMLOWPR, - DESTINATION_MLIM, - DESTINATION_MM, - DESTINATION_MMPR, - DESTINATION_MMR, - DESTINATION_MNARY, - DESTINATION_MNARYPR, - DESTINATION_MSUB, - DESTINATION_MSUP, - DESTINATION_MSUBHIDE, - DESTINATION_MSUPHIDE, - DESTINATION_MLIMUPP, - DESTINATION_MLIMUPPPR, - DESTINATION_MGROUPCHR, - DESTINATION_MGROUPCHRPR, - DESTINATION_MBORDERBOX, - DESTINATION_MBORDERBOXPR, - DESTINATION_MRAD, - DESTINATION_MRADPR, - DESTINATION_MDEG, - DESTINATION_MSSUB, - DESTINATION_MSSUBPR, - DESTINATION_MSSUP, - DESTINATION_MSSUPPR, - DESTINATION_MSSUBSUP, - DESTINATION_MSSUBSUPPR, - DESTINATION_MSPRE, - DESTINATION_MSPREPR, - DESTINATION_MTYPE, - DESTINATION_MGROW, - DESTINATION_MBOX, - DESTINATION_MEQARR, - DESTINATION_UPR, - DESTINATION_LFOLEVEL, - DESTINATION_BACKGROUND, - DESTINATION_SHAPEGROUP, - }; - enum RTFBorderState { BORDER_NONE, @@ -176,16 +39,6 @@ namespace writerfilter { BORDER_PAGE }; - enum RTFErrors - { - ERROR_OK, - ERROR_GROUP_UNDER, - ERROR_GROUP_OVER, - ERROR_EOF, - ERROR_HEX_INVALID, - ERROR_CHAR_OVER - }; - /// Minimalistic buffer of elements for nested cells. enum RTFBufferTypes { @@ -417,7 +270,7 @@ namespace writerfilter { /// Implementation of the RTFDocument interface. class RTFDocumentImpl - : public RTFDocument + : public RTFDocument, public RTFListener { public: typedef ::boost::shared_ptr Pointer_t; @@ -427,39 +280,41 @@ namespace writerfilter { uno::Reference const& xFrame, uno::Reference const& xStatusIndicator); virtual ~RTFDocumentImpl(); + + // RTFDocument virtual void resolve(Stream & rHandler); virtual std::string getType() const; + // RTFListener + virtual int dispatchDestination(RTFKeyword nKeyword); + virtual int dispatchFlag(RTFKeyword nKeyword); + virtual int dispatchSymbol(RTFKeyword nKeyword); + virtual int dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam); + virtual int dispatchValue(RTFKeyword nKeyword, int nParam); + virtual int resolveChars(char ch); + virtual int pushState(); + virtual int popState(); + virtual RTFDestinationState getDestinationState(); + virtual void setDestinationState(RTFDestinationState nDestinationState); + virtual RTFInternalState getInternalState(); + virtual void setInternalState(RTFInternalState nInternalState); + virtual bool getSkipUnknown(); + virtual void setSkipUnknown(bool bSkipUnknown); + virtual void finishSubstream(); + virtual bool isSubstream() const; + Stream& Mapper(); void setSubstream(bool bIsSubtream); void setSuperstream(RTFDocumentImpl *pSuperstream); void setAuthor(OUString& rAuthor); void setAuthorInitials(OUString& rAuthorInitials); - bool isSubstream() const; - void finishSubstream(); void setIgnoreFirst(OUString& rIgnoreFirst); void seek(sal_uInt32 nPos); uno::Reference getModelFactory(); bool isInBackground(); - RTFInternalState getInternalState(); - void setInternalState(RTFInternalState nInternalState); - RTFDestinationState getDestinationState(); - void setDestinationState(RTFDestinationState nDestinationState); void setDestinationText(OUString& rString); /// Resolve a picture: If not inline, then anchored. int resolvePict(bool bInline); - bool getSkipUnknown(); - void setSkipUnknown(bool bSkipUnknown); - - // These callbacks are invoked by the tokenizer. - int resolveChars(char ch); - int pushState(); - int popState(); - int dispatchFlag(RTFKeyword nKeyword); - int dispatchDestination(RTFKeyword nKeyword); - int dispatchSymbol(RTFKeyword nKeyword); - int dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam); - int dispatchValue(RTFKeyword nKeyword, int nParam); /// If this is the first run of the document, starts the initial paragraph. void checkFirstRun(); diff --git a/writerfilter/source/rtftok/rtflistener.hxx b/writerfilter/source/rtftok/rtflistener.hxx new file mode 100644 index 000000000000..616da4b38d2f --- /dev/null +++ b/writerfilter/source/rtftok/rtflistener.hxx @@ -0,0 +1,203 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef _RTFLISTENER_HXX_ +#define _RTFLISTENER_HXX_ + +#include + +namespace writerfilter { + namespace rtftok { + enum RTFInternalState + { + INTERNAL_NORMAL, + INTERNAL_BIN, + INTERNAL_HEX + }; + + // Note that this is not a 1:1 mapping between destination control + // words, e.g. RTF_PICT gets mapped to DESTINATION_PICT or + // DESTINATION_SHAPEPROPERTYVALUEPICT, etc. + enum RTFDestinationState + { + DESTINATION_NORMAL, + DESTINATION_SKIP, + DESTINATION_FONTTABLE, + DESTINATION_FONTENTRY, + DESTINATION_COLORTABLE, + DESTINATION_STYLESHEET, + DESTINATION_STYLEENTRY, + DESTINATION_FIELD, + DESTINATION_FIELDINSTRUCTION, + DESTINATION_FIELDRESULT, + DESTINATION_LISTTABLE, + DESTINATION_LISTPICTURE, + DESTINATION_LISTENTRY, + DESTINATION_LISTOVERRIDETABLE, + DESTINATION_LISTOVERRIDEENTRY, + DESTINATION_LISTLEVEL, + DESTINATION_LEVELTEXT, + DESTINATION_LEVELNUMBERS, + DESTINATION_SHPPICT, + DESTINATION_PICT, + DESTINATION_PICPROP, + DESTINATION_SHAPEPROPERTY, + DESTINATION_SHAPEPROPERTYNAME, + DESTINATION_SHAPEPROPERTYVALUE, + DESTINATION_SHAPE, + DESTINATION_SHAPEINSTRUCTION, + DESTINATION_SHAPEPROPERTYVALUEPICT, + DESTINATION_NESTEDTABLEPROPERTIES, + DESTINATION_FOOTNOTE, + DESTINATION_BOOKMARKSTART, + DESTINATION_BOOKMARKEND, + DESTINATION_REVISIONTABLE, + DESTINATION_REVISIONENTRY, + DESTINATION_SHAPETEXT, + DESTINATION_FORMFIELD, + DESTINATION_FORMFIELDNAME, + DESTINATION_FORMFIELDLIST, + DESTINATION_DATAFIELD, + DESTINATION_INFO, + DESTINATION_CREATIONTIME, + DESTINATION_REVISIONTIME, + DESTINATION_PRINTTIME, + DESTINATION_AUTHOR, + DESTINATION_KEYWORDS, + DESTINATION_OPERATOR, + DESTINATION_COMPANY, + DESTINATION_COMMENT, + DESTINATION_OBJECT, + DESTINATION_OBJDATA, + DESTINATION_RESULT, + DESTINATION_ANNOTATIONDATE, + DESTINATION_ANNOTATIONAUTHOR, + DESTINATION_FALT, + DESTINATION_FLYMAINCONTENT, + DESTINATION_DRAWINGOBJECT, + DESTINATION_PARAGRAPHNUMBERING, + DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE, + DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER, + DESTINATION_TITLE, + DESTINATION_SUBJECT, + DESTINATION_DOCCOMM, + DESTINATION_ATNID, + DESTINATION_MOMATH, + DESTINATION_MR, + DESTINATION_MF, + DESTINATION_MFPR, + DESTINATION_MCTRLPR, + DESTINATION_MNUM, + DESTINATION_MDEN, + DESTINATION_MACC, + DESTINATION_MACCPR, + DESTINATION_MCHR, + DESTINATION_MPOS, + DESTINATION_MVERTJC, + DESTINATION_MSTRIKEH, + DESTINATION_MDEGHIDE, + DESTINATION_ME, + DESTINATION_MBAR, + DESTINATION_MBARPR, + DESTINATION_MD, + DESTINATION_MDPR, + DESTINATION_MBEGCHR, + DESTINATION_MSEPCHR, + DESTINATION_MENDCHR, + DESTINATION_MFUNC, + DESTINATION_MFUNCPR, + DESTINATION_MFNAME, + DESTINATION_MLIMLOW, + DESTINATION_MLIMLOWPR, + DESTINATION_MLIM, + DESTINATION_MM, + DESTINATION_MMPR, + DESTINATION_MMR, + DESTINATION_MNARY, + DESTINATION_MNARYPR, + DESTINATION_MSUB, + DESTINATION_MSUP, + DESTINATION_MSUBHIDE, + DESTINATION_MSUPHIDE, + DESTINATION_MLIMUPP, + DESTINATION_MLIMUPPPR, + DESTINATION_MGROUPCHR, + DESTINATION_MGROUPCHRPR, + DESTINATION_MBORDERBOX, + DESTINATION_MBORDERBOXPR, + DESTINATION_MRAD, + DESTINATION_MRADPR, + DESTINATION_MDEG, + DESTINATION_MSSUB, + DESTINATION_MSSUBPR, + DESTINATION_MSSUP, + DESTINATION_MSSUPPR, + DESTINATION_MSSUBSUP, + DESTINATION_MSSUBSUPPR, + DESTINATION_MSPRE, + DESTINATION_MSPREPR, + DESTINATION_MTYPE, + DESTINATION_MGROW, + DESTINATION_MBOX, + DESTINATION_MEQARR, + DESTINATION_UPR, + DESTINATION_LFOLEVEL, + DESTINATION_BACKGROUND, + DESTINATION_SHAPEGROUP, + }; + + enum RTFErrors + { + ERROR_OK, + ERROR_GROUP_UNDER, + ERROR_GROUP_OVER, + ERROR_EOF, + ERROR_HEX_INVALID, + ERROR_CHAR_OVER + }; + + /** + * RTFTokenizer needs a class implementing this this interface. While + * RTFTokenizer separates control words (and their arguments) from + * text, the class implementing this interface is expected to map the + * raw RTF tokens to dmapper tokens. + */ + class RTFListener + { + public: + virtual ~RTFListener() { } + // Dispatching of control words and characters. + virtual int dispatchDestination(RTFKeyword nKeyword) = 0; + virtual int dispatchFlag(RTFKeyword nKeyword) = 0; + virtual int dispatchSymbol(RTFKeyword nKeyword) = 0; + virtual int dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam) = 0; + virtual int dispatchValue(RTFKeyword nKeyword, int nParam) = 0; + virtual int resolveChars(char ch) = 0; + + // State handling. + virtual int pushState() = 0; + virtual int popState() = 0; + + virtual RTFDestinationState getDestinationState() = 0; + virtual void setDestinationState(RTFDestinationState nDestinationState) = 0; + virtual RTFInternalState getInternalState() = 0; + virtual void setInternalState(RTFInternalState nInternalState) = 0; + virtual bool getSkipUnknown() = 0; + virtual void setSkipUnknown(bool bSkipUnknown) = 0; + + // Substream handling. + virtual void finishSubstream() = 0; + virtual bool isSubstream() const = 0; + }; + } // namespace rtftok +} // namespace writerfilter + +#endif // _RTFLISTENER_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfskipdestination.cxx b/writerfilter/source/rtftok/rtfskipdestination.cxx index 46c7b9ed9a3e..68081c15943f 100644 --- a/writerfilter/source/rtftok/rtfskipdestination.cxx +++ b/writerfilter/source/rtftok/rtfskipdestination.cxx @@ -8,11 +8,13 @@ */ #include +#include +#include namespace writerfilter { namespace rtftok { -RTFSkipDestination::RTFSkipDestination(RTFDocumentImpl& rImport) +RTFSkipDestination::RTFSkipDestination(RTFListener& rImport) : m_rImport(rImport), m_bParsed(true), m_bReset(true) diff --git a/writerfilter/source/rtftok/rtfskipdestination.hxx b/writerfilter/source/rtftok/rtfskipdestination.hxx index b6bf021cbd74..2eba40500190 100644 --- a/writerfilter/source/rtftok/rtfskipdestination.hxx +++ b/writerfilter/source/rtftok/rtfskipdestination.hxx @@ -10,7 +10,7 @@ #ifndef _RTFSKIPDESTINATION_HXX_ #define _RTFSKIPDESTINATION_HXX_ -#include +#include namespace writerfilter { namespace rtftok { @@ -18,12 +18,12 @@ namespace writerfilter { class RTFSkipDestination { public: - RTFSkipDestination(RTFDocumentImpl& rImport); + RTFSkipDestination(RTFListener& rImport); virtual ~RTFSkipDestination(); void setParsed(bool bParsed); void setReset(bool bReset); private: - RTFDocumentImpl& m_rImport; + RTFListener& m_rImport; bool m_bParsed; /// If false, the destructor is a noop, required by the \* symbol itself. bool m_bReset; diff --git a/writerfilter/source/rtftok/rtftokenizer.cxx b/writerfilter/source/rtftok/rtftokenizer.cxx index aa3708fa6368..7d3c2ddece9c 100644 --- a/writerfilter/source/rtftok/rtftokenizer.cxx +++ b/writerfilter/source/rtftok/rtftokenizer.cxx @@ -11,10 +11,13 @@ #include #include #include +#include #include #include +#include +using namespace com::sun::star; namespace writerfilter { namespace rtftok { @@ -22,7 +25,7 @@ namespace rtftok { std::vector RTFTokenizer::m_aRTFControlWords; bool RTFTokenizer::m_bControlWordsSorted; -RTFTokenizer::RTFTokenizer(RTFDocumentImpl& rImport, SvStream* pInStream, uno::Reference const& xStatusIndicator) +RTFTokenizer::RTFTokenizer(RTFListener& rImport, SvStream* pInStream, uno::Reference const& xStatusIndicator) : m_rImport(rImport), m_pInStream(pInStream), m_xStatusIndicator(xStatusIndicator), diff --git a/writerfilter/source/rtftok/rtftokenizer.hxx b/writerfilter/source/rtftok/rtftokenizer.hxx index 425e77344728..df452fb89048 100644 --- a/writerfilter/source/rtftok/rtftokenizer.hxx +++ b/writerfilter/source/rtftok/rtftokenizer.hxx @@ -10,7 +10,8 @@ #ifndef _RTFTOKENIZER_HXX_ #define _RTFTOKENIZER_HXX_ -#include +#include +#include class SvStream; @@ -20,7 +21,7 @@ namespace writerfilter { class RTFTokenizer { public: - RTFTokenizer(RTFDocumentImpl& rImport, SvStream* pInStream, uno::Reference const& xStatusIndicator); + RTFTokenizer(RTFListener& rImport, SvStream* pInStream, com::sun::star::uno::Reference const& xStatusIndicator); virtual ~RTFTokenizer(); int resolveParse(); @@ -37,9 +38,9 @@ namespace writerfilter { int resolveKeyword(); int dispatchKeyword(OString& rKeyword, bool bParam, int nParam); - RTFDocumentImpl& m_rImport; + RTFListener& m_rImport; SvStream* m_pInStream; - uno::Reference const& m_xStatusIndicator; + com::sun::star::uno::Reference const& m_xStatusIndicator; // This is the same as aRTFControlWords, but sorted static std::vector m_aRTFControlWords; static bool m_bControlWordsSorted; -- cgit v1.2.3