(self, laparams, objs)
| 460 | return |
| 461 | |
| 462 | def get_textlines(self, laparams, objs): |
| 463 | obj0 = None |
| 464 | line = None |
| 465 | for obj1 in objs: |
| 466 | if obj0 is not None: |
| 467 | k = 0 |
| 468 | if (obj0.is_compatible(obj1) and obj0.is_voverlap(obj1) and |
| 469 | min(obj0.height, obj1.height) * laparams.line_overlap < obj0.voverlap(obj1) and |
| 470 | obj0.hdistance(obj1) < max(obj0.width, obj1.width) * laparams.char_margin): |
| 471 | # obj0 and obj1 is horizontally aligned: |
| 472 | # |
| 473 | # +------+ - - - |
| 474 | # | obj0 | - - +------+ - |
| 475 | # | | | obj1 | | (line_overlap) |
| 476 | # +------+ - - | | - |
| 477 | # - - - +------+ |
| 478 | # |
| 479 | # |<--->| |
| 480 | # (char_margin) |
| 481 | k |= 1 |
| 482 | if (laparams.detect_vertical and |
| 483 | obj0.is_compatible(obj1) and obj0.is_hoverlap(obj1) and |
| 484 | min(obj0.width, obj1.width) * laparams.line_overlap < obj0.hoverlap(obj1) and |
| 485 | obj0.vdistance(obj1) < max(obj0.height, obj1.height) * laparams.char_margin): |
| 486 | # obj0 and obj1 is vertically aligned: |
| 487 | # |
| 488 | # +------+ |
| 489 | # | obj0 | |
| 490 | # | | |
| 491 | # +------+ - - - |
| 492 | # | | | (char_margin) |
| 493 | # +------+ - - |
| 494 | # | obj1 | |
| 495 | # | | |
| 496 | # +------+ |
| 497 | # |
| 498 | # |<-->| |
| 499 | # (line_overlap) |
| 500 | k |= 2 |
| 501 | if ( (k & 1 and isinstance(line, LTTextLineHorizontal)) or |
| 502 | (k & 2 and isinstance(line, LTTextLineVertical)) ): |
| 503 | line.add(obj1) |
| 504 | elif line is not None: |
| 505 | yield line |
| 506 | line = None |
| 507 | else: |
| 508 | if k == 2: |
| 509 | line = LTTextLineVertical(laparams.word_margin) |
| 510 | line.add(obj0) |
| 511 | line.add(obj1) |
| 512 | elif k == 1: |
| 513 | line = LTTextLineHorizontal(laparams.word_margin) |
| 514 | line.add(obj0) |
| 515 | line.add(obj1) |
| 516 | else: |
| 517 | line = LTTextLineHorizontal(laparams.word_margin) |
| 518 | line.add(obj0) |
| 519 | yield line |
no test coverage detected