MSPUBParser97.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* libmspub
00003  * Version: MPL 1.1 / GPLv2+ / LGPLv2+
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License or as specified alternatively below. You may obtain a copy of
00008  * the License at http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * Major Contributor(s):
00016  * Copyright (C) 2012 Brennan Vincent <brennanv@email.arizona.edu>
00017  *
00018  * All Rights Reserved.
00019  *
00020  * For minor contributions see the git repository.
00021  *
00022  * Alternatively, the contents of this file may be used under the terms of
00023  * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
00024  * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
00025  * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
00026  * instead of those above.
00027  */
00028 
00029 #ifndef __MSPUBPARSER97_H__
00030 #define __MSPUBPARSER97_H__
00031 
00032 #include "MSPUBParser2k.h"
00033 
00034 namespace libmspub
00035 {
00036 class MSPUBParser97 : public MSPUBParser2k
00037 {
00038   struct TextInfo97
00039   {
00040     std::vector<unsigned char> m_chars;
00041     std::vector<unsigned> m_paragraphEnds;
00042     std::vector<unsigned> m_shapeEnds;
00043     TextInfo97(const std::vector<unsigned char> &chars,
00044                const std::vector<unsigned> &paragraphEnds,
00045                const std::vector<unsigned> &shapeEnds)
00046       : m_chars(chars), m_paragraphEnds(paragraphEnds),
00047         m_shapeEnds(shapeEnds)
00048     {
00049     }
00050   };
00051 
00052   struct SpanInfo97
00053   {
00054     unsigned m_spanEnd;
00055     CharacterStyle m_style;
00056     SpanInfo97(unsigned spanEnd, const CharacterStyle &style)
00057       : m_spanEnd(spanEnd), m_style(style)
00058     {
00059     }
00060   };
00061 
00062   bool m_isBanner;
00063 
00064   bool parseDocument(WPXInputStream *input);
00065   int translateCoordinateIfNecessary(int coordinate) const;
00066   unsigned getFirstLineOffset() const;
00067   unsigned getSecondLineOffset() const;
00068   unsigned getShapeFillTypeOffset() const;
00069   unsigned getShapeFillColorOffset() const;
00070   unsigned short getTextMarker() const;
00071   unsigned getTextIdOffset() const;
00072   CharacterStyle readCharacterStyle(WPXInputStream *input,
00073                                     unsigned length);
00074   void parseContentsTextIfNecessary(WPXInputStream *input);
00075   std::vector<SpanInfo97> getSpansInfo(WPXInputStream *input,
00076                                        unsigned prop1Index, unsigned prop2Index, unsigned prop3Index,
00077                                        unsigned prop3End);
00078   TextInfo97 getTextInfo(WPXInputStream *input, unsigned length);
00079 public:
00080   MSPUBParser97(WPXInputStream *input, MSPUBCollector *collector);
00081   bool parse();
00082 };
00083 }
00084 
00085 #endif //  __MSPUBPARSER97_H__
00086 
00087 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */