Return a list with text word information.
(self, delimiters=None)
| 16610 | return rc |
| 16611 | |
| 16612 | def extractWORDS(self, delimiters=None): |
| 16613 | """Return a list with text word information.""" |
| 16614 | if 1 or g_use_extra: |
| 16615 | return extra.extractWORDS(self.this, delimiters) |
| 16616 | buflen = 0 |
| 16617 | last_char_rtl = 0 |
| 16618 | block_n = -1 |
| 16619 | wbbox = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY) # word bbox |
| 16620 | this_tpage = self.this |
| 16621 | tp_rect = mupdf.FzRect(this_tpage.m_internal.mediabox) |
| 16622 | |
| 16623 | lines = None |
| 16624 | buff = mupdf.fz_new_buffer(64) |
| 16625 | lines = [] |
| 16626 | for block in this_tpage: |
| 16627 | block_n += 1 |
| 16628 | if block.m_internal.type != mupdf.FZ_STEXT_BLOCK_TEXT: |
| 16629 | continue |
| 16630 | line_n = -1 |
| 16631 | for line in block: |
| 16632 | line_n += 1 |
| 16633 | word_n = 0 # word counter per line |
| 16634 | mupdf.fz_clear_buffer(buff) # reset word buffer |
| 16635 | buflen = 0 # reset char counter |
| 16636 | for ch in line: |
| 16637 | cbbox = JM_char_bbox(line, ch) |
| 16638 | if (not JM_rects_overlap(tp_rect, cbbox) |
| 16639 | and not mupdf.fz_is_infinite_rect(tp_rect) |
| 16640 | ): |
| 16641 | continue |
| 16642 | |
| 16643 | if buflen == 0 and ch.m_internal.c == 0x200d: |
| 16644 | # ZERO WIDTH JOINER cannot start a word |
| 16645 | continue |
| 16646 | word_delimiter = JM_is_word_delimiter(ch.m_internal.c, delimiters) |
| 16647 | this_char_rtl = JM_is_rtl_char(ch.m_internal.c) |
| 16648 | if word_delimiter or this_char_rtl != last_char_rtl: |
| 16649 | if buflen == 0 and word_delimiter: |
| 16650 | continue # skip delimiters at line start |
| 16651 | if not mupdf.fz_is_empty_rect(wbbox): |
| 16652 | word_n, wbbox = JM_append_word(lines, buff, wbbox, block_n, line_n, word_n) |
| 16653 | mupdf.fz_clear_buffer(buff) |
| 16654 | buflen = 0 # reset char counter |
| 16655 | if word_delimiter: |
| 16656 | continue |
| 16657 | # append one unicode character to the word |
| 16658 | JM_append_rune(buff, ch.m_internal.c) |
| 16659 | last_char_rtl = this_char_rtl |
| 16660 | buflen += 1 |
| 16661 | # enlarge word bbox |
| 16662 | wbbox = mupdf.fz_union_rect(wbbox, JM_char_bbox(line, ch)) |
| 16663 | if buflen and not mupdf.fz_is_empty_rect(wbbox): |
| 16664 | word_n, wbbox = JM_append_word(lines, buff, wbbox, block_n, line_n, word_n) |
| 16665 | buflen = 0 |
| 16666 | return lines |
| 16667 | |
| 16668 | def extractXHTML(self) -> str: |
| 16669 | """Return page content as a XHTML string.""" |
no test coverage detected