summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/import/src/rtfMailDecoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/import/src/rtfMailDecoder.h')
-rw-r--r--comm/mailnews/import/src/rtfMailDecoder.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/comm/mailnews/import/src/rtfMailDecoder.h b/comm/mailnews/import/src/rtfMailDecoder.h
new file mode 100644
index 0000000000..7f4063c5ae
--- /dev/null
+++ b/comm/mailnews/import/src/rtfMailDecoder.h
@@ -0,0 +1,44 @@
+/* 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/. */
+
+#include "mozilla/Attributes.h"
+#include <string>
+#include "rtfDecoder.h"
+
+class CRTFMailDecoder : public CRTFDecoder {
+ public:
+ enum Mode { mNone, mText, mHTML };
+ CRTFMailDecoder() : m_mode(mNone), m_state(sNormal), m_skipLevel(0) {}
+ void BeginGroup() override;
+ void EndGroup() override;
+ void Keyword(const char* name, const int* Val) override;
+ void PCDATA(const wchar_t* data, size_t cch) override;
+ void BDATA(const char* data, size_t sz) override;
+ const wchar_t* text() { return m_text.c_str(); }
+ std::wstring::size_type textSize() { return m_text.size(); }
+ Mode mode() { return m_mode; }
+
+ private:
+ enum State {
+ sNormal = 0x0000,
+ sBeginGroup = 0x0001,
+ sAsterisk = 0x0002,
+ sHtmlRtf = 0x0004
+ };
+
+ std::wstring m_text;
+ Mode m_mode;
+ unsigned int m_state; // bitmask of State
+ // bool m_beginGroup; // true just after the {
+ // bool m_asterisk; // true just after the {\*
+ int m_skipLevel; // if >0 then we ignore everything
+ // bool m_htmlrtf;
+ inline void SetState(unsigned int s) { m_state |= s; }
+ inline void ClearState(unsigned int s) { m_state &= ~s; }
+ inline bool CheckState(State s) { return (m_state & s) != 0; }
+ inline bool IsAsterisk() { return CheckState(sAsterisk); }
+ inline bool IsBeginGroup() { return CheckState(sBeginGroup); }
+ inline bool IsHtmlRtf() { return CheckState(sHtmlRtf); }
+ void AddText(const wchar_t* txt, size_t cch = static_cast<size_t>(-1));
+};