+
+/** Get all breakable columns between l and r, (not counting l and r). */
+Link_array<PCol>
+PScore::breakable_col_range(PCol*l,PCol*r)const
+{
+ Link_array<PCol> ret;
+
+ PCursor<PCol*> start(l ? find_col(l)+1 : cols.top() );
+ PCursor<PCol*> stop(r ? find_col(r) : cols.bottom());
+
+ /*
+ ugh! windows-suck-suck-suck.
+ */
+ while ( PCursor<PCol*>::compare(start,stop) < 0 ) {
+ if (start->breakable_b())
+ ret.push(start);
+ start++;
+ }
+
+ return ret;
+}
+Link_array<PCol>
+PScore::col_range(PCol*l,PCol*r)const
+{
+ Link_array<PCol> ret;
+
+ PCursor<PCol*> start(l ? find_col(l)+1 : cols.top() );
+ PCursor<PCol*> stop(r ? find_col(r) : cols.bottom());
+ ret.push(l);
+
+ /*
+ ugh! windows-suck-suck-suck.
+ */
+ while ( PCursor<PCol*>::compare(start,stop) < 0 )
+ ret.push(start++);
+ ret.push(r);
+ return ret;
+}
+
+Link_array<PCol>
+PScore::broken_col_range(PCol*l,PCol*r)const
+{
+ Link_array<PCol> ret;
+
+ PCursor<PCol*> start(l ? find_col(l)+1 : cols.top() );
+ PCursor<PCol*> stop(r ? find_col(r) : cols.bottom());
+
+ /*
+ ugh! windows-suck-suck-suck.
+ */
+ while ( PCursor<PCol*>::compare(start,stop) < 0 ) {
+ if (start->breakable_b() && !start->line_l_ )
+ ret.push(start);
+ start++;
+ }
+
+ return ret;
+}