461bf6fd40
CI / lint (3.11) (push) Has been cancelled
CI / lint (3.12) (push) Has been cancelled
CI / lint (3.13) (push) Has been cancelled
CI / shellcheck (push) Has been cancelled
CI / shfmt (push) Has been cancelled
CI / setup (3.11) (push) Has been cancelled
CI / setup (3.12) (push) Has been cancelled
CI / setup (3.13) (push) Has been cancelled
CI / check-licenses (3.12) (push) Has been cancelled
CI / test_unit (3.11) (push) Has been cancelled
CI / test_unit (3.12) (push) Has been cancelled
CI / test_unit (3.13) (push) Has been cancelled
CI / test_unit_no_extras (3.11) (push) Has been cancelled
CI / test_unit_no_extras (3.12) (push) Has been cancelled
CI / test_json_to_html (3.12) (push) Has been cancelled
CI / test_unit_no_extras (3.13) (push) Has been cancelled
CI / test_unit_dependency_extras (csv, 3.12, --extra csv) (push) Has been cancelled
CI / test_unit_dependency_extras (xlsx, 3.11, --extra xlsx) (push) Has been cancelled
CI / test_unit_dependency_extras (xlsx, 3.12, --extra xlsx) (push) Has been cancelled
CI / test_unit_dependency_extras (csv, 3.11, --extra csv) (push) Has been cancelled
CI / test_unit_dependency_extras (csv, 3.13, --extra csv) (push) Has been cancelled
CI / test_unit_dependency_extras (docx, 3.11, --extra docx) (push) Has been cancelled
CI / test_unit_dependency_extras (docx, 3.12, --extra docx) (push) Has been cancelled
CI / test_unit_dependency_extras (docx, 3.13, --extra docx) (push) Has been cancelled
CI / test_unit_dependency_extras (markdown, 3.11, --extra md) (push) Has been cancelled
CI / test_unit_dependency_extras (markdown, 3.12, --extra md) (push) Has been cancelled
CI / test_unit_dependency_extras (markdown, 3.13, --extra md) (push) Has been cancelled
CI / test_unit_dependency_extras (odt, 3.11, --extra odt) (push) Has been cancelled
CI / test_unit_dependency_extras (odt, 3.12, --extra odt) (push) Has been cancelled
CI / test_unit_dependency_extras (odt, 3.13, --extra odt) (push) Has been cancelled
CI / test_unit_dependency_extras (pdf-image, 3.11, --extra pdf --extra image --extra paddleocr) (push) Has been cancelled
CI / test_unit_dependency_extras (pdf-image, 3.12, --extra pdf --extra image --extra paddleocr) (push) Has been cancelled
CI / test_unit_dependency_extras (pdf-image, 3.13, --extra pdf --extra image --extra paddleocr) (push) Has been cancelled
CI / test_unit_dependency_extras (pptx, 3.11, --extra pptx) (push) Has been cancelled
CI / test_unit_dependency_extras (pptx, 3.12, --extra pptx) (push) Has been cancelled
CI / test_unit_dependency_extras (pptx, 3.13, --extra pptx) (push) Has been cancelled
CI / test_unit_dependency_extras (pypandoc, 3.11, --extra epub --extra org --extra rtf --extra rst) (push) Has been cancelled
CI / test_unit_dependency_extras (pypandoc, 3.12, --extra epub --extra org --extra rtf --extra rst) (push) Has been cancelled
CI / test_unit_dependency_extras (pypandoc, 3.13, --extra epub --extra org --extra rtf --extra rst) (push) Has been cancelled
Build And Push Docker Image / set-short-sha (push) Has been cancelled
Partition Benchmark / setup (push) Has been cancelled
Partition Benchmark / Measure and compare partition() runtime (push) Has been cancelled
CI / test_unit_dependency_extras (xlsx, 3.13, --extra xlsx) (push) Has been cancelled
CI / test_ingest_src (3.12) (push) Has been cancelled
CI / test_json_to_markdown (3.12) (push) Has been cancelled
CI / changelog (push) Has been cancelled
CI / test_dockerfile (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build And Push Docker Image / build-images (linux/amd64, opensource-linux-8core) (push) Has been cancelled
Build And Push Docker Image / build-images (linux/arm64, ubuntu-24.04-arm) (push) Has been cancelled
Build And Push Docker Image / publish-images (push) Has been cancelled
77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
import functools
|
|
from typing import Tuple, Union
|
|
|
|
import pdfminer
|
|
from pdfminer.psparser import (
|
|
END_KEYWORD,
|
|
KWD,
|
|
PSEOF,
|
|
PSBaseParser,
|
|
PSBaseParserToken,
|
|
PSKeyword,
|
|
log,
|
|
)
|
|
|
|
factory_seek = PSBaseParser.seek
|
|
|
|
|
|
@functools.wraps(PSBaseParser.seek)
|
|
def seek(self: PSBaseParser, pos: int) -> None:
|
|
factory_seek(self, pos)
|
|
self.eof = False
|
|
|
|
|
|
@functools.wraps(PSBaseParser._parse_keyword)
|
|
def _parse_keyword(self, s: bytes, i: int) -> int:
|
|
m = END_KEYWORD.search(s, i)
|
|
if m:
|
|
j = m.start(0)
|
|
self._curtoken += s[i:j]
|
|
else:
|
|
self._curtoken += s[i:]
|
|
return len(s)
|
|
if self._curtoken == b"true":
|
|
token: Union[bool, PSKeyword] = True
|
|
elif self._curtoken == b"false":
|
|
token = False
|
|
else:
|
|
token = KWD(self._curtoken)
|
|
self._add_token(token)
|
|
self._parse1 = self._parse_main
|
|
return j
|
|
|
|
|
|
@functools.wraps(PSBaseParser.nexttoken)
|
|
def nexttoken(self) -> Tuple[int, PSBaseParserToken]:
|
|
if self.eof:
|
|
# It's not really unexpected, come on now...
|
|
raise PSEOF("Unexpected EOF")
|
|
while not self._tokens:
|
|
try:
|
|
self.fillbuf()
|
|
self.charpos = self._parse1(self.buf, self.charpos)
|
|
except PSEOF:
|
|
# If we hit EOF in the middle of a token, try to parse
|
|
# it by tacking on whitespace, and delay raising PSEOF
|
|
# until next time around
|
|
self.charpos = self._parse1(b"\n", 0)
|
|
self.eof = True
|
|
# Oh, so there wasn't actually a token there? OK.
|
|
if not self._tokens:
|
|
raise
|
|
token = self._tokens.pop(0)
|
|
log.debug("nexttoken: %r", token)
|
|
return token
|
|
|
|
|
|
def patch_psparser():
|
|
"""Monkey-patch certain versions of pdfminer.six to avoid dropping
|
|
tokens at EOF (before 20231228) and splitting tokens at buffer
|
|
boundaries (20231228 and 20240706).
|
|
"""
|
|
# Presuming the bug will be fixed in the next release
|
|
if pdfminer.__version__ <= "20240706":
|
|
PSBaseParser.seek = seek
|
|
PSBaseParser._parse_keyword = _parse_keyword
|
|
PSBaseParser.nexttoken = nexttoken
|