1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libetonyek project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef IWATEXT_H_INCLUDED
11 #define IWATEXT_H_INCLUDED
12 
13 #include <functional>
14 #include <map>
15 #include <set>
16 #include <string>
17 
18 #include <librevenge/librevenge.h>
19 
20 #include "IWORKEnum.h"
21 #include "IWORKStyle_fwd.h"
22 
23 namespace libetonyek
24 {
25 
26 class IWORKLanguageManager;
27 class IWORKOutputElements;
28 class IWORKText;
29 
30 class IWAText
31 {
32 public:
33   IWAText(const std::string &text, IWORKLanguageManager &langManager);
34 
35   void setPageMasters(const std::map<unsigned, IWORKStylePtr_t> &pageMasters);
36   void setSections(const std::map<unsigned, IWORKStylePtr_t> &sections);
37   void setParagraphs(const std::map<unsigned, IWORKStylePtr_t> &paras);
38   void setSpans(const std::map<unsigned, IWORKStylePtr_t> &spans);
39 
40   void setLanguages(const std::map<unsigned, std::string> &langs);
41   void setLinks(const std::map<unsigned, std::string> &links);
42   void setListLevels(const std::map<unsigned, unsigned> &levels);
43   void setLists(const std::map<unsigned, IWORKStylePtr_t> &lists);
44 
45   void setAttachments(const std::multimap<unsigned, std::function<void(unsigned, bool &)> > &attachments);
46 
47   void parse(IWORKText &collector, const std::function<void(unsigned, IWORKStylePtr_t)> &openPageSpan=nullptr);
48 
49 private:
50   const librevenge::RVNGString m_text;
51   IWORKLanguageManager &m_langManager;
52 
53   std::map<unsigned, IWORKStylePtr_t> m_pageMasters;
54   std::map<unsigned, IWORKStylePtr_t> m_sections;
55   std::map<unsigned, IWORKStylePtr_t> m_paras;
56   std::map<unsigned, IWORKStylePtr_t> m_spans;
57 
58   std::map<unsigned, std::string> m_langs;
59   std::map<unsigned, std::string> m_links;
60   std::map<unsigned, IWORKStylePtr_t> m_lists;
61   std::map<unsigned, unsigned> m_listLevels;
62 
63   std::multimap<unsigned, std::function<void(unsigned, bool &)> > m_attachments;
64 };
65 
66 }
67 
68 #endif
69 
70 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
71