From 8cabd8abc26d8109a7a7fa42aaca31b04e0178ed Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Thu, 1 Oct 2026 16:36:24 +0900 Subject: [PATCH 1/2] fix(layout): count objects set as characters in a cell paragraph without a layout cache Without line caches a cell paragraph holding a picture, drawing or equation set as a character was measured as if the object were not there, so the row came out shorter than Hancom's. Such an object alone is now one line as tall as it, spaced from the text's size, as a table alone already was; objects among the text, or several of them, take their width and height in the paragraph's lines as in the body. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 4 +++ src/hwpx/layout/pages.py | 33 +++++++++++++++--- .../pages_cell_equation_alone.hwpx | Bin 0 -> 8233 bytes .../pages_cell_picture_after_text.hwpx | Bin 0 -> 8809 bytes ...ages_cell_picture_alone_fixed_spacing.hwpx | Bin 0 -> 8732 bytes .../pages_cell_picture_among_text.hwpx | Bin 0 -> 8813 bytes ...pages_cell_picture_as_character_alone.hwpx | Bin 0 -> 8669 bytes .../pages_cell_picture_before_text.hwpx | Bin 0 -> 8814 bytes ..._cell_picture_in_a_table_as_character.hwpx | Bin 0 -> 8681 bytes .../pages_cell_picture_then_a_line.hwpx | Bin 0 -> 8706 bytes ...ges_cell_rectangle_as_character_alone.hwpx | Bin 0 -> 8407 bytes .../pages_cell_two_pictures_on_one_line.hwpx | Bin 0 -> 8941 bytes .../pages_cell_two_pictures_on_two_lines.hwpx | Bin 0 -> 9014 bytes tests/test_layout_page_estimate.py | 12 +++++++ 14 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 tests/fixtures/hancom_saved/pages_cell_equation_alone.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_after_text.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_alone_fixed_spacing.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_among_text.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_as_character_alone.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_before_text.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_in_a_table_as_character.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_picture_then_a_line.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_rectangle_as_character_alone.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_two_pictures_on_one_line.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_cell_two_pictures_on_two_lines.hwpx diff --git a/CHANGELOG.md b/CHANGELOG.md index 819dc487..a8fe713d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -265,6 +265,10 @@ ### 고침 +- 쪽 수 추정(실험, `estimate_pages`)이 줄 캐시 없는 표 칸 문단에서 글자처럼 둔 개체(그림·도형·수식 등)를 세지 않던 + 것을 고친다. 전에는 칸 문단에 혼자 든 표만 그 높이로 셌고, 다른 개체는 없는 것처럼 줄을 세어 행이 한/글보다 + 낮았다. 이제 개체 하나만 든 문단은 개체 높이의 한 줄이고 줄 간격은 글자 크기로 센다. 글 사이에 있거나 여럿이면 + 본문처럼 개체의 폭과 높이로 줄 안에 놓는다. - 쪽 수 추정(실험, `estimate_pages`)이 줄 사이에서 나뉘는(CELL) 흐르는 표의 아래 캡션을 한/글처럼 둔다. 마지막 행이 글보다 높게 선언돼 있으면, 그 행과 캡션을 함께 다음 쪽으로 보내지 않고 행의 빈 높이를 캡션 위에서 자른다. 쪽 끝에서 빈 높이를 자르는 규칙과 같다. 남은 높이가 1282 이하면 버리고 캡션은 그 쪽에 남는다. 넘으면 남은 부분과 캡션이 다음 쪽으로 간다. diff --git a/src/hwpx/layout/pages.py b/src/hwpx/layout/pages.py index 39aa77a4..39c0d3fc 100644 --- a/src/hwpx/layout/pages.py +++ b/src/hwpx/layout/pages.py @@ -75,7 +75,9 @@ cells' rest (a cell declared taller than its text, whose first line fits, is cut like such a row, below). A table set as a character alone in a paragraph of a cell is one line as tall as it there, spaced like the text, and a row holding one splits between its cell's lines, each as tall - as it is; a nested table among text, placed top and bottom or wrapped square is followed through + as it is; so is another object set as a character alone in a cell paragraph without a layout + cache, and such objects among its text, or several of them, take their place in its lines as in + the body; a nested table among text, placed top and bottom or wrapped square is followed through the layout caches of its cell, as tall as Hancom drew it (down to such a table's foot; one placed up from its paragraph's top stands at that top; the caches of a row Hancom split over a page end start over at the next page's top, and are read as one run of lines, each line that goes back up @@ -509,9 +511,13 @@ def stack(self, paragraphs: list[Any], width: int, caches: bool) -> tuple[int, i shape = self.shape(paragraph.get("paraPrIDRef")) pitch = _pitch(shape.kind, shape.value, size) table = _table_alone(runs) + alone = None if table is not None or caches and _cached_metrics(paragraph) else _object_alone(runs) if table is not None: # one line as tall as the table, spaced like the text tall = _inline_table_height(self, table) + _extent_margins(table) count, size, pitch = 1, tall, tall + pitch - size + elif alone is not None: # so with another object set as a character + tall = _object_extent(alone, self)[1] + count, size, pitch = 1, tall, tall + pitch - size else: cached = _cached_metrics(paragraph) if caches else () cached = cached or self.marked_lines(paragraph, runs, width) \ @@ -571,10 +577,11 @@ def stack_lines(self, paragraphs: list[Any], width: int, caches: bool) -> tuple[ return tuple(metrics) def marked_lines(self, paragraph: Any, runs: list[Any], width: int) -> tuple[tuple[int, int], ...]: - """(height, advance) of each line of a paragraph holding composed characters or ruby text, laid - out at *width* as in the body; empty for a paragraph holding neither.""" + """(height, advance) of each line of a paragraph holding composed characters, ruby text, or objects + set as characters among its text or several of them, laid out at *width* as in the body; empty for + a paragraph holding none of them.""" - if not _marks(runs): + if not _marks(runs) and not _objects_among(runs): return () shape = self.shape(paragraph.get("paraPrIDRef")) _check_ruby_spacing(runs, shape) @@ -685,6 +692,24 @@ def _row_span(cell: Any) -> int: return 1 if span is None else int(span.get("rowSpan", 1)) +def _object_alone(runs: list[Any]) -> Any: + """The object set as a character, not a table, that is all a paragraph holds (but objects in front of or + behind the text), or ``None``.""" + + objects = _placed_objects(runs) + if len(objects) != 1 or _local(objects[0]) == "tbl" or _run_text(runs).strip(): + return None + return objects[0] if objects[0].find(f"{HP}pos").get("treatAsChar") == "1" else None + + +def _objects_among(runs: list[Any]) -> bool: + """Whether the runs hold objects set as characters, and nothing else placed, among text or several.""" + + objects = _placed_objects(runs) + return bool(objects) and (len(objects) > 1 or bool(_run_text(runs).strip())) and all( + obj.find(f"{HP}pos").get("treatAsChar") == "1" for obj in objects) + + def _table_alone(runs: list[Any]) -> Any: """The table set as a character that is all a paragraph holds, or ``None``.""" diff --git a/tests/fixtures/hancom_saved/pages_cell_equation_alone.hwpx b/tests/fixtures/hancom_saved/pages_cell_equation_alone.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..b4b372552cc5989fc00fe32326f49e62c3267196 GIT binary patch literal 8233 zcmZ{J1z1~4^Ed9Up=d&JcZXuZ-DxQrAh=7R#ogU0?i49fpg0t3i$j4HEA9}aP@rG9 z_x-=Ux6k_}&*tpev-3N%li8V_8BG;r6cU8LKR|@w6KMrv_{~GZfHy~|BgDhk1!C^v z;sCWY_kcP(aoKviu)Tn~X#R^(@c#7=GDHM~hlUL&^n$p#!zXk4I68<+!GGxfGav!t z;p7IJL;5%O z5+DN&Z8=SC4Ow{|9Sv;|ouj#(vzr7+0N#T-J@j}UdX{d^fAuUpp$=B+o{km}_!Bta z&h8Q*UeE(C|6%K4J#gB8$VURC_!m=j8rIfOO9&nO&c@T>uPOhf0dYzGpZFf63`BTo z_UsgbgMjd=;&0i@Iy-qloIKpQY$4`W5Vr?09-3%4FAbCaVnw-Xlo%kY3`lQS4r3o{ zATq*YZ(Ddq6kCxrEHJW`Tr9jSAH>muO14udVHG6b5y5HPv_SVHq$Q%jwtHgq8ZS@k zu{=-gV{6iW{kg3 zX!U}O^!Lyp5HGlxc7^7%zdSotXzwbQVA2AC} zxJ`tTH8o`Dc%?o|Bp)0VLi?PES#j;pppdWb4mvZK4vNXJn}c3zreWJSP-ZSatqT2) zy&bzzmvSpjI6-l>-FFe3`=~Jj?KHN*{usDQv7C>~zH?|ESAlbgIQ3x$;5Yfz?_)Jc zQXj;L+T5d7Jx|0VgA+Wi5Hr{}$y$PkwM zTD|-YW(N(35`S zIrvHT4J8m9)&8x7e5#+G+?1RCoz|qf%ep6<)AObQ9g|pFAdbA5gIeRd1+v;MNUeJA zow{1nO?vZ9-eRY5$E0Iq_)23q69#2@(QIqYYzMwNo+zkjsl{4qAIo&yr&vLU=Cu^a z8{r#$KR-QjXE2o?*%$PE&d>;|8a%X}U=us5Wvp*xAyY?9N|_VhK;b&s=>wVe>|kKP z4&_I_pz@#K&Fg(mP&Q26+Q*Z>40Vd+b;f0o*RmR$RUc5&?9oR>6995e$}_QOE2Abv zRk={f;kU2NXjIj%;~N1Y$IJ@~0Q!CEFmyBkkTSE&taaLsh7*{T1KldoH;}Kkc{A(j z=&ZPS)kEzks$v2VRN+Rdf!zu=7P9Xm*tZ94hp_$xmRN~;e49I#<_qIE(hS2r)^r9K zsZEzoDGrJ0Jz5BLN(1}Ld+_FL(c_sobt-_R6~Vosv-0=Ck;3O@y2Yf50Lk8q1!W`j z?88P&e3~SlH~aOy;^R(V!`^&)uBsWOvXAm^+nfpeQ~+ON&4uv<2wg|KwEbwHs>aI+ zGtc^Zi&I}c9*FF)bE*X}&%2}!)0o-^G2BFT|jML?ob7ZSYdSz?=wgEhWQ zKe!DuM>YTME9YM1U^vng4MpV})WA+4p(dm9vbOc=_URs;blH)9Z?|fh!_OU;YJHpU zk*hebevU+xNU=>2=bD(M!nnoIwyyUhj5|E1Qk1zMzr0%xz3j4lhDdrHQRN5c;7iaE z&8TtPP?czw3;r4nn=8KO9*y1_b)Q(Mw_Im&z4|gxhHZ`7ev^98^DO=owU|>{pXg4h zDQai#+!LKwsOP-Qub;!#N77u9Jw1}Ot?sqr{h}5tNbr^WR0aTzwMSaNy>W~Ui-ZXvIx-0FYfB}?Gyhx7u9X?9vy2^6NwzmD}mV48AKQOq&&GxE)$#|Abo zZ?z8^W+OOvI|v1C9oyH65i%kcx*)&w&|Y@9stOJMY+dMB9!k`33xvihGT8~lzo>EM zcf?=WW;^YYQJa$Yf%r#t3I1?6=+-GKnKpOqTTxlD&z++@e148dF`@(xKEY@sqZ{ep zI%FK_T^cPCNLA0urxF2XPH!n|lF7CtbT_ zE6}f)mLFY=sL!t}fQIPMP2GP;=wYKoZlTIxSR^ld@zYAMnQO(7|45>JMMUDw(>NeF?!PgvalSd5D>THxTEJ3 z`|@;hdFFyirhbc}$LR-5Dj!salj?f;9{WXPoQYje2+{R^-}q2CHhSw9AfIH0s&8N1 zT794xuS1K%a6QlN*C|W0_`4{U5vAP2`_8w5K*g@w$fI#Y)y!y??HKx`>rKE9~48$qa zhi*OaMUrL^m&Qoy6L1Cc(=<_Bi-^mjj&a%&JJ;pPFhDWHMjMr@4I;}`sb^WPU($4p zfUl{)JK*J1zI7;*TTnHz7v0aj_`=s~D>PzD;kKB@mz@oSKQAWb9kz`&YudMHVi!3a zrKrvPdz5e3w(9RuwHp1;wwpKi|BYAX6` zvUYf`*JfG?v=O%!lpF94dU(vpUA<=@dc{Q(k3{iULKl;BXYRM z!lCl^3_iK)OFZM{tkcNRgrDWjqE3&5|-ram;26bxUFC=6vC6y&AKH;h{fcE9Q9dwoQ4y3=Ke-Ke>t0;{VgD z+IBIU+HMbA{0LKO4=o%u3 z8Y1E4jQ|Y>-287MKCGBNtUTf!F{cM*y*hazHbRKwPPqZ;2)b&6p-}?|^i_;>RUZgB zCc{!aHgbnQBeHCz81m4fH_J(BYZEpT@p|69^LiB6{^DK=dN%I-Jb;{9@F=N5cfIgB z*j)9xt=|wxIAaekix!z^+oZrNDF-qMo~%<67T`*Uhz95RF)u z^@*aE6v_sk42JMC(2%APua;Oi3M4hZ6t=@r7YFOCOKTxf38alxN5vlYvka^b$ik-) zGxREv>oS374Srp(?X|AR_sj%^;93o>4PY{}lsqTV+3ph|?Dkr#hxqtsR|CfozwG3k z5I`+sKD+Z|IZ3N->C%%MI!IP*rD63WH@RE9 zC#<3OvyCkO6a^`TqPo5h3h5qlT1V`N@fZKnjmj{u`CJLo6RcLGHie z65~&Q#U%z9mou`ec-`kgY2=OULmx(y=aVfRxIRQuMSazzI&vYAm%Pw63(7Svc%s$h zw-@rs4grkPT~)p#59`A4VF@!i(T-TLYa;zn!&9I;w)!zg?t(s3uohJTbK7n0 zJO5F|5hABSA|fhX_9Yf_Fh#k8Nh3$gy76i(@#W(|nDUT^myrEdgjEoXc-p9!SXZ+| zh3r^MPzY&-j>jl5)CO%)7A&o@l1PiXtIBIww!pnwN6HXpDm4)6>{(0d3ms)OVI(B? zd#WV-yp;UO3i6E%ic-e3cU2B)s-&7VAOK`OKpxpHEQnQ*JEiK-#0;(bJ%@ba-&Hy3%rw| zrvkoiv{cuzBgmd{DH*ri7NgB#H>W$d8$!ivC1QcaItMBF;z<4kz$HXCacXxg!bN_y zx6dT|T@}3d#E=vcy?niR#ItrDnVbnL4+{@K&2fnKIBj2!>F$Zs$0|t1a}@_h3=v?D z3hq|fm<4dHm9n^#p=J}@rEVf%g^UeGGr~mfL`91nf*3Li307Ab`!{9QMaW_tQ08c3 z8HcbeQN1?UO3NB<8CKXEf-4hYpwS{IiGqJ^nAVecP`Ya&k9l(8SFxhh?ly1ZM~|<{ zQ2j(<()wK6n1bd3Nt&v2 zEF%(jStlXQ{&=9IZ+Fkk;=hFR2a)(_;|S2f8VFo{-M-NJqxQsf?C&^@H5Vv{KF*Fn z2$+^u)0p2zit89$#qLMuw17T&^Gel$A6kD{(J-HH%$J zhO;E5J%66$otrwj2w#O`>WeYtumfP^c!tjii(%!h{CDla{*>~*hztsIi7e$FK0uZ{ zSBzduZd$cz3?%!SUD^IVy$5q$^vQQC&Ol$Jqq>p=g^-kfB5rqlqeTm#Y)?c26rrK z>@kg$x@89MJ|rT_%}s6SC>(qH4HSG7TRXQ@H`2Ef9CH#C$ax} z-*+JIF~tTkv=XcR1}$<&rjo^Qqt`=l3}YObP^3Z&t;l%ziEe^C-KZW10bA#>VCke-l0+P|E6Wp1t7nxyXKkvhp+PPP9y^SD7%q zE5%YHZSva$rh9<4mq{eixN>R*@4B&tc!bmf$CAu*^QE$IqFv+Th-YJAI*#OrWtba3 zrEXy>tpWE6Phm>zKeyPm~{H}BhR|% zDq^OE22@g;KJCCSZf~RhRK~7Tsze3Q`X0P`r3^8vfv`%nKK2fDK4}5?`^S;O`5zv?)}t_0VP9EC-CNI?M#O27x?7YDEk8R9 zfxWtl!PWGeNE*9jRL;kS>amlF$r8N37X8jkD>}26nQ9me?L)>gHte&~#8*orV1Ek@ zCT~w~uBP()SvS9kUl;K69`jNbVu0i{$8BEeuWfF^z~eLVTbqTY&((eMiB^{UzXMrjI*dbAJ!Lmi zqt_a}ze^3LGup*V8)sX7YsZ zRJ28bd|hwi{;)Nm{pH2{((x;A*xpi(!OC&vtzLN|`x(a<$vNhVQZ>?~MV-1xw~Tkk zu0|$MiKOa0)+GA6UH>N4c*!7DrQyGiji){V0w$@=bbup=DDfF7GAx zbwDiPIp%<(mI2O1?y*|uZFIUn>GXnK%?s7tmwoGJ zk_mmZZa*mdvtYK#0b9AYb$a}bfYtGu3b64oBC_TX_!g4QaZC@iUqNnE-(RD%ulUv8 z^~?0%rxu#6ohn24X{7+(9`e|lZV)dh#G6ag%}W>Jo8yjSVRKMBLOfsM1+4cl4f)P8H6)H4$q0hbGr!c5DyP{&fERr)a03< zrh?2v5dKR!vm@sXdQ$xYh-~udDe}0imz_+Cl49ALdq17iiI|}v-<2!hvO|ODy%am_ zERNWIG?Iofl~sIf=Q@0Y)`Dz0E&yLjn6q6$3v6RjyzBT_IjXnt`~*AdJaO;k*H{JY z=OuvJc~5Hb%g_Ap#Hp$;?Ul4loj+(n~Z+-^*o6@B4-cU#cZC zybJ(euA02AG>4Kpn9CBL%r=KQ!PD4oR@TiaV@@I51o8ocZgW0?%6ig4?9rMTdbG5w z*(?QtapGm6-F3u`N+f#9Ih=Qy?g@1p7uNIM2iP3VU>k8FpiMhbeZ<}BLz)Em7Il-uDXX4#B9-!LuhBak_Z{dl@?DY^KAs{rPAs{@IWBz;8 zeh?nK62NKeVx6ZqmYl;)a7(J}P5(aPu{_0bZ>2708$`;C9T&{=LXK$c=9n)Nm1@bT z+Ko_g?}*})?4o%0uArYhZK?q2({0qT2@JM05#58$?bccH^e_ytj6JUYL1++Ud@0V; zbN30=S|Ei|rlz1~10&eLZTafuGQ!BtvoE(hzSCmg&dM!1w^pfg0Gv^4J^j5Q_GHWL zie|6c`*D=WkfRk(GmSt|3^hYpQ;)SCp|ojE<=X2;&b_wIR=0p+5Z;Yyb)|F9{VGG7 zEC~0Gd6O^fh8ec+pYt?eRolfut2ipC4kqxr{!-ag$>24nhWu&P^igorIVtXs%+xtl zN!n8HJS|s47409(9prt-7*a|F`@!m=`P z@$^)EP*_RRlkk%cblKORTHT@n+V8knuZNyQN&9Sm*z!Sfs@y<&zkYuX=%9Qif1MUS zv`XtCp*2i2$&2YZpyS;69(kj6cfw3J4j9izs`Xk&$b(P&9c6;3;*1Qfm+aI{Y>b=QoY-Kxc&BU%{ab9#Y^%>);ae^o z-X5ad|Jp4_b0?@Z#NFe;UJJyjVD)q3pw@w!j-AQnat~evUm|?aj|RSCP10FhVk-6c znVB`8a4b5lLe3T5lkq)EDT$q29BIXQUUq1M12nWy5G1vy`hDVQehD~LsdI8Ua7+^Q zIeDZ!7iXlNi7}BMYh!6MYxeC#H_J-@bUmV`3L+B8U#0-g61+nAXJz(b6aj$_Au#CS z`hRuWKdJsK%RbEgn@R+J{ZEzjVST>||93(1FS@^8=L6TS|5~Tt<;gz*{>&Zx2EfDn z2f#lw34cQT>BxUW48YaOte@=xvljd4!(4~&26x~2*$+zTNfV8OqBaG#V( I{c!jH0BYlVng9R* literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_after_text.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_after_text.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..05040ad74f8fdf7a35ffc5e44ae9f8ad8adeb7f7 GIT binary patch literal 8809 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_alone_fixed_spacing.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_alone_fixed_spacing.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..cf98b46bd3daa2e05fcf50dd37b2e706a039ee33 GIT binary patch literal 8732 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_among_text.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_among_text.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..7ee1cbdb2cefccf6f493a90459e5edffe4a2c853 GIT binary patch literal 8813 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 AvH$=8 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_as_character_alone.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_as_character_alone.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..c21cd3d8982d28f33f1a5de6854ec17684f1b4bb GIT binary patch literal 8669 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_before_text.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_before_text.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..eddb7e903c08d2b9c283da2a8d6205bea04051fe GIT binary patch literal 8814 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_in_a_table_as_character.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_in_a_table_as_character.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..1fe3cee499e3b761a496c384d73a34b83851eda5 GIT binary patch literal 8681 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_picture_then_a_line.hwpx b/tests/fixtures/hancom_saved/pages_cell_picture_then_a_line.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..b7838b12c7cc282252068ef1161020ad612a002c GIT binary patch literal 8706 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 Dvz->W literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_cell_rectangle_as_character_alone.hwpx b/tests/fixtures/hancom_saved/pages_cell_rectangle_as_character_alone.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..be4590357e716f8614ab3cbacdf22c3c20419e9a GIT binary patch literal 8407 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 literal 0 HcmV?d00001 diff --git a/tests/test_layout_page_estimate.py b/tests/test_layout_page_estimate.py index 10628052..d2107c17 100644 --- a/tests/test_layout_page_estimate.py +++ b/tests/test_layout_page_estimate.py @@ -46,6 +46,18 @@ "pages_table_flow_repeat_header": 3, # a table flowing with the text, header row repeated "pages_table_repeated_header_second_cell_marked": 2, # only its second cell a header cell: repeated "pages_table_flow_multiline_cells": 4, # a flowing table split between cell lines + # Objects set as characters in a paragraph of a cell of a flowing table, 10 pt text spaced 160%: + "pages_cell_picture_as_character_alone": 1, # a picture 3000 x 4000 alone: one line 4000 tall + "pages_cell_rectangle_as_character_alone": 1, # a rectangle 3000 x 2000 + "pages_cell_equation_alone": 1, # an equation + "pages_cell_picture_before_text": 1, # the picture before two lines of text: the first line as tall + "pages_cell_picture_among_text": 1, # among them + "pages_cell_picture_after_text": 1, # after them: the second line as tall + "pages_cell_two_pictures_on_one_line": 1, # two that fit side by side + "pages_cell_two_pictures_on_two_lines": 1, # two that do not: a line each + "pages_cell_picture_alone_fixed_spacing": 1, # alone, line spacing fixed at 1600 + "pages_cell_picture_in_a_table_as_character": 1, # alone, in a table set as a character + "pages_cell_picture_then_a_line": 1, # alone, then a paragraph of a line: spaced from the text size "pages_object_pushing_characters_off500": 1, # no text, a rectangle set as a character and one top # and bottom 500 down from the paragraph's top: the # line goes below it, as a line of text would From db6f5cd053b3027ec44c0e87d60613e5a99bdbb3 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Thu, 1 Oct 2026 18:28:00 +0900 Subject: [PATCH 2/2] docs(changelog): move this change under a new [Unreleased] heading after 6.7.0 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c72a831..8ffec467 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ 모든 중요한 변경 사항은 이 문서에 기록됩니다. 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)과 [Semantic Versioning](https://semver.org/lang/ko/)을 따릅니다. +## [Unreleased] + +### 고침 + +- 쪽 수 추정(실험, `estimate_pages`)이 줄 캐시 없는 표 칸 문단에서 글자처럼 둔 개체(그림·도형·수식 등)를 세지 않던 + 것을 고친다. 전에는 칸 문단에 혼자 든 표만 그 높이로 셌고, 다른 개체는 없는 것처럼 줄을 세어 행이 한/글보다 + 낮았다. 이제 개체 하나만 든 문단은 개체 높이의 한 줄이고 줄 간격은 글자 크기로 센다. 글 사이에 있거나 여럿이면 + 본문처럼 개체의 폭과 높이로 줄 안에 놓는다. + ## [6.7.0] - 2026-10-01 본문 쪽 수 추정(실험, `hwpx.experimental.estimate_pages`)을 더하고, 곡선·연결선, 바탕쪽 정리, 글상자 채우기, @@ -288,10 +297,6 @@ ### 고침 -- 쪽 수 추정(실험, `estimate_pages`)이 줄 캐시 없는 표 칸 문단에서 글자처럼 둔 개체(그림·도형·수식 등)를 세지 않던 - 것을 고친다. 전에는 칸 문단에 혼자 든 표만 그 높이로 셌고, 다른 개체는 없는 것처럼 줄을 세어 행이 한/글보다 - 낮았다. 이제 개체 하나만 든 문단은 개체 높이의 한 줄이고 줄 간격은 글자 크기로 센다. 글 사이에 있거나 여럿이면 - 본문처럼 개체의 폭과 높이로 줄 안에 놓는다. - 쪽 수 추정(실험, `estimate_pages`)이 줄 사이에서 나뉘는(CELL) 흐르는 표의 아래 캡션을 한/글처럼 둔다. 마지막 행이 글보다 높게 선언돼 있으면, 그 행과 캡션을 함께 다음 쪽으로 보내지 않고 행의 빈 높이를 캡션 위에서 자른다. 쪽 끝에서 빈 높이를 자르는 규칙과 같다. 남은 높이가 1282 이하면 버리고 캡션은 그 쪽에 남는다. 넘으면 남은 부분과 캡션이 다음 쪽으로 간다.