From 61914db1a09be4cb318c322758752c29229c5f2f Mon Sep 17 00:00:00 2001 From: Kazuyoshi Hayase Date: Sun, 26 Jan 2025 19:11:10 +0900 Subject: [PATCH] fix out of index error if span is only one superscript --- .../get_text_lines.cpython-312-pytest-8.3.4.pyc | Bin 0 -> 9842 bytes .../pymupdf4llm/helpers/get_text_lines.py | 9 +++++---- ..._markdown_reader.cpython-312-pytest-8.3.4.pyc | Bin 0 -> 5604 bytes 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 pymupdf4llm/pymupdf4llm/helpers/__pycache__/get_text_lines.cpython-312-pytest-8.3.4.pyc create mode 100644 tests/pymupdf4llm/llama_index/__pycache__/test_pdf_markdown_reader.cpython-312-pytest-8.3.4.pyc diff --git a/pymupdf4llm/pymupdf4llm/helpers/__pycache__/get_text_lines.cpython-312-pytest-8.3.4.pyc b/pymupdf4llm/pymupdf4llm/helpers/__pycache__/get_text_lines.cpython-312-pytest-8.3.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9aa2b4c3033292250e4daaf59e36a99f8a15b2f5 GIT binary patch literal 9842 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 1: + i = 1 if sno == 0 else sno - 1 + neighbor = line["spans"][i] + sbbox.y1 = neighbor["bbox"][3] + s["text"] = f"[{s['text']}]" s["bbox"] = sbbox # update with the Rect version # include line/block numbers to facilitate separator insertion s["line"] = lno diff --git a/tests/pymupdf4llm/llama_index/__pycache__/test_pdf_markdown_reader.cpython-312-pytest-8.3.4.pyc b/tests/pymupdf4llm/llama_index/__pycache__/test_pdf_markdown_reader.cpython-312-pytest-8.3.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d731ca5cf62fc03c29885686adccf72f9b4dfdce GIT binary patch literal 5604 zcmd5=YitzP6~1?8b{@O7ch_%Y9t$=$3(XoE98%geU1T0kQ!7enCANxI!_F9wnSJQa zY|J{g#oqF`R9Y>n@^ft6UFto7@0(yTXqT*rNpN@q@u9o0el2 z(Orj~?RR|-ne z06KC+(v`OqNmj^YXGYVKYN1>rhMts&lGH2tyrS!)6)ip4`=+LVXi_ceh6HlGnkE&b zoLZEXbG=DbPZkwLR^&8{nRs*P*taEeRxV8xouNgwSgsi9vOH>vqpGIlic&!_gz8#Olr*YZE1x`qs>?J^#ea(Q95)xU4j!*wUW!)9}UL#{4U*j;M( zE@SwGrqEqSqv_BldPG-`iO^KY9c?-^6?z+`n32g)Iz1_-(_@NOR*0VB%uq=;*|KDe zne2E;Et9lU~g<^>mD3xLe2eT0R%8mgjTc^vLOeViL**8`yD1B$8$x5}P zkEwlURAa1iy6>&b@jgS*4ZW{iEmXjI2Q{tG7qGn5nuCU1!7+G_Sk9C#SIwr}8O6xa z{yP-p#H7lp)fluK|k!=E>xL=)}25Kqp>lQ%nR@qIJHi_zvews{!_M|oPgMF7I~ zCf4#MC(Mx-e$&XH?N%{B#-ZrCS>>+db<>u8RScFv$gB}_TgT%r<=@>+;$5V77)>sJoUY`mVptm}Wx75@f<0PSiNoXC9z`s(a`?G5 zYI(LsQ;ercP;wnjd`ZwCEOXDTLGTUNTN8if9lLM3CTn_tMqJ=M*VEoh9x{J}odnOB z4jUcrdI$P$ae4lI%GD1$>D!wz_>iU;BUdCE>X(8T62K zEIGxw>qCN)>siB-1j`As_}m(7=1cy{Kd&#X=>Zyv0e@Ie`!B(luHwr*EUKbZWW*G# zZTYNHH6s@FuB26z$w5ii6=EcJ?42iVSW*Svy-8akC-06y{88ExaX{EfR>1G7D)+%#hq3k_F%M%M*SqfT=&!{F=7fQJv4I7_|3450E>GGF$nq}fN!$|#u6KFOE*Wfw zfxUK*zAp^St(*sBV64Xsigys2K38A^n&T~Oa0>`Pnoe8?u>r+&kn^$30G{)3!nlVM zprca^A2B%N48q6623R2k_|d@%)&~cCocPaG)P?$yjwj&5<`j&9A$A=w&yJ85n2*q% zV^SQI&MJKt&I?=7V{&!~0IZf&UC~YP=()U7wj6mU^ti*26z#p2R@9AMAZWYf?v*Z? zn*cBf9u8ZCDhH6<0q96SbM&K71wGaG&c$f!%n-O^Bz|SvrENd0J`i^<3XKcG)_Gy; z^^-Rb-xtzD-1&u0b@_QyhGS;Aa3;pDZ=~OY&_+g@#=dc$3F1PA2i?X! zzyt$3B>>e{8qou3t|SHP|Ctf*ghtFpcUk>yBqjJeAW6bB)(%MeD77CdQ#@HME7n#; zs4-10pb4A`tO~wE=yLr=0r*P>zNl9Q;jvXg=v$2R z!`qq>$=~ERGMO*3QP6!2hI#`o>+|U^=qXrDa5ID-caRn8+SWu~L;FHQ*L*|Q&7s?S zYYl@7!r+`RXvNr{v z&$jWvSre<4oj-+fo@M9%b-eyJ{D2I?OKujmb}{_Jb14J#d;F!5>jfjoR^z>;ssUj>@B3veF(J-UK*0GiY@J31oJZlO)15;$1c_?tg z0f!gfX-7IZ$vOue_GX==N?E5XjBXGMy%LJ#2u+gKK5Me{gv8_}y;{txB|-z4P$hHwX=KntJr#Lbb$TjQ@ntMRY;@4AnnEN0wL)593GdE05S?e`dwG zNbh}i&)*^le;0qsC1#i<4t+I)A0rXB+&r*EZ@=oYZlAopOrM^#$MAtC-4WdPWD8VF zTTn>&VdwWd7jW}DZhjo9$1g84DAck7~5I>qvj(#`W@eJq=or6f_GIr literal 0 HcmV?d00001