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