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: */