FHParser.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /*
00003  * This file is part of the libfreehand project.
00004  *
00005  * This Source Code Form is subject to the terms of the Mozilla Public
00006  * License, v. 2.0. If a copy of the MPL was not distributed with this
00007  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
00008  */
00009 
00010 #ifndef __FHPARSER_H__
00011 #define __FHPARSER_H__
00012 
00013 #include <map>
00014 #include <vector>
00015 #include <libwpd/libwpd.h>
00016 #include <libwpg/libwpg.h>
00017 #include "FHTypes.h"
00018 
00019 #define FH_PAGE_START_X 0x1c24
00020 #define FH_PAGE_START_Y 0x1c2c
00021 #define FH_PAGE_WIDTH 0x1c34
00022 #define FH_PAGE_HEIGHT 0x1c3c
00023 
00024 class WPXInputStream;
00025 
00026 namespace libfreehand
00027 {
00028 class FHCollector;
00029 
00030 class FHParser
00031 {
00032 public:
00033   explicit FHParser();
00034   virtual ~FHParser();
00035   bool parse(WPXInputStream *input, libwpg::WPGPaintInterface *painter);
00036 private:
00037   FHParser(const FHParser &);
00038   FHParser &operator=(const FHParser &);
00039 
00040   void parseDictionary(WPXInputStream *input);
00041   void parseRecordList(WPXInputStream *input);
00042   void parseRecord(WPXInputStream *input, FHCollector *collector, int recordId);
00043   void parseRecords(WPXInputStream *input, FHCollector *collector = 0);
00044   void parseDocument(WPXInputStream *input, FHCollector *collector);
00045 
00046   void readAGDFont(WPXInputStream *input, FHCollector *collector);
00047   void readAGDSelection(WPXInputStream *input, FHCollector *collector);
00048   void readArrowPath(WPXInputStream *input, FHCollector *collector);
00049   void readAttributeHolder(WPXInputStream *input, FHCollector *collector);
00050   void readBasicFill(WPXInputStream *input, FHCollector *collector);
00051   void readBasicLine(WPXInputStream *input, FHCollector *collector);
00052   void readBendFilter(WPXInputStream *input, FHCollector *collector);
00053   void readBlock(WPXInputStream *input, FHCollector *collector);
00054   void readBrushList(WPXInputStream *input, FHCollector *collector);
00055   void readBrush(WPXInputStream *input, FHCollector *collector);
00056   void readBrushStroke(WPXInputStream *input, FHCollector *collector);
00057   void readBrushTip(WPXInputStream *input, FHCollector *collector);
00058   void readCalligraphicStroke(WPXInputStream *input, FHCollector *collector);
00059   void readCharacterFill(WPXInputStream *input, FHCollector *collector);
00060   void readClipGroup(WPXInputStream *input, FHCollector *collector);
00061   void readCollector(WPXInputStream *input, FHCollector *collector);
00062   void readColor6(WPXInputStream *input, FHCollector *collector);
00063   void readCompositePath(WPXInputStream *input, FHCollector *collector);
00064   void readConeFill(WPXInputStream *input, FHCollector *collector);
00065   void readConnectorLine(WPXInputStream *input, FHCollector *collector);
00066   void readContentFill(WPXInputStream *input, FHCollector *collector);
00067   void readContourFill(WPXInputStream *input, FHCollector *collector);
00068   void readCustomProc(WPXInputStream *input, FHCollector *collector);
00069   void readDataList(WPXInputStream *input, FHCollector *collector);
00070   void readData(WPXInputStream *input, FHCollector *collector);
00071   void readDateTime(WPXInputStream *input, FHCollector *collector);
00072   void readDuetFilter(WPXInputStream *input, FHCollector *collector);
00073   void readElement(WPXInputStream *input, FHCollector *collector);
00074   void readElemList(WPXInputStream *input, FHCollector *collector);
00075   void readElemPropLst(WPXInputStream *input, FHCollector *collector);
00076   void readEnvelope(WPXInputStream *input, FHCollector *collector);
00077   void readExpandFilter(WPXInputStream *input, FHCollector *collector);
00078   void readExtrusion(WPXInputStream *input, FHCollector *collector);
00079   void readFHDocHeader(WPXInputStream *input, FHCollector *collector);
00080   void readFHTail(WPXInputStream *input, FHCollector *collector);
00081   void readFigure(WPXInputStream *input, FHCollector *collector);
00082   void readFileDescriptor(WPXInputStream *input, FHCollector *collector);
00083   void readFilterAttributeHolder(WPXInputStream *input, FHCollector *collector);
00084   void readFWBevelFilter(WPXInputStream *input, FHCollector *collector);
00085   void readFWBlurFilter(WPXInputStream *input, FHCollector *collector);
00086   void readFWFeatherFilter(WPXInputStream *input, FHCollector *collector);
00087   void readFWGlowFilter(WPXInputStream *input, FHCollector *collector);
00088   void readFWShadowFilter(WPXInputStream *input, FHCollector *collector);
00089   void readFWSharpenFilter(WPXInputStream *input, FHCollector *collector);
00090   void readGradientMaskFilter(WPXInputStream *input, FHCollector *collector);
00091   void readGraphicStyle(WPXInputStream *input, FHCollector *collector);
00092   void readGroup(WPXInputStream *input, FHCollector *collector);
00093   void readGuides(WPXInputStream *input, FHCollector *collector);
00094   void readHalftone(WPXInputStream *input, FHCollector *collector);
00095   void readImageFill(WPXInputStream *input, FHCollector *collector);
00096   void readImageImport(WPXInputStream *input, FHCollector *collector);
00097   void readLayer(WPXInputStream *input, FHCollector *collector);
00098   void readLensFill(WPXInputStream *input, FHCollector *collector);
00099   void readLinearFill(WPXInputStream *input, FHCollector *collector);
00100   void readLinePat(WPXInputStream *input, FHCollector *collector);
00101   void readLineTable(WPXInputStream *input, FHCollector *collector);
00102   void readList(WPXInputStream *input, FHCollector *collector);
00103   void readMasterPageDocMan(WPXInputStream *input, FHCollector *collector);
00104   void readMasterPageElement(WPXInputStream *input, FHCollector *collector);
00105   void readMasterPageLayerElement(WPXInputStream *input, FHCollector *collector);
00106   void readMasterPageLayerInstance(WPXInputStream *input, FHCollector *collector);
00107   void readMasterPageSymbolClass(WPXInputStream *input, FHCollector *collector);
00108   void readMasterPageSymbolInstance(WPXInputStream *input, FHCollector *collector);
00109   void readMDict(WPXInputStream *input, FHCollector *collector);
00110   void readMList(WPXInputStream *input, FHCollector *collector);
00111   void readMName(WPXInputStream *input, FHCollector *collector);
00112   void readMpObject(WPXInputStream *input, FHCollector *collector);
00113   void readMQuickDict(WPXInputStream *input, FHCollector *collector);
00114   void readMString(WPXInputStream *input, FHCollector *collector);
00115   void readMultiBlend(WPXInputStream *input, FHCollector *collector);
00116   void readMultiColorList(WPXInputStream *input, FHCollector *collector);
00117   void readNewBlend(WPXInputStream *input, FHCollector *collector);
00118   void readNewContourFill(WPXInputStream *input, FHCollector *collector);
00119   void readNewRadialFill(WPXInputStream *input, FHCollector *collector);
00120   void readOpacityFilter(WPXInputStream *input, FHCollector *collector);
00121   void readOval(WPXInputStream *input, FHCollector *collector);
00122   void readParagraph(WPXInputStream *input, FHCollector *collector);
00123   void readPath(WPXInputStream *input, FHCollector *collector);
00124   void readPathTextLineInfo(WPXInputStream *input, FHCollector *collector);
00125   void readPatternFill(WPXInputStream *input, FHCollector *collector);
00126   void readPatternLine(WPXInputStream *input, FHCollector *collector);
00127   void readPerspectiveEnvelope(WPXInputStream *input, FHCollector *collector);
00128   void readPerspectiveGrid(WPXInputStream *input, FHCollector *collector);
00129   void readPolygonFigure(WPXInputStream *input, FHCollector *collector);
00130   void readProcedure(WPXInputStream *input, FHCollector *collector);
00131   void readPropLst(WPXInputStream *input, FHCollector *collector);
00132   void readPSLine(WPXInputStream *input, FHCollector *collector);
00133   void readRadialFill(WPXInputStream *input, FHCollector *collector);
00134   void readRadialFillX(WPXInputStream *input, FHCollector *collector);
00135   void readRaggedFilter(WPXInputStream *input, FHCollector *collector);
00136   void readRectangle(WPXInputStream *input, FHCollector *collector);
00137   void readSketchFilter(WPXInputStream *input, FHCollector *collector);
00138   void readSpotColor(WPXInputStream *input, FHCollector *collector);
00139   void readSpotColor6(WPXInputStream *input, FHCollector *collector);
00140   void readStylePropLst(WPXInputStream *input, FHCollector *collector);
00141   void readSwfImport(WPXInputStream *input, FHCollector *collector);
00142   void readSymbolClass(WPXInputStream *input, FHCollector *collector);
00143   void readSymbolInstance(WPXInputStream *input, FHCollector *collector);
00144   void readSymbolLibrary(WPXInputStream *input, FHCollector *collector);
00145   void readTabTable(WPXInputStream *input, FHCollector *collector);
00146   void readTaperedFill(WPXInputStream *input, FHCollector *collector);
00147   void readTaperedFillX(WPXInputStream *input, FHCollector *collector);
00148   void readTEffect(WPXInputStream *input, FHCollector *collector);
00149   void readTextBlok(WPXInputStream *input, FHCollector *collector);
00150   void readTextColumn(WPXInputStream *input, FHCollector *collector);
00151   void readTextInPath(WPXInputStream *input, FHCollector *collector);
00152   void readTFOnPath(WPXInputStream *input, FHCollector *collector);
00153   void readTileFill(WPXInputStream *input, FHCollector *collector);
00154   void readTintColor(WPXInputStream *input, FHCollector *collector);
00155   void readTintColor6(WPXInputStream *input, FHCollector *collector);
00156   void readTransformFilter(WPXInputStream *input, FHCollector *collector);
00157   void readTString(WPXInputStream *input, FHCollector *collector);
00158   void readUString(WPXInputStream *input, FHCollector *collector);
00159   void readVDict(WPXInputStream *input, FHCollector *collector);
00160   void readVMpObj(WPXInputStream *input, FHCollector *collector);
00161   void readXform(WPXInputStream *input, FHCollector *collector);
00162 
00163   unsigned _readRecordId(WPXInputStream *input);
00164 
00165   unsigned _xformCalc(unsigned char var1, unsigned char var2);
00166 
00167   double _readCoordinate(WPXInputStream *input);
00168 
00169   WPXInputStream *m_input;
00170   FHCollector *m_collector;
00171   int m_version;
00172   std::map<unsigned short, int> m_dictionary;
00173   std::vector<unsigned short> m_records;
00174   std::vector<unsigned short>::size_type m_currentRecord;
00175   std::vector<long> m_offsets;
00176   long m_fhTailOffset;
00177   FHPageInfo m_pageInfo;
00178 };
00179 
00180 } // namespace libfreehand
00181 
00182 #endif //  __FHRAPHICS_H__
00183 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */