480 {
481 if (non_text_block_) {
482 return;
483 }
484 if (!good_skew_angle_) {
485 skew_angle_ = default_block_skew;
486 }
487 if (debug_level_ > 0) {
488 tprintf(
"Adjusting block to skew angle %g\n", skew_angle_);
489 }
490 FCOORD direction(cos(skew_angle_), sin(skew_angle_));
491 for (auto row : rows_) {
492 row->AdjustBaselineToParallel(debug_level_, direction);
493 if (debug_level_ > 1) {
494 row->Print();
495 }
496 }
497 if (rows_.size() < 3 || !ComputeLineSpacing()) {
498 return;
499 }
500
501
502
503 unsigned best_row = 0;
505 line_spacing_, line_offset_);
506 for (unsigned r = 1; r < rows_.size(); ++r) {
508 line_spacing_, line_offset_);
509 if (error < best_error) {
510 best_error = error;
511 best_row = r;
512 }
513 }
514
515 double offset = line_offset_;
516 for (auto r = best_row + 1; r < rows_.size(); ++r) {
517 offset = rows_[r]->AdjustBaselineToGrid(debug_level_, direction,
518 line_spacing_, offset);
519 }
520 offset = line_offset_;
521 for (int r = best_row - 1; r >= 0; --r) {
522 offset = rows_[r]->AdjustBaselineToGrid(debug_level_, direction,
523 line_spacing_, offset);
524 }
525}
static double SpacingModelError(double perp_disp, double line_spacing, double line_offset)