KEY2TableParser.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 libetonyek 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 KEY2TABLEPARSER_H_INCLUDED
00011 #define KEY2TABLEPARSER_H_INCLUDED
00012 
00013 #include "KEY2ParserUtils.h"
00014 #include "KEYTable.h"
00015 #include "KEYXMLReader.h"
00016 
00017 namespace libetonyek
00018 {
00019 
00020 class KEYCollector;
00021 class KEY2Parser;
00022 
00023 class KEY2TableParser : public KEY2ParserUtils
00024 {
00025 public:
00026   explicit KEY2TableParser(KEY2Parser &parser);
00027 
00028   void parse(const KEYXMLReader &reader);
00029 
00030 private:
00031   void parseTabularModel(const KEYXMLReader &reader);
00032   void parseGrid(const KEYXMLReader &reader);
00033   void parseColumns(const KEYXMLReader &reader);
00034   void parseGridColumn(const KEYXMLReader &reader);
00035   void parseRows(const KEYXMLReader &reader);
00036   void parseGridRow(const KEYXMLReader &reader);
00037 
00038   void parseDatasource(const KEYXMLReader &reader);
00039   void parseD(const KEYXMLReader &reader);
00040   void parseDu(const KEYXMLReader &reader);
00041   void parseF(const KEYXMLReader &reader);
00042   void parseG(const KEYXMLReader &reader);
00043   void parseN(const KEYXMLReader &reader);
00044   void parseS(const KEYXMLReader &reader);
00045   void parseT(const KEYXMLReader &reader);
00046   void parseCt(const KEYXMLReader &reader);
00047   void parseSo(const KEYXMLReader &reader);
00048 
00049   void parseCommonCellAttribute(const KEYXMLReader::AttributeIterator &attr);
00050 
00051   void emitCell(bool covered = false);
00052 
00053   KEYCollector *getCollector();
00054 
00055 private:
00056   KEY2Parser &m_parser;
00057   KEYTable::ColumnSizes_t m_columnSizes;
00058   KEYTable::RowSizes_t m_rowSizes;
00059 
00060   unsigned m_column;
00061   unsigned m_row;
00062 
00063   boost::optional<unsigned> m_columnSpan;
00064   boost::optional<unsigned> m_rowSpan;
00065   boost::optional<unsigned> m_cellMove;
00066   boost::optional<std::string> m_content;
00067 };
00068 
00069 }
00070 
00071 #endif //  KEY2TABLEPARSER_H_INCLUDED
00072 
00073 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */