
--- scribo/scribo/core/line_info.hh | 24 ++++++++++++------------ scribo/scribo/core/stats.hh | 4 ++-- scribo/scribo/text/merging.hh | 3 ++- scribo/scribo/text/paragraphs.hh | 20 +++++++++----------- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/scribo/scribo/core/line_info.hh b/scribo/scribo/core/line_info.hh index b44b379..a798e9b 100644 --- a/scribo/scribo/core/line_info.hh +++ b/scribo/scribo/core/line_info.hh @@ -1193,18 +1193,18 @@ namespace scribo // incremented. ++used_comps; - // // Compute boldness - // boldness.take(comp_set(c).features().boldness); - // sum2_boldness += mln::math::sqr<float>(comp_set(c).features().boldness); - - // // Compute color - // color_red.take(comp_set(c).features().color.red()); - // color_green.take(comp_set(c).features().color.green()); - // color_blue.take(comp_set(c).features().color.blue()); - - // sum2_red += mln::math::sqr<unsigned>(comp_set(c).features().color.red()); - // sum2_green += mln::math::sqr<unsigned>(comp_set(c).features().color.green()); - // sum2_blue += mln::math::sqr<unsigned>(comp_set(c).features().color.blue()); + // Compute boldness + boldness.take(comp_set(c).features().boldness); + sum2_boldness += mln::math::sqr<float>(comp_set(c).features().boldness); + + // Compute color + color_red.take(comp_set(c).features().color.red()); + color_green.take(comp_set(c).features().color.green()); + color_blue.take(comp_set(c).features().color.blue()); + + sum2_red += mln::math::sqr<unsigned>(comp_set(c).features().color.red()); + sum2_green += mln::math::sqr<unsigned>(comp_set(c).features().color.green()); + sum2_blue += mln::math::sqr<unsigned>(comp_set(c).features().color.blue()); // FIXME: we must guaranty here that the relationship is from diff --git a/scribo/scribo/core/stats.hh b/scribo/scribo/core/stats.hh index 570325c..bc24044 100644 --- a/scribo/scribo/core/stats.hh +++ b/scribo/scribo/core/stats.hh @@ -273,14 +273,14 @@ private: && left_distance <= std)) ++cluster_index; - clusters[i] = cluster_index; + clusters.push_back(cluster_index); } if (nelements > 1 && data_[i] - data_[i - 1] > std) ++cluster_index; - clusters[i] = cluster_index; + clusters.push_back(cluster_index); clusters_.clear(); clusters_.reserve(cluster_index); diff --git a/scribo/scribo/text/merging.hh b/scribo/scribo/text/merging.hh index 8ee349b..453c6c3 100644 --- a/scribo/scribo/text/merging.hh +++ b/scribo/scribo/text/merging.hh @@ -460,7 +460,8 @@ namespace scribo if (l_cur_height < l_ted_x_height && l_cur_height > 0.05f * l_ted_x_height && float(l_cur_width) / float(l_cur.card()) < l_ted.char_width() - && dx < l_ted_cw) + && dx < l_ted_cw + && l_cur_pmin.row() < l_ted_pmax.row()) { l_cur.update_type(line::Punctuation); return true; diff --git a/scribo/scribo/text/paragraphs.hh b/scribo/scribo/text/paragraphs.hh index a3ff802..5cb253e 100644 --- a/scribo/scribo/text/paragraphs.hh +++ b/scribo/scribo/text/paragraphs.hh @@ -132,18 +132,16 @@ namespace scribo { // ror : right neighbor of the right neighbor const value::int_u16 ror_nbh = right(right_nbh); - const box2d& ror_line_bbox = lines(ror_nbh).bbox(); + // const box2d& ror_line_bbox = lines(ror_nbh).bbox(); // If the current line has a ror if (ror_nbh != right_nbh && output(ror_nbh) == right_nbh) { // Distance between the current line and the right neighbor - const float right_distance = - current_line_bbox.pcenter().row() - right_line_bbox.pcenter().row(); + const float right_distance = lines(l).meanline() - lines(right_nbh).baseline(); // Distance between the right neighbor and the ror - const float ror_distance = - right_line_bbox.pcenter().row() - ror_line_bbox.pcenter().row(); + const float ror_distance = lines(right_nbh).meanline() - lines(ror_nbh).baseline(); // ror x_height const float ror_x_height = lines(ror_nbh).x_height(); @@ -168,7 +166,7 @@ namespace scribo // If the distance between the two lines is greater than // the minimum x height of the two lines then we cut the // link between them - if (distance > std::min(x_height, right_x_height) + if (distance > 2.0f * std::min(x_height, right_x_height) && output(right_nbh) == l) { output(right_nbh) = right_nbh; @@ -207,12 +205,12 @@ namespace scribo if (lol_nbh != left_nbh) { // Distance between the current line and its left neighbor - const float left_distance = - left_line_bbox.pcenter().row() - current_line_bbox.pcenter().row(); + const float left_distance = lines(left_nbh).meanline() - + lines(l).baseline(); // Distance between the left neighbor and the left // neighbor of its left neighbor - const float lol_distance = - lol_line_bbox.pcenter().row() - left_line_bbox.pcenter().row(); + const float lol_distance = lines(lol_nbh).meanline() - + lines(left_nbh).baseline(); // lol x height const float lol_x_height = lines(lol_nbh).x_height(); @@ -237,7 +235,7 @@ namespace scribo // If the distance is greater than the min x height // between the two lines - if (distance > std::min(x_height, left_x_height)) + if (distance > 2.0f * std::min(x_height, left_x_height)) { output(l) = l; continue; -- 1.5.6.5