- if (infos_.size () <= 1)
- return;
-
- Drul_array<Beaming_pattern> splits;
-
- bool at_boundary = false;
- int m = best_splitpoint_index (&at_boundary);
-
- splits[LEFT].infos_ = vector<Beam_rhythmic_element> (infos_.begin (),
- infos_.begin () + m);
- splits[RIGHT].infos_ = vector<Beam_rhythmic_element> (infos_.begin () + m,
- infos_.end ());
-
- Direction d = LEFT;
-
- do
- {
- splits[d].beamify (subdivide_beams);
- }
- while (flip (&d) != LEFT);
-
- int middle_beams = ((at_boundary && subdivide_beams)
- ? 1
- : min (splits[RIGHT].beam_extend_count (LEFT),
- splits[LEFT].beam_extend_count (RIGHT)));
-
- do
- {
- if (splits[d].infos_.size () != 1)
- boundary (splits[d].infos_, -d, 0).beam_count_drul_[-d] = middle_beams;
- }
- while (flip (&d) != LEFT);
-
- infos_ = splits[LEFT].infos_;
- infos_.insert (infos_.end (),
- splits[RIGHT].infos_.begin (),
- splits[RIGHT].infos_.end ());
+ for (vsize i = 1; i < infos_.size (); i++)
+ if (infos_[i].invisible_)
+ {
+ int b = min (infos_[i].count (LEFT), infos_[i-1].count (LEFT));
+ infos_[i].beam_count_drul_[LEFT] = b;
+ infos_[i].beam_count_drul_[RIGHT] = b;
+ }
+
+ for (vsize i = infos_.size (); i--;)
+ if (infos_[i].invisible_)
+ {
+ int b = min (infos_[i].count (LEFT), infos_[i+1].count (LEFT));
+ infos_[i].beam_count_drul_[LEFT] = b;
+ infos_[i].beam_count_drul_[RIGHT] = b;
+ }