libcrn  3.9.5
A document image processing library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CRNAlto.h
Go to the documentation of this file.
1 /* Copyright 2011-2016 CoReNum
2  *
3  * This file is part of libcrn.
4  *
5  * libcrn is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * libcrn is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with libcrn. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * file: CRNAlto.h
19  * \author Yann LEYDIER
20  */
21 
22 #ifndef CRNAlto_HEADER
23 #define CRNAlto_HEADER
24 
25 #include <CRNXml/CRNAltoUtils.h>
26 #include <CRNUtils/CRNOption.h>
27 #include <set>
28 #include <map>
29 
30 namespace crn
31 {
32  namespace xml
33  {
40  class Alto: public Document
41  {
42  public:
44  Alto(const Path &fname, bool char_conversion_throws = true);
46  Alto(const Path &imagename, const StringUTF8 &ns, const StringUTF8 &encoding = "UTF-8", const StringUTF8 &version = "1.0", bool char_conversion_throws = true);
47  Alto(const Alto&) = delete;
48  Alto(Alto&&) = default;
49  virtual ~Alto() override {}
50  Alto& operator=(const Alto&) = delete;
51  Alto& operator=(Alto&&) = default;
52 
53  class Description;
54  class Styles;
55  class Layout;
56  private:
58  class Root: public Element
59  {
60  public:
61  Root(const Root&) = delete;
62  Root(Root&&) = default;
63  virtual ~Root() override {}
64  Root& operator=(const Root&) = delete;
65  Root& operator=(Root&&) = default;
66 
67  Description& GetDescription() { return *description; }
68  const Description& GetDescription() const { return *description; }
69  Styles& GetStyles() { return *styles; }
70  const Styles& GetStyles() const { return *styles; }
71  Layout& GetLayout() { return *layout; }
72  const Layout& GetLayout() const { return *layout; }
73 
74  private:
76  Root(const Element &el);
78  Root(const Element &el, const Path &imagename, const StringUTF8 &ns);
80  void init(const StringUTF8 &imgname);
81 
82  std::unique_ptr<Description> description;
83  std::unique_ptr<Styles> styles;
84  std::unique_ptr<Layout> layout;
85 
86  friend class Alto;
87  };
88  public:
91  Description& GetDescription() { return root->GetDescription(); }
92  const Description& GetDescription() const { return root->GetDescription(); }
93 
94 #include <CRNXml/CRNAltoStyles.hpp>
96  Styles& GetStyles() { return root->GetStyles(); }
97  const Styles& GetStyles() const { return root->GetStyles(); }
98 
99 #include <CRNXml/CRNAltoLayout.hpp>
101  Layout& GetLayout() { return root->GetLayout(); }
102  const Layout& GetLayout() const { return root->GetLayout(); }
103 
104  Layout::Page& GetPage(const Id &id);
105  const Layout::Page& GetPage(const Id &id) const;
106  Layout::Page::Space& GetSpace(const Id &id);
107  const Layout::Page::Space& GetSpace(const Id &id) const;
108  Layout::Page::Space::Block& GetBlock(const Id &id);
109  const Layout::Page::Space::Block& GetBlock(const Id &id) const;
110  Layout::Page::Space::TextBlock& GetTextBlock(const Id &id);
111  const Layout::Page::Space::TextBlock& GetTextBlock(const Id &id) const;
112  Layout::Page::Space::TextBlock::TextLine& GetTextLine(const Id &id);
113  const Layout::Page::Space::TextBlock::TextLine& GetTextLine(const Id &id) const;
114  Layout::Page::Space::TextBlock::TextLine::Word& GetWord(const Id &id);
115  const Layout::Page::Space::TextBlock::TextLine::Word& GetWord(const Id &id) const;
116  Element& GetElement(const Id &id);
117  const Element& GetElement(const Id &id) const;
118 
120  Id CreateId();
122  bool CheckId(const Id &id) const;
123 
125  Id AddId(Element &el);
126 
127  private:
129  void register_ids();
130 
131  //std::vector<std::shared_ptr<Node> > nodes;
132  std::unique_ptr<Root> root;
133  std::set<Id> ids;
134  };
135 
136  using AltoDescription = Alto::Description;
137  using AltoStyles = Alto::Styles;
138  using AltoLayout = Alto::Layout;
139  using AltoPage = Alto::Layout::Page;
140  using AltoPagePtr = Alto::Layout::PagePtr;
141  using AltoSpace = Alto::Layout::Page::Space;
142  using AltoSpacePtr = Alto::Layout::Page::SpacePtr;
143  using AltoBlock = Alto::Layout::Page::Space::Block;
144  using AltoBlockPtr = Alto::Layout::Page::Space::BlockPtr;
145  using AltoTextBlock = Alto::Layout::Page::Space::TextBlock;
146  using AltoTextBlockPtr = Alto::Layout::Page::Space::TextBlockPtr;
147  using AltoIllustration = Alto::Layout::Page::Space::Illustration;
148  using AltoIllustrationPtr = Alto::Layout::Page::Space::IllustrationPtr;
149  using AltoGraphicalElement = Alto::Layout::Page::Space::GraphicalElement;
150  using AltoGraphicalElementPtr = Alto::Layout::Page::Space::GraphicalElementPtr;
151  using AltoComposedBlock = Alto::Layout::Page::Space::ComposedBlock;
152  using AltoComposedBlockPtr = Alto::Layout::Page::Space::ComposedBlockPtr;
153  using AltoTextLine = Alto::Layout::Page::Space::TextBlock::TextLine;
154  using AltoTextLinePtr = Alto::Layout::Page::Space::TextBlock::TextLinePtr;
155  using AltoTextLineElement = Alto::Layout::Page::Space::TextBlock::TextLine::LineElement;
156  using AltoTextLineElementPtr = Alto::Layout::Page::Space::TextBlock::TextLine::LineElementPtr;
157  using AltoWord = Alto::Layout::Page::Space::TextBlock::TextLine::Word;
158  using AltoWordPtr = Alto::Layout::Page::Space::TextBlock::TextLine::WordPtr;
159  using AltoWhiteSpace = Alto::Layout::Page::Space::TextBlock::TextLine::WhiteSpace;
160  using AltoWhiteSpacePtr = Alto::Layout::Page::Space::TextBlock::TextLine::WhiteSpacePtr;
161  using AltoHyphen = Alto::Layout::Page::Space::TextBlock::TextLine::Hyphen;
162  using AltoHyphenPtr = Alto::Layout::Page::Space::TextBlock::TextLine::HyphenPtr;
163 
165  }
166 }
167 
168 CRN_DECLARE_ENUM_OPERATORS(crn::xml::AltoStyles::Text::FontStyle)
169 
170 #endif
171 
XML Alto layout element.
Id CreateId()
Creates a new id for the document.
Definition: CRNAlto.cpp:591
Layout::Page::Space::TextBlock::TextLine & GetTextLine(const Id &id)
Definition: CRNAlto.cpp:255
Alto::Layout::Page::Space::GraphicalElementPtr AltoGraphicalElementPtr
Definition: CRNAlto.h:150
Alto::Layout AltoLayout
Definition: CRNAlto.h:138
Alto::Layout::Page::Space::TextBlock::TextLine::Hyphen AltoHyphen
Definition: CRNAlto.h:161
List of styles used in the document.
Styles & GetStyles()
Gets the styles description part of the Alto (may be null)
Definition: CRNAlto.h:96
const Styles & GetStyles() const
Definition: CRNAlto.h:97
Alto::Layout::Page::Space::TextBlockPtr AltoTextBlockPtr
Definition: CRNAlto.h:146
Alto::Layout::Page::Space::TextBlock::TextLine::WhiteSpacePtr AltoWhiteSpacePtr
Definition: CRNAlto.h:160
Alto::Layout::Page::Space::TextBlock::TextLine::WhiteSpace AltoWhiteSpace
Definition: CRNAlto.h:159
const Layout & GetLayout() const
Definition: CRNAlto.h:102
Alto::Layout::Page::Space::Block AltoBlock
Definition: CRNAlto.h:143
XML element.
Definition: CRNXml.h:135
XML Alto file wrapper.
Definition: CRNAlto.h:40
Alto::Layout::Page::Space::IllustrationPtr AltoIllustrationPtr
Definition: CRNAlto.h:148
XML document.
Definition: CRNXml.h:429
Alto::Layout::Page::Space::Illustration AltoIllustration
Definition: CRNAlto.h:147
Alto::Layout::Page AltoPage
Definition: CRNAlto.h:139
Layout::Page::Space::Block & GetBlock(const Id &id)
Definition: CRNAlto.cpp:145
Alto::Layout::Page::Space::TextBlock AltoTextBlock
Definition: CRNAlto.h:145
Alto::Layout::Page::Space::BlockPtr AltoBlockPtr
Definition: CRNAlto.h:144
Alto::Layout::Page::Space::TextBlock::TextLine::WordPtr AltoWordPtr
Definition: CRNAlto.h:158
XML Alto Page element.
Alto::Layout::Page::Space::ComposedBlock AltoComposedBlock
Definition: CRNAlto.h:151
bool CheckId(const Id &id) const
Checks if an id already exists in the document.
Definition: CRNAlto.cpp:611
A convenience class for file paths.
Definition: CRNPath.h:39
Alto::Layout::Page::Space::TextBlock::TextLine::HyphenPtr AltoHyphenPtr
Definition: CRNAlto.h:162
Id AddId(Element &el)
Adds an id to an element.
Definition: CRNAlto.cpp:622
const Description & GetDescription() const
Definition: CRNAlto.h:92
Alto::Layout::Page::Space::GraphicalElement AltoGraphicalElement
Definition: CRNAlto.h:149
Alto::Description AltoDescription
Definition: CRNAlto.h:136
Layout & GetLayout()
Gets the layout description part of the Alto.
Definition: CRNAlto.h:101
Layout::Page & GetPage(const Id &id)
Definition: CRNAlto.cpp:63
Alto::Layout::Page::Space::TextBlock::TextLine::Word AltoWord
Definition: CRNAlto.h:157
Alto::Layout::Page::Space AltoSpace
Definition: CRNAlto.h:141
virtual ~Alto() override
Definition: CRNAlto.h:49
Element & GetElement(const Id &id)
Definition: CRNAlto.cpp:407
Alto::Layout::Page::Space::TextBlock::TextLine::LineElement AltoTextLineElement
Definition: CRNAlto.h:155
Alto::Layout::Page::Space::ComposedBlockPtr AltoComposedBlockPtr
Definition: CRNAlto.h:152
Alto::Layout::Page::SpacePtr AltoSpacePtr
Definition: CRNAlto.h:142
Layout::Page::Space & GetSpace(const Id &id)
Definition: CRNAlto.cpp:99
#define CRN_DECLARE_ENUM_OPERATORS(Type)
Definition: CRNType.h:275
Alto global description.
CRN_ALIAS_SMART_PTR(ImageBW)
Alto::Styles AltoStyles
Definition: CRNAlto.h:137
A character string class.
Definition: CRNStringUTF8.h:49
Alto(const Path &fname, bool char_conversion_throws=true)
Constructor from a file.
Definition: CRNAlto.cpp:36
Alto::Layout::PagePtr AltoPagePtr
Definition: CRNAlto.h:140
Layout::Page::Space::TextBlock & GetTextBlock(const Id &id)
Definition: CRNAlto.cpp:197
Alto::Layout::Page::Space::TextBlock::TextLine::LineElementPtr AltoTextLineElementPtr
Definition: CRNAlto.h:156
Alto::Layout::Page::Space::TextBlock::TextLine AltoTextLine
Definition: CRNAlto.h:153
Alto & operator=(const Alto &)=delete
Alto::Layout::Page::Space::TextBlock::TextLinePtr AltoTextLinePtr
Definition: CRNAlto.h:154
Layout::Page::Space::TextBlock::TextLine::Word & GetWord(const Id &id)
Definition: CRNAlto.cpp:323
Description & GetDescription()
Gets the global description part of the Alto (may be null)
Definition: CRNAlto.h:91