Orcus
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 
19 namespace ixion { class model_context; }
20 
21 namespace orcus {
22 
23 class string_pool;
24 
25 namespace spreadsheet {
26 
27 class styles;
28 
29 struct 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 
45 typedef std::vector<format_run> format_runs_t;
46 
50 class 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 
54 public:
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 
83 private:
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