1 ///###////////////////////////////////////////////////////////////////////////
2 //
3 // Burton Computer Corporation
4 // http://www.burton-computer.com
5 // http://www.cooldevtools.com
6 // $Id: BodyParser.h 272 2007-01-06 19:37:27Z brian $
7 //
8 // Copyright (C) 2007 Burton Computer Corporation
9 // ALL RIGHTS RESERVED
10 //
11 // This program is open source software; you can redistribute it
12 // and/or modify it under the terms of the Q Public License (QPL)
13 // version 1.0. Use of this software in whole or in part, including
14 // linking it (modified or unmodified) into other programs is
15 // subject to the terms of the QPL.
16 //
17 // This program is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 // Q Public License for more details.
21 //
22 // You should have received a copy of the Q Public License
23 // along with this program; see the file LICENSE.txt.  If not, visit
24 // the Burton Computer Corporation or CoolDevTools web site
25 // QPL pages at:
26 //
27 //    http://www.burton-computer.com/qpl.html
28 //    http://www.cooldevtools.com/qpl.html
29 //
30 
31 #ifndef _BodyParser_h
32 #define _BodyParser_h
33 
34 #include "util.h"
35 
36 class MessageHeaderList;
37 class AbstractMultiLineString;
38 class MailMessageList;
39 
40 class BodyParser
41 {
42 public:
43   Ref<MailMessageList> parseBody(const MessageHeaderList *headers,
44                                     const CRef<AbstractMultiLineString> &body_text);
45 
46 private:
47   int skipToBlank(const CRef<AbstractMultiLineString> &lines,
48                   int &offset);
49   int skipToNonBlank(const CRef<AbstractMultiLineString> &lines,
50                      int &offset);
51   void addPart(const CRef<AbstractMultiLineString> &lines);
52   void addPartsForBoundary(const CRef<AbstractMultiLineString> &lines,
53                            const string &boundary);
54   void parse();
55 
56 private:
57   const MessageHeaderList *m_headers;
58   CRef<AbstractMultiLineString> m_bodyText;
59   Ref<MailMessageList> m_bodyParts;
60 };
61 
62 #endif
63