00001
00002
00003
00004
00005
00006
00007
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 }
00179
00180 #endif // __FHRAPHICS_H__
00181