1367 {
1368 CalculateOpenModels(row_start_, row_end_);
1369
1370
1371
1372
1373 for (int i = row_start_; i < row_end_; i++) {
1374 RowScratchRegisters &row = (*rows_)[i];
1375 if (row.ri_->num_words == 0)
1376 continue;
1377
1378
1379
1380
1381
1382 bool left_align_open = false;
1383 bool right_align_open = false;
1384 for (
int m = 0; m < OpenModels(i).
size(); m++) {
1385 switch (OpenModels(i)[m]->justification()) {
1388 default: left_align_open = right_align_open = true;
1389 }
1390 }
1391
1392
1393
1394 bool likely_start;
1395 if (i == 0) {
1396 likely_start = true;
1397 } else {
1398 if ((left_align_open && right_align_open) ||
1399 (!left_align_open && !right_align_open)) {
1400 likely_start = LikelyParagraphStart((*rows_)[i - 1], row,
1402 LikelyParagraphStart((*rows_)[i - 1], row,
1404 } else if (left_align_open) {
1405 likely_start = LikelyParagraphStart((*rows_)[i - 1], row,
1407 } else {
1408 likely_start = LikelyParagraphStart((*rows_)[i - 1], row,
1410 }
1411 }
1412
1413
1414
1415
1416
1417 if (likely_start) {
1418
1419 for (
int m = 0; m < OpenModels(i).
size(); m++) {
1421 row.AddStartLine(OpenModels(i)[m]);
1422 }
1423 }
1424 } else {
1425
1427 if (i > 0) {
1428 (*rows_)[i - 1].StrongHypotheses(&last_line_models);
1429 } else {
1431 }
1432 for (int m = 0; m < last_line_models.size(); m++) {
1435 row.AddBodyLine(model);
1436 }
1437 }
1438
1439
1440
1441
1442
1444 (row.GetLineType() ==
LT_START && !row.UniqueStartHypothesis())) {
1447 for (int m = 0; m < all_models.size(); m++) {
1449 row.AddStartLine(all_models[m]);
1450 }
1451 }
1452 }
1453
1454
1455
1457 CalculateOpenModels(i + 1, row_end_);
1458 }
1459 }
1460}
bool ValidBodyLine(const GenericVector< RowScratchRegisters > *rows, int row, const ParagraphModel *model)
bool ValidFirstLine(const GenericVector< RowScratchRegisters > *rows, int row, const ParagraphModel *model)
void NonCenteredModels(SetOfModels *models)