463 {
464 if (non_text_block_) return;
465 if (!good_skew_angle_) skew_angle_ = default_block_skew;
466 if (debug_level_ > 0)
467 tprintf(
"Adjusting block to skew angle %g\n", skew_angle_);
468 FCOORD direction(cos(skew_angle_), sin(skew_angle_));
469 for (int r = 0; r < rows_.size(); ++r) {
470 BaselineRow* row = rows_[r];
471 row->AdjustBaselineToParallel(debug_level_, direction);
472 if (debug_level_ > 1)
473 row->Print();
474 }
475 if (rows_.size() < 3 || !ComputeLineSpacing())
476 return;
477
478
479
480 int best_row = 0;
482 line_spacing_, line_offset_);
483 for (int r = 1; r < rows_.size(); ++r) {
485 line_spacing_, line_offset_);
486 if (error < best_error) {
487 best_error = error;
488 best_row = r;
489 }
490 }
491
492 double offset = line_offset_;
493 for (int r = best_row + 1; r < rows_.size(); ++r) {
494 offset = rows_[r]->AdjustBaselineToGrid(debug_level_, direction,
495 line_spacing_, offset);
496 }
497 offset = line_offset_;
498 for (int r = best_row - 1; r >= 0; --r) {
499 offset = rows_[r]->AdjustBaselineToGrid(debug_level_, direction,
500 line_spacing_, offset);
501 }
502}
static double SpacingModelError(double perp_disp, double line_spacing, double line_offset)