1407 {
1408 CalculateOpenModels(row_start_, row_end_);
1409
1410
1411
1412
1413 for (int i = row_start_; i < row_end_; i++) {
1414 RowScratchRegisters &row = (*rows_)[i];
1415 if (row.ri_->num_words == 0) {
1416 continue;
1417 }
1418
1419
1420
1421
1422
1423 bool left_align_open = false;
1424 bool right_align_open = false;
1425 for (auto &m : OpenModels(i)) {
1426 switch (m->justification()) {
1428 left_align_open = true;
1429 break;
1431 right_align_open = true;
1432 break;
1433 default:
1434 left_align_open = right_align_open = true;
1435 }
1436 }
1437
1438
1439
1440 bool likely_start;
1441 if (i == 0) {
1442 likely_start = true;
1443 } else {
1444 if ((left_align_open && right_align_open) || (!left_align_open && !right_align_open)) {
1445 likely_start = LikelyParagraphStart((*rows_)[i - 1], row, JUSTIFICATION_LEFT) ||
1446 LikelyParagraphStart((*rows_)[i - 1], row, JUSTIFICATION_RIGHT);
1447 } else if (left_align_open) {
1448 likely_start = LikelyParagraphStart((*rows_)[i - 1], row, JUSTIFICATION_LEFT);
1449 } else {
1450 likely_start = LikelyParagraphStart((*rows_)[i - 1], row, JUSTIFICATION_RIGHT);
1451 }
1452 }
1453
1454
1455
1456
1457
1458 if (likely_start) {
1459
1460 for (unsigned m = 0; m < OpenModels(i).size(); m++) {
1462 row.AddStartLine(OpenModels(i)[m]);
1463 }
1464 }
1465 } else {
1466
1468 if (i > 0) {
1469 (*rows_)[i - 1].StrongHypotheses(&last_line_models);
1470 } else {
1472 }
1473 for (auto model : last_line_models) {
1475 row.AddBodyLine(model);
1476 }
1477 }
1478 }
1479
1480
1481
1482
1483
1485 (row.GetLineType() ==
LT_START && !row.UniqueStartHypothesis())) {
1488 for (auto &all_model : all_models) {
1490 row.AddStartLine(all_model);
1491 }
1492 }
1493 }
1494
1495
1496
1498 CalculateOpenModels(i + 1, row_end_);
1499 }
1500 }
1501}
std::vector< const ParagraphModel * > SetOfModels
bool ValidBodyLine(const std::vector< RowScratchRegisters > *rows, int row, const ParagraphModel *model)
bool ValidFirstLine(const std::vector< RowScratchRegisters > *rows, int row, const ParagraphModel *model)
void NonCenteredModels(SetOfModels *models)