summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2013-07-05 12:56:02 +0200
committerMiklos Vajna <vmiklos@suse.cz>2013-07-05 15:05:46 +0200
commit8bbe32f26a5cf26311ab803b4bf2d32aac93c24d (patch)
tree354a0ffefbbcccae39aef3e2c6dc56d8b7da2c39 /writerfilter
parent3c29fdd21ebb2f10d6df066180f0a76c85f4b082 (diff)
RTF import: extract RTFListener out of RTFDocumentImpl
Change-Id: I735f6a3148ece6f28644c5433180482f8cc1323f
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx189
-rw-r--r--writerfilter/source/rtftok/rtflistener.hxx203
-rw-r--r--writerfilter/source/rtftok/rtfskipdestination.cxx4
-rw-r--r--writerfilter/source/rtftok/rtfskipdestination.hxx6
-rw-r--r--writerfilter/source/rtftok/rtftokenizer.cxx5
-rw-r--r--writerfilter/source/rtftok/rtftokenizer.hxx9
6 files changed, 240 insertions, 176 deletions
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 <rtftok/RTFDocument.hxx>
#include <rtfreferencetable.hxx>
#include <rtfsprm.hxx>
+#include <rtflistener.hxx>
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<RTFDocumentImpl> Pointer_t;
@@ -427,39 +280,41 @@ namespace writerfilter {
uno::Reference<frame::XFrame> const& xFrame,
uno::Reference<task::XStatusIndicator> 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<lang::XMultiServiceFactory> 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 <rtfcontrolwords.hxx>
+
+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 <rtfskipdestination.hxx>
+#include <osl/diagnose.h>
+#include <sal/log.hxx>
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 <rtfdocumentimpl.hxx>
+#include <rtflistener.hxx>
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 <tools/resmgr.hxx>
#include <svx/dialogs.hrc>
#include <vcl/svapp.hxx>
+#include <rtl/strbuf.hxx>
#include <rtftokenizer.hxx>
#include <rtfskipdestination.hxx>
+#include <com/sun/star/io/BufferSizeExceededException.hpp>
+using namespace com::sun::star;
namespace writerfilter {
namespace rtftok {
@@ -22,7 +25,7 @@ namespace rtftok {
std::vector<RTFSymbol> RTFTokenizer::m_aRTFControlWords;
bool RTFTokenizer::m_bControlWordsSorted;
-RTFTokenizer::RTFTokenizer(RTFDocumentImpl& rImport, SvStream* pInStream, uno::Reference<task::XStatusIndicator> const& xStatusIndicator)
+RTFTokenizer::RTFTokenizer(RTFListener& rImport, SvStream* pInStream, uno::Reference<task::XStatusIndicator> 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 <rtfdocumentimpl.hxx>
+#include <rtflistener.hxx>
+#include <com/sun/star/task/XStatusIndicator.hpp>
class SvStream;
@@ -20,7 +21,7 @@ namespace writerfilter {
class RTFTokenizer
{
public:
- RTFTokenizer(RTFDocumentImpl& rImport, SvStream* pInStream, uno::Reference<task::XStatusIndicator> const& xStatusIndicator);
+ RTFTokenizer(RTFListener& rImport, SvStream* pInStream, com::sun::star::uno::Reference<com::sun::star::task::XStatusIndicator> 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<task::XStatusIndicator> const& m_xStatusIndicator;
+ com::sun::star::uno::Reference<com::sun::star::task::XStatusIndicator> const& m_xStatusIndicator;
// This is the same as aRTFControlWords, but sorted
static std::vector<RTFSymbol> m_aRTFControlWords;
static bool m_bControlWordsSorted;