27 #ifndef SCRIBO_CORE_DOCUMENT_HH
28 # define SCRIBO_CORE_DOCUMENT_HH
34 # include <mln/core/image/image2d.hh>
35 # include <mln/core/alias/neighb2d.hh>
36 # include <mln/value/rgb8.hh>
38 # ifndef SCRIBO_NMAGICK
39 # include <mln/io/magick/load.hh>
40 # endif // ! SCRIBO_NMAGICK
42 # include <scribo/core/component_set.hh>
43 # include <scribo/core/line_set.hh>
44 # include <scribo/core/paragraph_set.hh>
46 # include <scribo/core/concept/serializable.hh>
48 # include <scribo/primitive/extract/components.hh>
64 std::string filename_;
105 # ifndef SCRIBO_NMAGICK
107 # endif // ! SCRIBO_NMAGICK
108 bool is_open()
const;
110 const char * filename()
const;
111 void set_filename(
const char*name);
113 bool is_valid()
const;
131 bool has_elements()
const;
135 bool has_whitespace_seps()
const;
138 void set_whitespace_separators(
const image2d<bool>& whitespace_seps,
142 bool has_hline_seps()
const;
151 bool has_vline_seps()
const;
174 template <
typename L>
178 # ifndef MLN_INCLUDE_ONLY
183 template <
typename L>
184 document_data<L>::document_data()
188 template <
typename L>
189 document_data<L>::document_data(
const char *
filename,
191 : filename_(filename),
196 template <
typename L>
197 document_data<L>::document_data(
const char *
filename)
198 : filename_(filename)
207 template <
typename L>
208 document<L>::document()
214 template <
typename L>
215 document<L>::document(
const char *
filename)
217 data_ =
new internal::document_data<L>(
filename);
221 template <
typename L>
222 document<L>::document(
const char *
filename,
225 data_ =
new internal::document_data<L>(
filename, input);
229 template <
typename L>
233 mln_precondition(data_ != 0);
234 return data_->filename_.c_str();
238 template <
typename L>
240 document<L>::set_filename(
const char *
filename)
242 mln_precondition(is_valid());
247 # ifndef SCRIBO_NMAGICK
248 template <
typename L>
252 mln_precondition(data_ != 0);
255 # endif // ! SCRIBO_NMAGICK
258 template <
typename L>
260 document<L>::is_open()
const
262 mln_precondition(data_ != 0);
263 return data_->image_.is_valid();
267 template <
typename L>
269 document<L>::is_valid()
const
271 return data_ != 0 && data_->image_.is_valid();
275 template <
typename L>
277 document<L>::width()
const
279 mln_precondition(is_valid());
280 mln_precondition(data_->image_.is_valid());
281 return data_->image_.ncols();
285 template <
typename L>
289 mln_precondition(is_valid());
290 mln_precondition(data_->image_.is_valid());
291 return data_->image_.nrows();
295 template <
typename L>
299 mln_precondition(is_valid());
300 return data_->parset_.is_valid();
304 template <
typename L>
306 document<L>::lines()
const
308 mln_precondition(is_valid());
309 mln_precondition(data_->parset_.is_valid());
310 return data_->parset_.lines();
313 template <
typename L>
314 const paragraph_set<L>&
315 document<L>::paragraphs()
const
317 mln_precondition(is_valid());
318 return data_->parset_;
322 template <
typename L>
324 document<L>::set_paragraphs(
const paragraph_set<L>& parset)
326 mln_precondition(is_valid());
327 mln_precondition(parset.is_valid());
328 data_->parset_ = parset;
332 template <
typename L>
333 const component_set<L>&
334 document<L>::elements()
const
336 mln_precondition(is_valid());
337 return data_->elements_;
341 template <
typename L>
343 document<L>::has_elements()
const
345 mln_precondition(is_valid());
346 return data_->elements_.is_valid();
350 template <
typename L>
352 document<L>::set_elements(
const component_set<L>& elements)
354 mln_precondition(is_valid());
355 mln_precondition(elements.is_valid());
356 data_->elements_ = elements;
359 template <
typename L>
361 document<L>::has_whitespace_seps()
const
363 mln_precondition(is_valid());
364 return data_->whitespace_seps_.is_valid();
368 template <
typename L>
370 document<L>::whitespace_seps()
const
372 mln_precondition(is_valid());
373 return data_->whitespace_seps_;
377 template <
typename L>
378 const component_set<L>&
379 document<L>::whitespace_seps_comps()
const
381 mln_precondition(is_valid());
382 return data_->whitespace_seps_comps_;
386 template <
typename L>
388 document<L>::set_whitespace_separators(
const image2d<bool>& whitespace_seps,
389 const component_set<L>& whitespace_seps_comps)
391 mln_precondition(is_valid());
392 mln_precondition(whitespace_seps.
is_valid());
393 mln_precondition(whitespace_seps_comps.is_valid());
394 data_->whitespace_seps_ = whitespace_seps;
395 data_->whitespace_seps_comps_ = whitespace_seps_comps;
399 template <
typename L>
401 document<L>::has_hline_seps()
const
403 mln_precondition(is_valid());
404 return data_->hline_seps_.is_valid();
408 template <
typename L>
410 document<L>::hline_seps()
const
412 mln_precondition(is_valid());
413 return data_->hline_seps_;
417 template <
typename L>
418 const component_set<L>&
419 document<L>::hline_seps_comps()
const
421 mln_precondition(is_valid());
422 return data_->hline_seps_comps_;
426 template <
typename L>
428 document<L>::set_hline_separators(
const image2d<bool>& hline_seps)
430 mln_precondition(is_valid());
431 mln_precondition(hline_seps.
is_valid());
432 data_->hline_seps_ = hline_seps;
435 data_->hline_seps_comps_ = primitive::extract::
components(
438 component::HorizontalLineSeparator);
442 template <typename L>
444 document<L>::set_hline_separators(const
image2d<
bool>& hline_seps,
445 const component_set<L>& hline_seps_comps)
447 mln_precondition(is_valid());
448 mln_precondition(hline_seps.is_valid());
449 mln_precondition(hline_seps_comps.is_valid());
450 data_->hline_seps_ = hline_seps;
451 data_->hline_seps_comps_ = hline_seps_comps;
455 template <
typename L>
457 document<L>::has_vline_seps()
const
459 mln_precondition(is_valid());
460 return data_->vline_seps_.is_valid();
464 template <
typename L>
466 document<L>::vline_seps()
const
468 mln_precondition(is_valid());
469 return data_->vline_seps_;
473 template <
typename L>
474 const component_set<L>&
475 document<L>::vline_seps_comps()
const
477 mln_precondition(is_valid());
478 return data_->vline_seps_comps_;
482 template <
typename L>
484 document<L>::set_vline_separators(
const image2d<bool>& vline_seps)
486 mln_precondition(is_valid());
487 mln_precondition(vline_seps.
is_valid());
488 data_->vline_seps_ = vline_seps;
491 data_->vline_seps_comps_ = primitive::extract::
components(
494 component::VerticalLineSeparator);
498 template <typename L>
500 document<L>::set_vline_separators(const
image2d<
bool>& vline_seps,
501 const component_set<L>& vline_seps_comps)
503 mln_precondition(is_valid());
504 mln_precondition(vline_seps.is_valid());
505 mln_precondition(vline_seps_comps.is_valid());
506 data_->vline_seps_ = vline_seps;
507 data_->vline_seps_comps_ = vline_seps_comps;
511 template <
typename L>
513 document<L>::image()
const
515 mln_precondition(is_valid());
516 return data_->image_;
520 template <
typename L>
524 mln_precondition(data_ != 0);
526 data_->image_ = image;
530 template <
typename L>
532 document<L>::binary_image()
const
534 mln_precondition(is_valid());
535 return data_->binary_image_;
539 template <
typename L>
543 mln_precondition(is_valid());
544 mln_precondition(binary_image.
is_valid());
545 data_->binary_image_ = binary_image;
549 template <
typename L>
551 document<L>::binary_image_wo_seps()
const
553 mln_precondition(is_valid());
554 return data_->binary_image_wo_seps_;
558 template <
typename L>
560 document<L>::set_binary_image_wo_seps(
563 mln_precondition(is_valid());
564 mln_precondition(binary_image_wo_seps.
is_valid());
565 data_->binary_image_wo_seps_ = binary_image_wo_seps;
569 template <
typename L>
570 bool operator==(
const document<L>& lhs,
const document<L>& rhs)
575 lhs.filename() == rhs.filename()
576 && lhs.image() == rhs.image()
577 && lhs.binary_image() == rhs.binary_image()
578 && lhs.has_text() == rhs.has_text()
579 && lhs.paragraphs() == rhs.paragraphs()
580 && lhs.has_elements() == rhs.has_elements()
581 && lhs.elements() == rhs.elements()
582 && lhs.has_whitespace_seps() == rhs.has_whitespace_seps()
583 && lhs.whitespace_seps() == rhs.whitespace_seps()
584 && lhs.whitespace_seps_comps() == rhs.whitespace_seps_comps()
585 && lhs.has_hline_seps() == rhs.has_hline_seps()
586 && lhs.hline_seps() == rhs.hline_seps()
587 && lhs.hline_seps_comps() == rhs.hline_seps_comps()
588 && lhs.has_vline_seps() == rhs.has_vline_seps()
589 && lhs.vline_seps() == rhs.vline_seps()
590 && lhs.vline_seps_comps() == rhs.vline_seps_comps();
593 # endif // ! MLN_INCLUDE_ONLY
599 #endif // ! SCRIBO_CORE_DOCUMENT_HH