Orcus
Loading...
Searching...
No Matches
shared_strings.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_SPREADSHEET_SHARED_STRINGS_HPP
9#define INCLUDED_ORCUS_SPREADSHEET_SHARED_STRINGS_HPP
10
11#include "orcus/spreadsheet/import_interface.hpp"
12#include "orcus/spreadsheet/styles.hpp"
13#include "orcus/env.hpp"
14
15#include <cstdlib>
16#include <vector>
17#include <unordered_map>
18
19namespace ixion { class model_context; }
20
21namespace orcus {
22
23class string_pool;
24
25namespace spreadsheet {
26
27class styles;
28
29struct ORCUS_SPM_DLLPUBLIC format_run
30{
31 size_t pos;
32 size_t size;
33 std::string_view font;
34 double font_size;
35 color_t color;
36 bool bold:1;
37 bool italic:1;
38
39 format_run();
40
41 void reset();
42 bool formatted() const;
43};
44
45typedef std::vector<format_run> format_runs_t;
46
50class ORCUS_SPM_DLLPUBLIC import_shared_strings : public iface::import_shared_strings
51{
52 using str_index_map_type = std::unordered_map<std::string_view, std::size_t>;
53
54public:
55 import_shared_strings() = delete;
57 import_shared_strings& operator=(const import_shared_strings&) = delete;
58
59 // format runs for all shared strings, mapped by string IDs.
60 typedef std::unordered_map<size_t, format_runs_t*> format_runs_map_type;
61
62 import_shared_strings(orcus::string_pool& sp, ixion::model_context& cxt, styles& styles);
63 virtual ~import_shared_strings() override;
64
65 virtual size_t append(std::string_view s) override;
66 virtual size_t add(std::string_view s) override;
67
68 virtual void set_segment_font(size_t font_index) override;
69 virtual void set_segment_bold(bool b) override;
70 virtual void set_segment_italic(bool b) override;
71 virtual void set_segment_font_name(std::string_view s) override;
72 virtual void set_segment_font_size(double point) override;
73 virtual void set_segment_font_color(color_elem_t alpha, color_elem_t red, color_elem_t green, color_elem_t blue) override;
74 virtual void append_segment(std::string_view s) override;
75 virtual size_t commit_segments() override;
76
77 const format_runs_t* get_format_runs(size_t index) const;
78
79 const std::string* get_string(size_t index) const;
80
81 void dump() const;
82
83private:
84 orcus::string_pool& m_string_pool;
85 ixion::model_context& m_cxt;
86 styles& m_styles;
87
92 format_runs_map_type m_formats;
93
94 ::std::string m_cur_segment_string;
95 format_run m_cur_format;
96 format_runs_t* mp_cur_format_runs;
97 str_index_map_type m_set;
98};
99
100}}
101
102#endif
103/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Definition: import_interface.hpp:31
Definition: shared_strings.hpp:51
virtual void set_segment_bold(bool b) override
virtual void set_segment_font_name(std::string_view s) override
virtual size_t append(std::string_view s) override
virtual void set_segment_italic(bool b) override
virtual void append_segment(std::string_view s) override
virtual size_t commit_segments() override
virtual size_t add(std::string_view s) override
virtual void set_segment_font(size_t font_index) override
virtual void set_segment_font_color(color_elem_t alpha, color_elem_t red, color_elem_t green, color_elem_t blue) override
virtual void set_segment_font_size(double point) override
Definition: styles.hpp:280
Definition: string_pool.hpp:23
Definition: styles.hpp:21
Definition: shared_strings.hpp:30