Orcus
Loading...
Searching...
No Matches
orcus_ods.hpp
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 */
7
8#ifndef INCLUDED_ORCUS_ORCUS_ODS_HPP
9#define INCLUDED_ORCUS_ORCUS_ODS_HPP
10
11#include "orcus/spreadsheet/import_interface.hpp"
12#include "orcus/env.hpp"
13#include "interface.hpp"
14
15#include <memory>
16
17namespace orcus {
18
19namespace spreadsheet { namespace iface { class import_factory; }}
20
21struct orcus_ods_impl;
22class zip_archive;
23class zip_archive_stream;
24
25class ORCUS_DLLPUBLIC orcus_ods : public iface::import_filter
26{
27 orcus_ods(const orcus_ods&); // disabled
28 orcus_ods& operator= (const orcus_ods&); // disabled
29
30public:
32 ~orcus_ods();
33
34 static bool detect(const unsigned char* blob, size_t size);
35
36 virtual void read_file(const std::string& filepath) override;
37
38 virtual void read_stream(std::string_view stream) override;
39
40 virtual std::string_view get_name() const override;
41
42private:
43 static void list_content(const zip_archive& archive);
44 void read_content(const zip_archive& archive);
45 void read_content_xml(const unsigned char* p, size_t size);
46
47 void read_file_impl(zip_archive_stream* stream);
48
49private:
50 struct impl;
51 std::unique_ptr<impl> mp_impl;
52};
53
54}
55
56#endif
57/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Definition interface.hpp:24
Definition orcus_ods.hpp:26
virtual void read_file(const std::string &filepath) override
expects a system path to a local file
virtual void read_stream(std::string_view stream) override
expects the whole content of the file
Definition import_interface.hpp:898
Definition zip_archive_stream.hpp:19
Definition zip_archive.hpp:35