1 /** @file xslxparse.h 2 * @brief Extract fields from XLSX sheet*.xml. 3 */ 4 /* Copyright (C) 2012,2013 Olly Betts 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef OMEGA_INCLUDED_XLSXPARSE_H 22 #define OMEGA_INCLUDED_XLSXPARSE_H 23 24 #include "htmlparse.h" 25 26 #include <vector> 27 #include <set> 28 29 class XlsxParser : public HtmlParser { 30 std::vector<std::string> sst; 31 std::set<unsigned> date_style; 32 std::set<unsigned long> date_format; 33 34 enum { 35 MODE_NONE, 36 MODE_SI, 37 MODE_C_STRING, 38 MODE_V_STRING, 39 MODE_C_LITERAL, 40 MODE_V_LITERAL, 41 MODE_C_DATE, 42 MODE_V_DATE, 43 MODE_CELLXFS 44 } mode; 45 46 bool date1904; 47 unsigned style_index; 48 append_field(const std::string & text)49 void append_field(const std::string &text) { 50 if (!text.empty()) { 51 if (!dump.empty()) dump += ' '; 52 dump += text; 53 } 54 } 55 56 public: 57 std::string dump; 58 XlsxParser()59 XlsxParser() 60 : HtmlParser(), mode(MODE_NONE), date1904(false), style_index(0) { } 61 bool opening_tag(const std::string &tag); 62 void process_text(const std::string &text); 63 }; 64 65 #endif // OMEGA_INCLUDED_XLSXPARSE_H 66