26 #ifndef SCRIBO_FILTER_SEPARATORS_IN_PARAGRAPH_HH
27 # define SCRIBO_FILTER_SEPARATORS_IN_PARAGRAPH_HH
35 # include <mln/core/concept/image.hh>
36 # include <mln/draw/box_plain.hh>
37 # include <scribo/core/component_set.hh>
38 # include <scribo/core/document.hh>
67 unsigned hmin_size,
unsigned vmin_size);
70 # ifndef MLN_INCLUDE_ONLY
75 unsigned hmin_size,
unsigned vmin_size)
77 mln_trace(
"scribo::filter::separators_in_paragraph");
79 mln_precondition(doc.is_valid());
80 mln_precondition(doc.has_elements());
81 mln_precondition(doc.has_hline_seps() || doc.has_vline_seps());
83 if ((doc.has_hline_seps() && !doc.hline_seps_comps().nelements())
84 && (doc.has_vline_seps() && !doc.vline_seps_comps().nelements()))
88 initialize(billboard, doc.image());
91 for_all_comps(p, doc.paragraphs())
92 if (doc.paragraphs()(p).is_valid())
93 mln::draw::
box_plain(billboard, doc.paragraphs()(p).
bbox(), true);
96 if (doc.has_hline_seps())
98 component_set<L> hline = doc.hline_seps_comps().duplicate();
99 for_all_comps(c, hline)
100 if (hline(c).is_valid())
102 const mln_box(L)& b_ = hline(c).bbox();
104 const bool tl = billboard(b_.pmin());
105 const bool tr = billboard.at_(b_.pmin().row(), b_.pmax().col());
106 const bool ml = billboard.at_(b_.pcenter().row(), b_.pmin().col());
107 const bool mc = billboard.at_(b_.pcenter().row(), b_.pcenter().col());
108 const bool mr = billboard.at_(b_.pcenter().row(), b_.pmax().col());
109 const bool bl = billboard.at_(b_.pmax().row(), b_.pmin().col());
110 const bool br = billboard(b_.pmax());
114 if (tl && tr && ml && mc && mr && bl && br
115 && hline(c).bbox().width() < hmin_size)
121 doc.set_hline_separators(doc.hline_seps(), hline);
125 if (doc.has_vline_seps())
127 component_set<L> vline = doc.vline_seps_comps().duplicate();
128 for_all_comps(c, vline)
129 if (vline(c).is_valid())
131 const mln_box(L)& b_ = vline(c).bbox();
133 const bool tl = billboard(b_.pmin());
134 const bool tr = billboard.at_(b_.pmin().row(), b_.pmax().col());
135 const bool ml = billboard.at_(b_.pcenter().row(), b_.pmin().col());
136 const bool mc = billboard.at_(b_.pcenter().row(), b_.pcenter().col());
137 const bool mr = billboard.at_(b_.pcenter().row(), b_.pmax().col());
138 const bool bl = billboard.at_(b_.pmax().row(), b_.pmin().col());
139 const bool br = billboard(b_.pmax());
143 if (tl && tr && ml && mc && mr && bl && br
144 && vline(c).bbox().height() < vmin_size)
150 doc.set_vline_separators(doc.vline_seps(), vline);
155 # endif // ! MLN_INCLUDE_ONLY
161 #endif // ! SCRIBO_FILTER_SEPARATORS_IN_PARAGRAPH_HH