summaryrefslogtreecommitdiffstats
path: root/include/orcus/spreadsheet/factory.hpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:48:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:48:59 +0000
commitc484829272cd13a738e35412498e12f2c9a194ac (patch)
treea1f5ec09629ee895bd3963fa8820b45f2f4c574b /include/orcus/spreadsheet/factory.hpp
parentInitial commit. (diff)
downloadliborcus-upstream.tar.xz
liborcus-upstream.zip
Adding upstream version 0.19.2.upstream/0.19.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'include/orcus/spreadsheet/factory.hpp')
-rw-r--r--include/orcus/spreadsheet/factory.hpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/include/orcus/spreadsheet/factory.hpp b/include/orcus/spreadsheet/factory.hpp
new file mode 100644
index 0000000..e1423fa
--- /dev/null
+++ b/include/orcus/spreadsheet/factory.hpp
@@ -0,0 +1,143 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_ORCUS_SPREADSHEET_IMPORT_FACTORY_HPP
+#define INCLUDED_ORCUS_SPREADSHEET_IMPORT_FACTORY_HPP
+
+#include <orcus/spreadsheet/import_interface.hpp>
+#include <orcus/spreadsheet/import_interface_styles.hpp>
+#include <orcus/spreadsheet/export_interface.hpp>
+#include <orcus/env.hpp>
+
+#include <memory>
+
+namespace orcus {
+
+class string_pool;
+
+namespace spreadsheet {
+
+class document;
+class view;
+class styles;
+
+struct ORCUS_SPM_DLLPUBLIC import_factory_config
+{
+ /**
+ * When the font cache is enabled, the import factory checks each incoming
+ * font entry against the pool of existing font entries and insert it only
+ * when an equal entry doesn't already exist in the pool.
+ *
+ * @note It should not be enabled for a file format that already has
+ * font entries normalized, such as xlsx.
+ */
+ bool enable_font_cache = true;
+
+ import_factory_config();
+ import_factory_config(const import_factory_config& other);
+ ~import_factory_config();
+
+ import_factory_config& operator=(const import_factory_config& other);
+};
+
+/**
+ * Wraps @ref document and @ref view stores. This is to be used by the import
+ * filter to populate the document and view stores.
+ */
+class ORCUS_SPM_DLLPUBLIC import_factory : public iface::import_factory
+{
+ struct impl;
+ std::unique_ptr<impl> mp_impl;
+public:
+ import_factory(document& doc);
+ import_factory(document& doc, view& view_store);
+ virtual ~import_factory();
+
+ virtual iface::import_global_settings* get_global_settings() override;
+ virtual iface::import_shared_strings* get_shared_strings() override;
+ virtual iface::import_styles* get_styles() override;
+ virtual iface::import_named_expression* get_named_expression() override;
+ virtual iface::import_reference_resolver* get_reference_resolver(formula_ref_context_t cxt) override;
+ virtual iface::import_pivot_cache_definition* create_pivot_cache_definition(
+ orcus::spreadsheet::pivot_cache_id_t cache_id) override;
+ virtual iface::import_pivot_cache_records* create_pivot_cache_records(
+ orcus::spreadsheet::pivot_cache_id_t cache_id) override;
+ virtual iface::import_sheet* append_sheet(sheet_t sheet_index, std::string_view name) override;
+ virtual iface::import_sheet* get_sheet(std::string_view name) override;
+ virtual iface::import_sheet* get_sheet(sheet_t sheet_index) override;
+ virtual void finalize() override;
+
+ void set_config(const import_factory_config& config);
+
+ void set_default_row_size(row_t row_size);
+ void set_default_column_size(col_t col_size);
+
+ void set_character_set(character_set_t charset);
+ character_set_t get_character_set() const;
+
+ /**
+ * When setting this flag to true, those formula cells with no cached
+ * results will be re-calculated upon loading.
+ *
+ *
+ * @param b value of this flag.
+ */
+ void set_recalc_formula_cells(bool b);
+
+ void set_formula_error_policy(formula_error_policy_t policy);
+};
+
+/**
+ * Wraps @ref styles store. This is to be used by an import styles parser to
+ * populate the styles store.
+ */
+class ORCUS_SPM_DLLPUBLIC import_styles : public iface::import_styles
+{
+ struct impl;
+ std::unique_ptr<impl> mp_impl;
+public:
+ import_styles(styles& styles_store, string_pool& sp);
+ import_styles(std::shared_ptr<import_factory_config> config, styles& styles_store, string_pool& sp);
+ virtual ~import_styles() override;
+
+ virtual iface::import_font_style* start_font_style() override;
+ virtual iface::import_fill_style* start_fill_style() override;
+ virtual iface::import_border_style* start_border_style() override;
+ virtual iface::import_cell_protection* start_cell_protection() override;
+ virtual iface::import_number_format* start_number_format() override;
+ virtual iface::import_xf* start_xf(xf_category_t cat) override;
+ virtual iface::import_cell_style* start_cell_style() override;
+
+ virtual void set_font_count(size_t n) override;
+ virtual void set_fill_count(size_t n) override;
+ virtual void set_border_count(size_t n) override;
+ virtual void set_number_format_count(size_t n) override;
+ virtual void set_xf_count(xf_category_t cat, size_t n) override;
+ virtual void set_cell_style_count(size_t n) override;
+};
+
+/**
+ * Wraps @ref document store and faciliates export of its content.
+ *
+ * @warning It currently provides very limited functionality especially when
+ * compared to that of the @ref import_factory.
+ */
+class ORCUS_SPM_DLLPUBLIC export_factory : public iface::export_factory
+{
+ struct impl;
+ std::unique_ptr<impl> mp_impl;
+public:
+ export_factory(const document& doc);
+ virtual ~export_factory();
+
+ virtual const iface::export_sheet* get_sheet(std::string_view sheet_name) const override;
+};
+
+}}
+
+#endif
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */