From 994f2f776291d799f9296835289d939118bd3a37 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Fri, 2 Oct 2026 01:47:15 +0900 Subject: [PATCH 1/5] feat(layout): page estimate for objects stacked top and bottom in an empty paragraph Several objects placed top and bottom from the top of a paragraph holding nothing else were refused as "an object with text or other objects in its paragraph". Hancom places them one by one on the first page, from the paragraph's on, where they fit below the earlier ones they overlap across (on the paragraph's page at their offset or below them, whichever is lower); one fitting on no page starts at the top of the page after the last one used, a table taller than a page split over the pages after (between lines when it splits by cell, row by row otherwise). The paragraph's line and the lines after take the first places clear of them. _stack measures each object (_Stacked: offset, span across the column, height with outer margins, a table's rows) and _Paginator._stacked places them, adding them to the frame's bands so that _lay keeps every line clear of them. The paginator keeps its own copy of the bands it is given. Columns, and a first object not fitting on the paragraph's page, are still refused. Eighteen Hancom-saved documents: tables and pictures one below another, offset down, side by side, with outer margins, past the page's foot, a middle table going on to the next page while a later one fits on the first, tables taller than a page by cell and by row, and four tables over four pages. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 9 ++ src/hwpx/layout/pages.py | 135 +++++++++++++++++- .../pages_stacked_first_table_2000_down.hwpx | Bin 0 -> 8222 bytes ...s_stacked_four_tables_over_four_pages.hwpx | Bin 0 -> 13396 bytes ...ages_stacked_four_tables_with_margins.hwpx | Bin 0 -> 8538 bytes ...acked_middle_table_past_the_foot_cell.hwpx | Bin 0 -> 8473 bytes ...cked_middle_table_past_the_foot_table.hwpx | Bin 0 -> 8477 bytes .../pages_stacked_picture_and_table.hwpx | Bin 0 -> 8643 bytes .../pages_stacked_pictures_side_by_side.hwpx | Bin 0 -> 8492 bytes .../pages_stacked_second_table_1230_down.hwpx | Bin 0 -> 8210 bytes .../pages_stacked_second_table_5000_down.hwpx | Bin 0 -> 8203 bytes ...stacked_second_table_on_the_next_page.hwpx | Bin 0 -> 10176 bytes ...stacked_table_taller_than_a_page_cell.hwpx | Bin 0 -> 8628 bytes ...tacked_table_taller_than_a_page_table.hwpx | Bin 0 -> 8638 bytes ...tacked_tables_filling_the_second_page.hwpx | Bin 0 -> 11685 bytes .../pages_stacked_three_tables.hwpx | Bin 0 -> 8354 bytes .../pages_stacked_two_pictures.hwpx | Bin 0 -> 8466 bytes ...es_stacked_two_pictures_past_the_foot.hwpx | Bin 0 -> 8508 bytes .../pages_stacked_two_tables.hwpx | Bin 0 -> 8190 bytes ...ages_stacked_two_tables_past_the_foot.hwpx | Bin 0 -> 8212 bytes tests/test_layout_page_estimate.py | 61 ++++++++ 21 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/hancom_saved/pages_stacked_first_table_2000_down.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_four_tables_over_four_pages.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_four_tables_with_margins.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_middle_table_past_the_foot_cell.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_middle_table_past_the_foot_table.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_picture_and_table.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_pictures_side_by_side.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_second_table_1230_down.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_second_table_5000_down.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_second_table_on_the_next_page.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_table_taller_than_a_page_cell.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_table_taller_than_a_page_table.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_tables_filling_the_second_page.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_three_tables.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_two_pictures.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_two_pictures_past_the_foot.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_two_tables.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_two_tables_past_the_foot.hwpx diff --git a/CHANGELOG.md b/CHANGELOG.md index a780abb2..2bf699e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,15 @@ 것을 고친다. 전에는 칸 문단에 혼자 든 표만 그 높이로 셌고, 다른 개체는 없는 것처럼 줄을 세어 행이 한/글보다 낮았다. 이제 개체 하나만 든 문단은 개체 높이의 한 줄이고 줄 간격은 글자 크기로 센다. 글 사이에 있거나 여럿이면 본문처럼 개체의 폭과 높이로 줄 안에 놓는다. +- 쪽 수 추정(실험, `estimate_pages`)이 빈 문단에 문단 위 기준으로 둔 위아래 개체 여럿(표·그림)을 지원 밖 + (`an object with text or other objects in its paragraph`)으로 두던 것을 고친다. + - 한/글은 개체를 차례로, 문단의 쪽부터 그 쪽에서 가로로 겹치는 앞 개체 아래에 들어가는 첫 쪽에 둔다. + 문단의 쪽에서는 띄움과 앞 개체 아래 가운데 낮은 곳이다. 그래서 뒤 개체가 다음 쪽으로 간 앞 개체를 건너 + 문단의 쪽에 들어가기도 한다. + - 어느 쪽에도 들어가지 않는 개체는 마지막으로 쓴 쪽의 다음 쪽 맨 위에서 시작한다. 쪽보다 긴 표는 그 뒤 + 쪽들로 나뉜다(CELL은 줄 사이에서, TABLE은 행째). + - 문단의 줄과 뒤 줄은 개체를 비킨 첫 자리에 놓인다. + - 여러 단, 문단의 쪽에 들어가지 않는 첫 개체, 쪽보다 긴 표 아닌 개체는 전처럼 지원 밖이다. - 쪽 수 추정(실험, `estimate_pages`)이 `hp:t` 글 안에 글자로 든 전각 공백(U+3000)을 고정폭 빈칸(`hp:fwSpace`)으로 보던 것을 고친다(python-hwpx는 둘을 모두 U+3000으로 읽는다). 글자 전각 공백은 글꼴의 폭(대개 글자 크기만큼)을 차지하고, 그 뒤에서 줄이 나뉘며, 줄 끝에서는 몇 개가 이어져도 모두 매달린다. 전에는 1/4 폭의 고정폭 빈칸으로 diff --git a/src/hwpx/layout/pages.py b/src/hwpx/layout/pages.py index 20faacbb..5016796e 100644 --- a/src/hwpx/layout/pages.py +++ b/src/hwpx/layout/pages.py @@ -66,7 +66,12 @@ page's top while the paragraph's lines go on under its line; a flowing table alone in its paragraph starts its offset below the paragraph's top, above the paragraph's spacing before (one offset up starts there), and the next paragraph goes below the table's end or below the paragraph's line and its - own spacing before, whichever is lower; + own spacing before, whichever is lower; several anchored so to an empty paragraph (none up from it) + go one by one to the first page, from the paragraph's on, where they fit below the earlier ones + they overlap across (on the paragraph's page at their offset or below them, whichever is lower), and + one that fits on none starts at the top of the page after the last one used (a table taller than a + page split over the pages after); the paragraph's line and the lines after take the first places + clear of them; wrapped square anywhere across the column (from the column's, the paragraph's or the paper's left or right) before a paragraph's text (or alone in its paragraph), the text goes on each side of it at least 1440 wide that its text flow allows (both, the larger, the left or the right): a line @@ -126,7 +131,8 @@ settings in a cell or a text box are that list's own), section settings after a section's first paragraph (Hancom starts a new section there), a line or character grid, an object with text or other objects in its paragraph (but objects set as characters, with line spacing in percent or -fixed, one top-and-bottom object placed from the paragraph's top, and one object wrapped square +fixed, one top-and-bottom object placed from the paragraph's top, several so in an empty paragraph +(but in columns, or the first not fitting under the paragraph's top), and one object wrapped square across the column before any text; an object offset down, but a flowing table, or wrapped square stays on one page with the lines above or beside it), footnotes in such a paragraph, two tables starting past their @@ -892,6 +898,20 @@ class _Band: table: _FlowTable +@dataclass(frozen=True) +class _Stacked: + """An object placed top and bottom in a paragraph holding nothing else but more such objects: its + offset below the paragraph's top (above its spacing), its span across the column and its height, outer + margins included (a table as tall as its rows), and a table's rows, which split over the pages when + it is taller than a page.""" + + offset: int + left: int + right: int + height: int + table: _FlowTable | None = None + + @dataclass(frozen=True) class _Para: lines: int @@ -929,6 +949,8 @@ class _Para: reflow: _Reflow | None = None #: holding nothing, in a section hiding a page's first empty lines (see :meth:`_Paginator._paragraph`) hides: bool = False + #: the top-and-bottom objects stacked in this paragraph, which holds nothing else (see :func:`_stack`) + stack: tuple[_Stacked, ...] = () def height(self, line: int) -> int: return self.cached[line][0] if self.cached else self.size @@ -1469,9 +1491,10 @@ def _anchored_notes(measure: _Measure, runs: list[Any], text: str, widths: list[ def _paragraph(measure: _Measure, page: _Page, paragraph: Any, wrap: _Wrap | None = None, - square: Any = None) -> _Para: + square: Any = None, stacked: tuple[Any, ...] = ()) -> _Para: runs = paragraph.findall(f"{HP}run") - objects = [obj for obj in _placed_objects(runs) if obj is not square] + objects = [obj for obj in _placed_objects(runs) + if obj is not square and all(obj is not other for other in stacked)] if page.unequal and any(obj.find(f"{HP}pos").get("treatAsChar") != "1" for obj in objects): raise _Unsupported("an object not set as a character in columns of unequal width") reflow = page.unequal and not _cached_metrics(paragraph) # its lines depend on the column's width @@ -1625,6 +1648,13 @@ def _wrapped_paragraph(measure: _Measure, page: _Page, paragraph: Any, runs = paragraph.findall(f"{HP}run") objects = _placed_objects(runs) + stacked = _stacked_objects(objects, runs, page.column_width) + if stacked: + if wrap is not None or page.unequal: + raise _Unsupported("objects placed top and bottom one below another beside other objects") + para = _paragraph(measure, page, paragraph, stacked=tuple(stacked)) + shape = measure.shape(paragraph.get("paraPrIDRef")) + return replace(para, stack=_stack(measure, stacked, page.column_width, shape)), None square = _square_object(objects, runs, page.column_width) pusher = _pushing_object(objects, _run_text(runs), page.column_width) shape = measure.shape(paragraph.get("paraPrIDRef")) @@ -1695,6 +1725,46 @@ def _pushing_object(objects: list[Any], text: str, column: int) -> Any: return obj +def _stacked_objects(objects: list[Any], runs: list[Any], column: int) -> list[Any]: + """The objects of a paragraph holding nothing else when there are several and each is placed top and + bottom from the paragraph's top (none up from it), from the column's or the paragraph's left or right; + none otherwise.""" + + if len(objects) < 2 or _run_text(runs).strip() or _marks(runs) or _note_anchors(runs): + return [] + for obj in objects: + pos = obj.find(f"{HP}pos") + if pos.get("treatAsChar") == "1" or not _wraps_top_and_bottom(obj, column) \ + or (pos.get("vertRelTo"), pos.get("vertAlign", "TOP")) != ("PARA", "TOP") \ + or int(pos.get("vertOffset", 0)) >= 1 << 31 or pos.get("horzRelTo") not in ("COLUMN", "PARA") \ + or pos.get("horzAlign", "LEFT") not in ("LEFT", "RIGHT"): + return [] + return objects + + +def _stack(measure: _Measure, objects: list[Any], column: int, shape: _Shape) -> tuple[_Stacked, ...]: + """*objects*, stacked in a paragraph holding nothing else, as :meth:`_Paginator._stacked` places them.""" + + stacked: list[_Stacked] = [] + for obj in objects: + pos = obj.find(f"{HP}pos") + width, height = _object_extent(obj, measure) + offset = int(pos.get("horzOffset", 0)) + if offset >= 1 << 31: # kept unsigned: one placed out past the edge + offset -= 1 << 32 + indent = (shape.left, shape.right) if pos.get("horzRelTo") == "PARA" else (0, 0) + left = indent[0] + offset if pos.get("horzAlign", "LEFT") == "LEFT" else column - indent[1] - width - offset + table = None + if _local(obj) == "tbl": + rows, cells = _table_rows(measure, obj) + margin = obj.find(f"{HP}outMargin") + ends = (0, 0) if margin is None else (_margin(margin, "top"), _margin(margin, "bottom")) + table = _FlowTable(rows, obj.get("pageBreak", "CELL"), obj.get("repeatHeader") == "1", ends, + tuple(cells), caption=_caption(measure, obj), cut=_spare_cut(obj)) + stacked.append(_Stacked(int(pos.get("vertOffset", 0)), left, left + width, height, table)) + return tuple(stacked) + + def _push(para: _Para, band: _Wrap, *, starts: bool) -> tuple[_Para, _Wrap | None]: """*para* with the first line reaching a top-and-bottom object's *band* moved below it (the lines after follow), and the band as the next paragraph sees it (``None`` once a line went below it). @@ -1979,7 +2049,7 @@ def __init__(self, body: int, columns: int, notes: _NoteShape, self.body = body self.widths = widths # each column's width when they differ #: frame -> (top, bottom) of the objects placed on the paper there: no line in them - self.bands = bands or {} + self.bands = {frame: list(found) for frame, found in (bands or {}).items()} # stacked objects add theirs #: frame -> (top, bottom) of the ones leaving a line's room beside them, and whether a line, a table #: or an object reaches one of them (set beside it by Hancom, which is not followed) self.sides = sides or {} @@ -2019,6 +2089,9 @@ def _paragraph(self, index: int, paras: list[_Para], para: _Para) -> None: start = para.prev if self.last_vp is None else self.last_vp + self.last_pitch + self.pending_next + para.prev if self.floor is not None: start, self.floor = max(start, self.floor), None + if para.stack: + self._stacked(index, paras, para, start) + return if para.band is not None or self.band is not None: self._banded(index, paras, para, start) return @@ -2086,6 +2159,58 @@ def _flow_below_band(self, para: _Para, table: _FlowTable, top: int) -> None: self._reach(self.frame, line, line + para.height(0)) self.last_vp, self.last_pitch, self.pending_next = line, para.advance(0), para.next + def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> None: + """Objects stacked in a paragraph holding nothing else go one by one to the first page, from the + paragraph's on, where they fit below the earlier ones there they overlap across: on the paragraph's page + at their offset below its top above its spacing or lower, on a later page from its top. One fitting on + none starts at the top of the page after the last one used, a table taller than a page split over the + pages after. No line goes into them: the paragraph's line takes the first place clear of them on its + page, as the lines after do.""" + + if self.band is not None or para.notes or self.columns > 1: + raise _Unsupported("objects placed top and bottom one below another beside other objects") + start, broke = self._breaks(para, start) + if self.last_vp is not None and start + para.height(0) > self.body: # its line goes on to the next + start = self._next_frame(para, 0, True) # page, the objects with it + home, top = self.frame, start - para.prev + placed: dict[int, list[tuple[int, int, int, int]]] = {} # frame -> left, right, top, bottom + last = home + for obj in para.stack: + spot = None + for frame in range(home, last + 1): + below = [box[3] for box in placed.get(frame, ()) if box[0] < obj.right and obj.left < box[1]] + y = max([top + obj.offset if frame == home else 0] + below) + if y + obj.height <= self.body: + spot = frame, y + break + if spot is not None: + placed.setdefault(spot[0], []).append((obj.left, obj.right, spot[1], spot[1] + obj.height)) + continue + if not placed: + raise _Unsupported("objects placed top and bottom one below another past the page's foot") + last += 1 # from the top of the page after the last one used + if obj.height <= self.body: + placed.setdefault(last, []).append((obj.left, obj.right, 0, obj.height)) + continue + if obj.table is None: + raise _Unsupported("an object placed top and bottom taller than a page") + end_frame, end = _flow_table(obj.table, last, obj.table.above, self.body) + for frame in range(last, end_frame): + placed.setdefault(frame, []).append((obj.left, obj.right, 0, self.body)) + placed.setdefault(end_frame, []).append((obj.left, obj.right, 0, end + obj.table.below)) + last = end_frame + for frame, boxes in placed.items(): + if self.bands.get(frame) or self.sides.get(frame) or frame != home and self.reserved.get(frame): + raise _Unsupported("objects placed top and bottom one below another beside other objects") + self.bands[frame] = [(above, below) for _, _, above, below in boxes] + self.table_end = max(self.table_end, last) + first = len(self.out) + if self._lay(index, paras, para, start, broke): + laid = self.laid or para + self.last_vp, self.last_pitch, self.pending_next = self.out[-1][1], laid.advance(laid.lines - 1), para.next + if self.out[first][0] != home: + raise _Unsupported("objects placed top and bottom one below another past the page's foot") + def _anchored(self, index: int, paras: list[_Para], para: _Para, start: int) -> None: """The lines before the anchor's line, the object at that line's top, then the rest of the paragraph below the object.""" diff --git a/tests/fixtures/hancom_saved/pages_stacked_first_table_2000_down.hwpx b/tests/fixtures/hancom_saved/pages_stacked_first_table_2000_down.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..ad7158d50a485dc84f7475dfd5b96d42de1a88ae GIT binary patch literal 8222 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_four_tables_over_four_pages.hwpx b/tests/fixtures/hancom_saved/pages_stacked_four_tables_over_four_pages.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..df92136ccab8856d8b2de9ff7b182d046b4bb918 GIT binary patch literal 13396 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_middle_table_past_the_foot_table.hwpx b/tests/fixtures/hancom_saved/pages_stacked_middle_table_past_the_foot_table.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..75656be2493a121d7d3078c9e4323142e0ba7705 GIT binary patch literal 8477 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 v(;@tpKt%pOwfG+k;m_UiTZS^lKV|EEC=z|Fx0 zpoX|uxmw%1*opykb>!KF0MwpP3m0n(Cs!AU7{CwW380n`2ikdyD9Xs|{lSSE#>B-_ z#Lim`U0MyPF4z31FR^t>)!y34!&%=I!b! z2H*ia%;i7RdXNW3`xpI)0Th3q6t%jIjlC6w8un%D<@7tspELkY@&BstLCZ97RmVOr z6)@o7LQ4M7y^O016ygH))Oc*7p19mkaLiubTaWnMhjmR zR7iWGJhOn}Iq1jRak<(`wT59^nJDgOnK@;(@BirSB?Q9A37VLj=&V(^{$hBtKUdA> zN4$V&4j}tH{Bk0tSY7;1asCpD`Un^2U7Hxi(XdGWm??*kyL(*`;#5RqQNb%u!BR7! z^i1vZm}JBRS`^$dEnFeYx$q}n;uh>? z$FQNO2?FDO8`c;BD-R)1Mt){Ti7O#~wXrNGrW!?f8UT$99Wi%6vpvcZ9i-TK1jfpm z2ot#Q7)nS+KP)u3?(Zbwf#=Vw*&dv>SCze+g|2TF|0YsJS?;kB=ZrWV0BUr5x{;G~ z<)tNIhaj?bXWVS6p)GSUL7l|yeJq9q>{+f4MQ#(T#7Qdn)mzd`1#taOH3e@LZM$9`oB4`1-;y_QKIhPxX~vN?cdFicbFQ<<9(?c+1tL zU<#F~O3-~vg+!p-3uBRO?;0OEP~?2=l^a)xN(jGXp1?5;U@G0h^ul1L$iM1x-@DZ3 zx60uuWIlP3gF2N|&!lkUYBkOD=eM<>N1UHldN@R)I*_Vy4q4&n4>v(6M*R^P80Rz| z?0OAxq4o$alPPB>a?#A%`NoaI_Z@gsEqLzP6B4QVX)n?;^I@(=6YiKoM1VUMiFma$Lc{ z*A1HG(i3cLSfnNMNhS8&cEG$uzP#}$iioXl+AKUsk6MX|ifD#?(30=#gW3%)>HNjp z&0By%PXWqVd1#{ZrukKMPBa&f8$dIK*nB(9DMyB{UkbvJY4CC;#%DvYThX)RQ+}v_ z?j5}dSEEF6Iw~5rLD!xgCEnSo#vBV!kAG0s_xY)TlJA@8(>F2uPbO&!X-O%bdBtEQ zfur{gD)yPGwV_U*TekF=kHSr_OeTiyu^YC1Bss$`4)|Sjjiadz2dJ6lcByuJQ{TiZ zpXJjP%C^ch@dJmFPBnT#vJnGKQ3GE^3~qK}_ww@^$ci=^tWHr#(4Gx z63wr1My;IJzfL#{4tn+{Y)Ow7H7;R94rCX+xs4~EL5g~$#B9{2oe+`1~((VOxS8EKoB#wP*rD3^BeUZGtWfvRr26x{NqRr5)hi{62BTp1E;gI#%0 z-bl&CPD^}$o5H1NY1Cawy1-jnb!;`V#+Ey)O$c<-og#Uq-gJxx`kBnY6)(Polw-KcQ2WFT!@>T&`lw7)H|A3fFaz-A7i9Wf}5USsdlBqXO02sqhR_3 zrVx60ZM*>b;R~8`Unzp@3}4eUWBj&ug;8>1{BimGwdY!DE|FwuhCXmn=1!ItnVmcZ zQXZ2Q#794rz&WRk&o{PXhb`vO5+){L+-Mh@3S*h zmeCutYa!to+vNfahsWvRKOpN3X-rh-Or}1KtgIJK)%!?YoQ70vLR1W~w`ufO9-iXa z+SOQcdBj}B#&rCFsVcc3-$V@7sn-reCRm>AZC_$v6a#+{;2DmC2t*C;ccFG!1Gocd zja`|M>BDJ^3@|fSw1y7_3~j?vot@RtPQz^k$7}$c!*&;S0G4HjVW%hYRpU7DT~sT?+mR8$o>=t5aUuqL98A9oQ%;=H;M;s|Mw zGZWA!S(<^P?dJWE)0ytNHr6ESbHh3Q-ZSd?cffV~`{t~IQS*v57RE8V6;$kT(Mf7w z-*nlEu&DaZo=g$ZZ>D!qB_js5;m>_ng)yXh>)F6KvN_0rF|DC@R}n&>C}hFsQGFXY zUAB(*?|ppaSfdSrVuh6sM&t67)S0H^H~#5SoTHg$MW?~=aVyxtabe2^-ry8^Qu*sI z+dI?qX2I9f6*Y>)OGN@L^Cc4b7E=o)ZL)SeS7fBGRRX7qN7Y?3J1P0G4=^efoh$*z zId`N3sYNArsj__c{``JtEC@Srm>gD;seO{Ee3CPC)DmqscZZ4U^z;bDTlf9hxIIN2 z{Y52R+8N;rs+~psr}%_h%&)t&bHYnsgp@w%(Ke1N&3L44kCkhQkZXydZqJ>oMGD*z z_EmoDtIQ4D>GK`3Kh@b?XJ%Yy9yrw@+$wwBRWFL7P7kk6A8G5uox8&4Tkd&!#IU{? ze?E>IQeKw9m6Q=EJBuVcD^y4y`64+X2X9fBy6-72>+V*5IOQD{0Nj25H8lr~& z_&uZQ-H*{vCxtcf0d%Zsz7Fl{{3SQP%^T3*%$NnAGcaZGaiSdBb{OFa2Yfl2-FD?< z2)>s=!n=K6Ex4{@z3!=7{dsiNaX5MdXU#)%eVi%0sc%6U08tNmD&lv?hOmbOW=f#X#UQ||eQoJTpHy9ADxQ6Fng;#0cfvRx z94C3`bvVVHSJa=>H(jWO@K&d_iVpW(qDpjV45Pg=kd=k8Q>kys0pNJ;Hbb1_n^4l5 zQivqvQ2s(6k7PMY`*~M%shu*AQ8_GyqfBk2yyot_XV$eNHlz#@g={dPCmK&fOSz4y zbnKZYAn3T;V)*nspT0~wV(p~h2F+AI;j2AMo|UkSkurIX+J&bYqpW#fm{T8fOcKur z()9417O!<>V{(VWPl>41nFIV?7Gz{oUrTro&Z}fKVVNLav#RA>0xoYZY{}kIKN91* z`VPv>(q2v3F*{SL3C^4A;+PnVK9jFaI4a;yj$|PAy9;*AJb#%gekbu?zXRrW!2FI@ zlk~tOSnUCDVIXbqB5MJ);Iwy!`Ays$8fpsBFu+73MT2!>Dk;ip!Ac+um{1X5Z}vs3 zH?YD$Nmfe7H)nQC3I~o0wX?SRPK+1(X|uf4D%XtS3nZog*W*XA@O?D|K`lA>qyRPs zoRXZHY_+s`*xv=n-FW;i1=jlj{}6!Z|0)3Z9|An1aisk279R$*d6Pu_IQjqed=aTV zgKs*8U#Bb%N&hzy{_y>>xq@}#QDDlXfrBG}q5bLmc|xon9B!`Py+811^5!5;5W%yj zUo5~9s84!%$oM9vWhb87nJ;}p*L;qUreB^6DlRyf77wR=de&7M7=oGi^bEb~k|sx& z{_&(}eds$zw*aeM0EC&B^}J%FQpLah>WVu$9y`M}Vlwx@c(EkZeo!Fdv;VG#`+2`$ zybARPDej_XTS_+@QnQX*mZ1+MSeP$L3YYp|;u9GXz931iN>sG5Jw{b~98#E!HlB<|GLWVSO;?PV+-35} zb;tRLv=ybyCJbVc%Iv&Rjqz3>n?5d;tLN%|%;K%`u6Se@RW9rNd(7FZ#>edBTS(eT zhGS_~X{|?@L2s4bDR(v=HzAuP=3wMnL^KP1GDtj1W4-1pl^txX=lkvRH2o=dNQX}7 z^wZneT^oAa!Toee%k3O*k|D*pVx}%b{fKp*5;DSF+&Gt4EvzYMxD3Z7j~2hG404g= z@QPEeZdDcXx<5ZlN@esK<-XF>q=`L`pgcf2r_l3H)ymbD5iy%CouheSYwT=CiXag~ zvmw$Du9cM=0}e~+GoZBnK^*OaFaVCSvg+F8^qjttfiGMFDaR!axS|e{8E-M!dVvm1O1<01>mBs&#-*%E z%!vJY7(hBlikrVrkc5q96Y2XL__aY zYfySkoov~R`1Xks0ru90-4{$a&hctn0Z~;VmuS=!6QtAY+^u&iRxi;{jZcJ0R@n5q z@U2t(kVXZFilLSrt8V~`LZ?&I6qf0bt*t5C>+%re%XxHl`Ks>(!|m- z8>w}PKSM+}gpA1P)k-X#DMa3p!kuHAfvv+FI=Jo&q6D!Fza#h-pj2Wws05A`L=zp{ zf{Q&+LpXobZRVJVl5$pyFw*W}Osk~hz^id7YIIvsmMNpxjpQ$x_ztMU-h(oTZmYPK3hTzbyMIR`J~sB^LOyG9*|G17gC4mP#9 z@;1w>k#!|q^6l`K4;`AS(-WWR>n(mNTphWppKLR<{w>2sLp`-r`Bl;d;6{ZZ)x_14ln>E49V_>LI>S zLJCn=Vcq-?kwA+qVZZS~yoKZaG34(5Dtm)iCi0rdt#Po$p&4DSQ%H@u^{~asR zbZGyA4{1|y0nQT-lM~05c(q}drhHNfhRtRLbVcg;?{ZLzxN$ z)qX(pw3$o3;FR-#1C}QoRFoUN(U5FRE8|HjtD7cQ47?x*W>{oyJ@C~!wt>1~gw5uA zd-CD60yjvIdyg1PXiptZMAy?hohCmu?N?T}I-qv0J%x5sn1M@{qLa(&XQ`9lj7BY- zPWfI4&w-MBnw|H_N?#ua@(THG@P6iTiAmC$WY3!sP3a6ehtI4nl32$%-A3hMX|=3E zg^LupIY80{&3E+P-|&|vu+=59u8b=9SdY4yEk?ViXv4NP-ftfg7tjTl9+n@0LAtSm(kEZduZ=HgJ^0O{=t7x+ z!tu5S-whNUkKS%x#_uWRzX>4cG#EcJ>k(=&j>|2Tm%58%eb%fopcQ}1#*3swJ~{qX z=h0h5XNk<0x>{*cO~KSV+na+u5ovH=nC8T&tPNTZrk~(esSBRxE7x~N7~Z$n3_I3o zsO2V?Ql(JndMVc9H@FDV%j7#CrCKaII;49PmlMAK&Y9RZReb(B!oO)PGJE2n^#dBX z{s;trdyKDf2`jWDISnLD*4)+5-x!4-L*%|fw4V+KJgaJT3~(9tUOEP0%HQ7&U-l>7 z-;9072rs#-7-L0j*!t1FT)Rw^%?FZ{=&3z`0v7{Yd1POyRV<#0b-24Ll5s}Ocpc3n zmKERE_blJT{nrHfySFu9@DMlG@PK&RLwqC`q-80K!S5 zGsJNjZwKiVCB>5Jy8!L8iP(WqzqL!hl4Jdt!xRVfO!l~*NBDKapml6?*BWg7cllY= zoW#5-&s-hyo6ff^(urgyJAhKXv02um)s8kkz!X;ljpR8g~%=J zU0}g+4{Mvolwp@}t|xNAeI9eZAc4FLkM?*0Y%NL*juY5gj#nZFers+8NKL5i@3LVac#4oI#-N;EoRE3 znoqsb?I+ud#5d1k;9hxb<@h|AE|e=$2w?T0STbmS5nobF+D+`!RWm>&Y#_ z%g+V^QFJ@qD!PN-N-R+$D12IEtOg)DKj2N^l5ZRdb=Swf{JDS{!NvxE-#OJU5#mga z%IT#fpb1pgw8gZevw_k+(ewyZd1))m^rMhadhAbWUb-8SM;1|!l`=GDG~SBH>$|Ob znSc>L?&~Z-PyAMdS56`6d*nG*v^}GiLZ`Lo>xa=VZFw_bMsE*WBD~yd{~QBLLXbfs zqq1167VTg(4`(y@nceM%>~y^WskCf|+e}Sa+-zQ%)XbZWzM=~GgdF7!@Y?ISlV*H! zvKc$eb-%2097oQtY0%lE+L5>Ka=aN|7n^B@C)O{Cbg7p?tNB?jnhep*L@pJ-V{Rxs zh8|zkY((NPSC-+cDtuD4pn0P~JV6}8#024+ifQ7McTeC*Nb$YFTmc655ZMgR~xH%ulO zw1R~xuS>jHtA+Ee&g+(sHm&7CkujJT6>JmaKII232`Cc-neHX_Vh91h24n$SzQ+yq>~ zTfNq2ic8+|Psi=(LYOZk0qx%nRpE`xps z5w=^GVer4~R@gBWs5$C@!2KjB?SG0I?ipx3ekW}DT>;M+qnwXQ_ zabnGr4frp?!l`dk%Bm0T5cE{_O5^H4-l)V%W(uwvKf;fBtpW-w;Y;kb+AN5q7GEbI zmmhNz`{s`Bb%uXoG1Dq+J2yDVvy|{%vz7^DH8YHqV_k48;IPA~^(-my+yye&o>bB# zVBe$#h9-z5NqcFTu^4)tkvX4uA~Fpk;*9Kkxs|Du#6|=}SaY418Q5kA z3@qk{N*tt>>Zd97!<7G47c zkAVOCxdEFJELiYsa`>SY4vrcwB=n*DZ>soLs$Vn154e9&3B$_&Bx)bz`$_o6z4~iT z^mn@7hx3K4u0M~mpBd7h3?5Mb8Ql2E;1u)ULLI--{~BBPNneNc3;pkrhM)BR?%4mN zhhqOlfWNx=zq0t%w)n|{kLX`5jb9o3YAyU^Py}P}SKHxN%3m+upOneOe_5e_yM}+| z@$3EblgBv8Uo`NS+vp!0emPKna*!nd*IE3_Li%-g{p8_8@fRL{-D?^k;fgDeE9kw=V^IO literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_second_table_1230_down.hwpx b/tests/fixtures/hancom_saved/pages_stacked_second_table_1230_down.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..db00348ab3132647a28f6ab8b22d6f959a23f921 GIT binary patch literal 8210 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

mOtVPv1-J~S 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_second_table_on_the_next_page.hwpx b/tests/fixtures/hancom_saved/pages_stacked_second_table_on_the_next_page.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..5d8dafd983c2d19bcb59f7c6f225097ace93416f GIT binary patch literal 10176 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 g|6qX0{)O@HxvnG&2Z=%e05at34T(uin}2_J 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 W%0Po=Auuom(7z{WPQsvlz4|}wr4RA| literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_three_tables.hwpx b/tests/fixtures/hancom_saved/pages_stacked_three_tables.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..4adeb3eb2a14c622044bc3c414d6cfbaba4b0240 GIT binary patch literal 8354 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 ZpL<Trj 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_two_pictures_past_the_foot.hwpx b/tests/fixtures/hancom_saved/pages_stacked_two_pictures_past_the_foot.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..ac01b829eb2ab0cb24e9029be02c5eddc2f89bc7 GIT binary patch literal 8508 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_two_tables.hwpx b/tests/fixtures/hancom_saved/pages_stacked_two_tables.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..69c75681419bdebeaf1efe06f3018b343b5ec685 GIT binary patch literal 8190 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 Non _assert_like_hancom(estimate_pages(_without_caches(data)), data, HANCOM_PAGES[name]) +# Objects placed top and bottom from the top of an empty paragraph after four lines (10 pt, spaced 160%), the +# lines after it of text, laid out and saved by Hancom: +STACKED_PAGES = { + "pages_stacked_two_tables": 1, # both 0 down: one right below the other, the line below both + "pages_stacked_three_tables": 1, + "pages_stacked_second_table_1230_down": 1, # still right below the first + "pages_stacked_second_table_5000_down": 1, # below a gap, which takes the paragraph's line + "pages_stacked_first_table_2000_down": 1, # the line above it, the next line below both + "pages_stacked_four_tables_with_margins": 1, # outer margins 140 + "pages_stacked_two_pictures": 1, + "pages_stacked_pictures_side_by_side": 1, # each at its own offset, the lines above them staying there + "pages_stacked_picture_and_table": 1, + "pages_stacked_two_pictures_past_the_foot": 2, # the second alone on the next page, the text on the first + "pages_stacked_two_tables_past_the_foot": 2, + "pages_stacked_middle_table_past_the_foot_cell": 2, # the second on the next page, the third below the first + "pages_stacked_middle_table_past_the_foot_table": 2, # (split row by row, the same) + "pages_stacked_table_taller_than_a_page_cell": 3, # split between lines over the two pages after the first + "pages_stacked_table_taller_than_a_page_table": 3, # row by row + "pages_stacked_four_tables_over_four_pages": 4, # the third below the first, 1230 down buried; the fourth + # past the second page, row by row over the last two + "pages_stacked_tables_filling_the_second_page": 2, # the third below the second, on the second page + "pages_stacked_second_table_on_the_next_page": 2, # outer margins 141: the second from the next page's top +} + + +@pytest.mark.parametrize("name", sorted(STACKED_PAGES)) +def test_objects_stacked_in_an_empty_paragraph_go_where_hancom_put_them(name: str) -> None: + # Each goes to the first page, from the paragraph's on, where it fits below the earlier ones it overlaps + # across; one fitting on none starts at the top of the page after the last one used. The lines take the + # first places clear of them. A last page holding only objects has no line, hence no HANCOM_PAGES entry. + data = (FIXTURES / f"{name}.hwpx").read_bytes() + hancom = _hancom_lines(data) + + for source in (data, _without_caches(data)): + estimate = estimate_pages(source) + estimated = [[line.vertpos for line in lines] for lines in estimate.lines] + + assert (estimate.unsupported, estimate.pages) == ((), STACKED_PAGES[name]) + assert {line.page for lines in estimate.lines for line in lines} == {0} + assert [mine for mine, theirs in zip(estimated, hancom) if theirs] == [theirs for theirs in hancom if theirs] + + +@pytest.mark.parametrize(("index", "height", "reason"), [ + (0, 60000, "objects placed top and bottom one below another past the page's foot"), # the first not fitting + (1, 70000, "an object placed top and bottom taller than a page"), # a picture fitting on no page +]) +def test_objects_stacked_otherwise_are_not_followed(index: int, height: int, reason: str) -> None: + out = io.BytesIO() + data = (FIXTURES / "pages_stacked_two_pictures.hwpx").read_bytes() + with zipfile.ZipFile(io.BytesIO(data)) as source, zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as target: + for info in source.infolist(): + payload = source.read(info.filename) + if info.filename.startswith("Contents/section"): + root = etree.fromstring(payload) + list(root.iter(f"{HP}pic"))[index].find(f"{HP}sz").set("height", str(height)) + payload = etree.tostring(root, xml_declaration=True, encoding="UTF-8", standalone=True) + target.writestr(info, payload) + + assert estimate_pages(out.getvalue()).unsupported == (f"section 0: {reason}",) + + def test_a_typed_ideographic_space_is_not_a_fixed_width_one() -> None: # 맑은 고딕 10 pt cells of narrowing widths, laid out and saved by Hancom: rows of "가나다라마" each followed # by one or two ideographic spaces typed in the text (U+3000), or by fixed-width spaces (hp:fwSpace, which From bfee6aaaec32971b4d5d2304036f3a0caea051bd Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Fri, 2 Oct 2026 01:56:35 +0900 Subject: [PATCH 2/5] feat(layout): a stacked first object not fitting under its paragraph flows from there The first of the objects stacked in an empty paragraph, fitting on no page below the paragraph's top, was refused. Hancom starts it where it stands and splits it at the page's foot as a flowing table (between lines when it splits by cell, row by row otherwise); the later ones follow on the pages it goes on to, which it fills, and the paragraph's line goes to the first place clear of them, on the next page's top when its own page has no room left. _Paginator._stacked now places the line itself (_lay would keep it on a fresh page even when the objects leave it no room), and _stack_spot finds an object's page. A picture or drawing past the page's foot is still refused. Four more Hancom-saved documents: the paragraph low on its page with two tables split by cell or by row, a small second table, and a first table taller than a page. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 8 +- src/hwpx/layout/pages.py | 99 ++++++++++-------- .../pages_stacked_low_small_second_table.hwpx | Bin 0 -> 8852 bytes ..._stacked_low_table_taller_than_a_page.hwpx | Bin 0 -> 9112 bytes .../pages_stacked_low_two_tables_cell.hwpx | Bin 0 -> 8953 bytes .../pages_stacked_low_two_tables_table.hwpx | Bin 0 -> 8949 bytes tests/test_layout_page_estimate.py | 25 +++-- 7 files changed, 76 insertions(+), 56 deletions(-) create mode 100644 tests/fixtures/hancom_saved/pages_stacked_low_small_second_table.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_low_table_taller_than_a_page.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_low_two_tables_cell.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_low_two_tables_table.hwpx diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bf699e7..4b053895 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,10 +15,10 @@ - 한/글은 개체를 차례로, 문단의 쪽부터 그 쪽에서 가로로 겹치는 앞 개체 아래에 들어가는 첫 쪽에 둔다. 문단의 쪽에서는 띄움과 앞 개체 아래 가운데 낮은 곳이다. 그래서 뒤 개체가 다음 쪽으로 간 앞 개체를 건너 문단의 쪽에 들어가기도 한다. - - 어느 쪽에도 들어가지 않는 개체는 마지막으로 쓴 쪽의 다음 쪽 맨 위에서 시작한다. 쪽보다 긴 표는 그 뒤 - 쪽들로 나뉜다(CELL은 줄 사이에서, TABLE은 행째). - - 문단의 줄과 뒤 줄은 개체를 비킨 첫 자리에 놓인다. - - 여러 단, 문단의 쪽에 들어가지 않는 첫 개체, 쪽보다 긴 표 아닌 개체는 전처럼 지원 밖이다. + - 어느 쪽에도 들어가지 않는 개체는 마지막으로 쓴 쪽의 다음 쪽 맨 위에서 시작한다. 다만 첫 개체는 문단 자리에서 + 시작해 흐른다. 쪽보다 긴 표는 그 뒤 쪽들로 나뉜다(CELL은 줄 사이에서, TABLE은 행째). + - 문단의 줄과 뒤 줄은 개체를 비킨 첫 자리에 놓이고, 그 쪽에 자리가 없으면 다음 쪽 맨 위로 간다. + - 여러 단, 쪽 바닥을 넘는 그림·도형은 전처럼 지원 밖이다. - 쪽 수 추정(실험, `estimate_pages`)이 `hp:t` 글 안에 글자로 든 전각 공백(U+3000)을 고정폭 빈칸(`hp:fwSpace`)으로 보던 것을 고친다(python-hwpx는 둘을 모두 U+3000으로 읽는다). 글자 전각 공백은 글꼴의 폭(대개 글자 크기만큼)을 차지하고, 그 뒤에서 줄이 나뉘며, 줄 끝에서는 몇 개가 이어져도 모두 매달린다. 전에는 1/4 폭의 고정폭 빈칸으로 diff --git a/src/hwpx/layout/pages.py b/src/hwpx/layout/pages.py index 5016796e..d33b887b 100644 --- a/src/hwpx/layout/pages.py +++ b/src/hwpx/layout/pages.py @@ -68,10 +68,10 @@ there), and the next paragraph goes below the table's end or below the paragraph's line and its own spacing before, whichever is lower; several anchored so to an empty paragraph (none up from it) go one by one to the first page, from the paragraph's on, where they fit below the earlier ones - they overlap across (on the paragraph's page at their offset or below them, whichever is lower), and - one that fits on none starts at the top of the page after the last one used (a table taller than a - page split over the pages after); the paragraph's line and the lines after take the first places - clear of them; + they overlap across (on the paragraph's page at their offset or below them, whichever is lower); + the first, fitting there on none, flows from where it stands, and a later one starts at the top of + the page after the last one used (a table taller than a page split over the pages after); the + paragraph's line and the lines after take the first places clear of them; wrapped square anywhere across the column (from the column's, the paragraph's or the paper's left or right) before a paragraph's text (or alone in its paragraph), the text goes on each side of it at least 1440 wide that its text flow allows (both, the larger, the left or the right): a line @@ -132,7 +132,7 @@ paragraph (Hancom starts a new section there), a line or character grid, an object with text or other objects in its paragraph (but objects set as characters, with line spacing in percent or fixed, one top-and-bottom object placed from the paragraph's top, several so in an empty paragraph -(but in columns, or the first not fitting under the paragraph's top), and one object wrapped square +(but in columns, or a picture or drawing past the page's foot), and one object wrapped square across the column before any text; an object offset down, but a flowing table, or wrapped square stays on one page with the lines above or beside it), footnotes in such a paragraph, two tables starting past their @@ -2161,55 +2161,70 @@ def _flow_below_band(self, para: _Para, table: _FlowTable, top: int) -> None: def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> None: """Objects stacked in a paragraph holding nothing else go one by one to the first page, from the - paragraph's on, where they fit below the earlier ones there they overlap across: on the paragraph's page - at their offset below its top above its spacing or lower, on a later page from its top. One fitting on - none starts at the top of the page after the last one used, a table taller than a page split over the - pages after. No line goes into them: the paragraph's line takes the first place clear of them on its - page, as the lines after do.""" - - if self.band is not None or para.notes or self.columns > 1: + paragraph's on, where they fit below the earlier ones there they overlap across (see + :meth:`_stack_spot`). The first, fitting there on none, flows from where it stands (a table split at the + page's foot); a later one starts at the top of the page after the last one used, a table taller than a + page split over the pages after. A page a table goes on from is full. No line goes into them: the + paragraph's line takes the first place clear of them, on a later page when its own has none, and the + lines after follow it.""" + + if self.band is not None or para.notes or self.columns > 1 or self.page_notes[1]: raise _Unsupported("objects placed top and bottom one below another beside other objects") - start, broke = self._breaks(para, start) + start, _ = self._breaks(para, start) if self.last_vp is not None and start + para.height(0) > self.body: # its line goes on to the next start = self._next_frame(para, 0, True) # page, the objects with it home, top = self.frame, start - para.prev placed: dict[int, list[tuple[int, int, int, int]]] = {} # frame -> left, right, top, bottom last = home for obj in para.stack: - spot = None - for frame in range(home, last + 1): - below = [box[3] for box in placed.get(frame, ()) if box[0] < obj.right and obj.left < box[1]] - y = max([top + obj.offset if frame == home else 0] + below) - if y + obj.height <= self.body: - spot = frame, y - break - if spot is not None: - placed.setdefault(spot[0], []).append((obj.left, obj.right, spot[1], spot[1] + obj.height)) - continue - if not placed: - raise _Unsupported("objects placed top and bottom one below another past the page's foot") - last += 1 # from the top of the page after the last one used - if obj.height <= self.body: - placed.setdefault(last, []).append((obj.left, obj.right, 0, obj.height)) - continue - if obj.table is None: - raise _Unsupported("an object placed top and bottom taller than a page") - end_frame, end = _flow_table(obj.table, last, obj.table.above, self.body) - for frame in range(last, end_frame): - placed.setdefault(frame, []).append((obj.left, obj.right, 0, self.body)) - placed.setdefault(end_frame, []).append((obj.left, obj.right, 0, end + obj.table.below)) - last = end_frame + spot = self._stack_spot(placed, obj, home, last, top) + if spot is None: # the first from where it stands, a later one from the top of the page after the last + spot = (last + 1, 0) if placed else (home, top + obj.offset) + if obj.table is None and spot[1] + obj.height > self.body: + raise _Unsupported("an object placed top and bottom past the page's foot") + frame, y = spot + end_frame, bottom = frame, y + obj.height + if bottom > self.body: # a table split over the pages from there + assert obj.table is not None + end_frame, end = _flow_table(obj.table, frame, y + obj.table.above, self.body) + bottom = end + obj.table.below + for page in range(frame, end_frame + 1): + placed.setdefault(page, []).append( + (obj.left, obj.right, y if page == frame else 0, bottom if page == end_frame else self.body)) + last = max(last, end_frame) for frame, boxes in placed.items(): if self.bands.get(frame) or self.sides.get(frame) or frame != home and self.reserved.get(frame): raise _Unsupported("objects placed top and bottom one below another beside other objects") self.bands[frame] = [(above, below) for _, _, above, below in boxes] self.table_end = max(self.table_end, last) - first = len(self.out) - if self._lay(index, paras, para, start, broke): - laid = self.laid or para - self.last_vp, self.last_pitch, self.pending_next = self.out[-1][1], laid.advance(laid.lines - 1), para.next - if self.out[first][0] != home: - raise _Unsupported("objects placed top and bottom one below another past the page's foot") + frame, y, height = home, start, para.height(0) + while True: # the paragraph's line, at the first place clear of them + hits = [below for above, below in self.bands.get(frame, ()) if y < below and y + height > above] + if hits: + y = max(hits) + elif y + height <= self.body: + break + else: + frame, y = frame + 1, self.reserved.get(frame + 1, 0) + para.prev + if frame != home: + self.page_notes = [0, 0] + self.frame, self.laid = frame, para + self.out.append((frame, y)) + self._reach(frame, y, y + height) + self.last_vp, self.last_pitch, self.pending_next = y, para.advance(0), para.next + + def _stack_spot(self, placed: dict[int, list[tuple[int, int, int, int]]], obj: _Stacked, home: int, last: int, + top: int) -> tuple[int, int] | None: + """The first of the pages *home* to *last* where *obj* fits below the objects *placed* there it overlaps + across (on *home* at its offset below *top* or lower, on a later page from its top), and where; ``None`` + when it fits on none.""" + + for frame in range(home, last + 1): + below = [box[3] for box in placed.get(frame, ()) if box[0] < obj.right and obj.left < box[1]] + y = max([top + obj.offset if frame == home else 0] + below) + if y + obj.height <= self.body: + return frame, y + return None def _anchored(self, index: int, paras: list[_Para], para: _Para, start: int) -> None: """The lines before the anchor's line, the object at that line's top, then the rest of the diff --git a/tests/fixtures/hancom_saved/pages_stacked_low_small_second_table.hwpx b/tests/fixtures/hancom_saved/pages_stacked_low_small_second_table.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..fff53b441b7218b268170838dbea911a832c72fc GIT binary patch literal 8852 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 Jf+v4Y{U2wQAdmn6 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_low_two_tables_cell.hwpx b/tests/fixtures/hancom_saved/pages_stacked_low_two_tables_cell.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..e79400454af5cf0ae5035787884e433f9c1cd04d GIT binary patch literal 8953 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 Non # Objects placed top and bottom from the top of an empty paragraph after four lines (10 pt, spaced 160%), the -# lines after it of text, laid out and saved by Hancom: -STACKED_PAGES = { +# lines after it of text, laid out and saved by Hancom: its pages, and the page of the paragraph's line and +# the lines after when not the first: +STACKED_PAGES: dict[str, int | tuple[int, int]] = { "pages_stacked_two_tables": 1, # both 0 down: one right below the other, the line below both "pages_stacked_three_tables": 1, "pages_stacked_second_table_1230_down": 1, # still right below the first @@ -431,6 +432,11 @@ def test_without_line_caches_formfit_breaks_the_lines_the_same(name: str) -> Non # past the second page, row by row over the last two "pages_stacked_tables_filling_the_second_page": 2, # the third below the second, on the second page "pages_stacked_second_table_on_the_next_page": 2, # outer margins 141: the second from the next page's top + # The paragraph low on its page, the first table not fitting under it: it flows from there. + "pages_stacked_low_two_tables_cell": (2, 1), # split at the foot, the second below its end, then the line + "pages_stacked_low_two_tables_table": (2, 1), # its first row alone on the first page + "pages_stacked_low_small_second_table": (2, 1), # the small second one not back on the first page + "pages_stacked_low_table_taller_than_a_page": (3, 2), # no room left for the line: the next page's top } @@ -441,21 +447,19 @@ def test_objects_stacked_in_an_empty_paragraph_go_where_hancom_put_them(name: st # first places clear of them. A last page holding only objects has no line, hence no HANCOM_PAGES entry. data = (FIXTURES / f"{name}.hwpx").read_bytes() hancom = _hancom_lines(data) + pages, lines_page = STACKED_PAGES[name] if isinstance(STACKED_PAGES[name], tuple) else (STACKED_PAGES[name], 0) for source in (data, _without_caches(data)): estimate = estimate_pages(source) estimated = [[line.vertpos for line in lines] for lines in estimate.lines] - assert (estimate.unsupported, estimate.pages) == ((), STACKED_PAGES[name]) - assert {line.page for lines in estimate.lines for line in lines} == {0} + assert (estimate.unsupported, estimate.pages) == ((), pages) + assert [lines[-1].page for lines in estimate.lines][-1] == lines_page assert [mine for mine, theirs in zip(estimated, hancom) if theirs] == [theirs for theirs in hancom if theirs] -@pytest.mark.parametrize(("index", "height", "reason"), [ - (0, 60000, "objects placed top and bottom one below another past the page's foot"), # the first not fitting - (1, 70000, "an object placed top and bottom taller than a page"), # a picture fitting on no page -]) -def test_objects_stacked_otherwise_are_not_followed(index: int, height: int, reason: str) -> None: +@pytest.mark.parametrize(("index", "height"), [(0, 60000), (1, 70000)]) # the first not fitting, a later on no page +def test_a_stacked_picture_past_the_page_foot_is_not_followed(index: int, height: int) -> None: out = io.BytesIO() data = (FIXTURES / "pages_stacked_two_pictures.hwpx").read_bytes() with zipfile.ZipFile(io.BytesIO(data)) as source, zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as target: @@ -467,7 +471,8 @@ def test_objects_stacked_otherwise_are_not_followed(index: int, height: int, rea payload = etree.tostring(root, xml_declaration=True, encoding="UTF-8", standalone=True) target.writestr(info, payload) - assert estimate_pages(out.getvalue()).unsupported == (f"section 0: {reason}",) + assert estimate_pages(out.getvalue()).unsupported == ( + "section 0: an object placed top and bottom past the page's foot",) def test_a_typed_ideographic_space_is_not_a_fixed_width_one() -> None: From 265e8179879f1685c28c8843c287d4a8f7baf7ad Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Fri, 2 Oct 2026 02:41:03 +0900 Subject: [PATCH 3/5] fix(layout): say which case of stacked objects is not followed The refusals for objects stacked in an empty paragraph now name the case: in columns, beside notes or a table's band, or on a page holding other objects. A flowing table reaching such objects on a page is no longer reported as reaching an object placed on the paper. Co-Authored-By: Claude Opus 5.5 --- src/hwpx/layout/pages.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/hwpx/layout/pages.py b/src/hwpx/layout/pages.py index d33b887b..127ced06 100644 --- a/src/hwpx/layout/pages.py +++ b/src/hwpx/layout/pages.py @@ -2050,6 +2050,7 @@ def __init__(self, body: int, columns: int, notes: _NoteShape, self.widths = widths # each column's width when they differ #: frame -> (top, bottom) of the objects placed on the paper there: no line in them self.bands = {frame: list(found) for frame, found in (bands or {}).items()} # stacked objects add theirs + self.stacked: set[int] = set() # the frames objects stacked in an empty paragraph went to #: frame -> (top, bottom) of the ones leaving a line's room beside them, and whether a line, a table #: or an object reaches one of them (set beside it by Hancom, which is not followed) self.sides = sides or {} @@ -2168,8 +2169,10 @@ def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> N paragraph's line takes the first place clear of them, on a later page when its own has none, and the lines after follow it.""" - if self.band is not None or para.notes or self.columns > 1 or self.page_notes[1]: - raise _Unsupported("objects placed top and bottom one below another beside other objects") + if self.columns > 1: + raise _Unsupported("objects placed top and bottom one below another in columns") + if self.band is not None or para.notes or self.page_notes[1]: + raise _Unsupported("objects placed top and bottom one below another beside notes or a table's band") start, _ = self._breaks(para, start) if self.last_vp is not None and start + para.height(0) > self.body: # its line goes on to the next start = self._next_frame(para, 0, True) # page, the objects with it @@ -2194,8 +2197,9 @@ def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> N last = max(last, end_frame) for frame, boxes in placed.items(): if self.bands.get(frame) or self.sides.get(frame) or frame != home and self.reserved.get(frame): - raise _Unsupported("objects placed top and bottom one below another beside other objects") + raise _Unsupported("objects placed top and bottom one below another on a page with other objects") self.bands[frame] = [(above, below) for _, _, above, below in boxes] + self.stacked.add(frame) self.table_end = max(self.table_end, last) frame, y, height = home, start, para.height(0) while True: # the paragraph's line, at the first place clear of them @@ -2361,7 +2365,9 @@ def _clear_of_paper(self, first: int, last: int, top: int = 0, end: int | None = touching = below and frame == first if any(above < high and (low < bottom if touching else low <= bottom) for above, bottom in self.bands.get(frame, ())): - raise _Unsupported("a table on a page with an object placed on the paper") + stacked = frame in self.stacked + raise _Unsupported("a table on a page with objects stacked in an empty paragraph" if stacked + else "a table on a page with an object placed on the paper") def _reach(self, frame: int, top: int, bottom: int) -> None: """Note whether something from *top* to *bottom* in *frame* reaches the band of an object placed on From 2c1b85d80faaaf09801407d52e9f633dad4181d1 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Fri, 2 Oct 2026 03:26:34 +0900 Subject: [PATCH 4/5] feat(layout): objects stacked in a later empty paragraph keep clear of the earlier ones Objects stacked in an empty paragraph on a page holding an earlier such paragraph's objects were refused. Hancom places them, and the paragraph's line, clear of those too: each goes to the first page where it fits below the objects there it overlaps across, the earlier paragraphs' included, and the pages holding such objects count as used. A table going on over a page end still goes on at the next page's top, across whatever is there. The paginator now keeps each stacked object's span (_Paginator.stacked) to place the next ones by. Four more Hancom-saved documents: two such paragraphs one after the other (one over four pages, as in a form), and such a paragraph followed by a flowing table and by text going on over two pages. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 + src/hwpx/layout/pages.py | 39 +++++++++++------- .../pages_stacked_in_two_paragraphs.hwpx | Bin 0 -> 8596 bytes ...ked_in_two_paragraphs_over_four_pages.hwpx | Bin 0 -> 15481 bytes .../pages_stacked_then_a_flowing_table.hwpx | Bin 0 -> 8581 bytes ...ages_stacked_then_text_over_two_pages.hwpx | Bin 0 -> 9433 bytes tests/test_layout_page_estimate.py | 8 ++++ 7 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 tests/fixtures/hancom_saved/pages_stacked_in_two_paragraphs.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_in_two_paragraphs_over_four_pages.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_then_a_flowing_table.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_then_text_over_two_pages.hwpx diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b053895..52c6c283 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ 문단의 쪽에 들어가기도 한다. - 어느 쪽에도 들어가지 않는 개체는 마지막으로 쓴 쪽의 다음 쪽 맨 위에서 시작한다. 다만 첫 개체는 문단 자리에서 시작해 흐른다. 쪽보다 긴 표는 그 뒤 쪽들로 나뉜다(CELL은 줄 사이에서, TABLE은 행째). + - 이런 문단이 이어지면 뒤 문단의 개체도 앞 문단 개체를 비켜 들어가는 첫 쪽에 놓인다. 다만 쪽을 넘어 이어지는 표의 + 나머지는 다음 쪽 맨 위에서 이어지고, 그 쪽의 다른 개체와 겹쳐도 비키지 않는다. - 문단의 줄과 뒤 줄은 개체를 비킨 첫 자리에 놓이고, 그 쪽에 자리가 없으면 다음 쪽 맨 위로 간다. - 여러 단, 쪽 바닥을 넘는 그림·도형은 전처럼 지원 밖이다. - 쪽 수 추정(실험, `estimate_pages`)이 `hp:t` 글 안에 글자로 든 전각 공백(U+3000)을 고정폭 빈칸(`hp:fwSpace`)으로 diff --git a/src/hwpx/layout/pages.py b/src/hwpx/layout/pages.py index 127ced06..58fb0a0d 100644 --- a/src/hwpx/layout/pages.py +++ b/src/hwpx/layout/pages.py @@ -2050,7 +2050,8 @@ def __init__(self, body: int, columns: int, notes: _NoteShape, self.widths = widths # each column's width when they differ #: frame -> (top, bottom) of the objects placed on the paper there: no line in them self.bands = {frame: list(found) for frame, found in (bands or {}).items()} # stacked objects add theirs - self.stacked: set[int] = set() # the frames objects stacked in an empty paragraph went to + #: frame -> left, right, top, bottom of the objects stacked in empty paragraphs that went there + self.stacked: dict[int, list[tuple[int, int, int, int]]] = {} #: frame -> (top, bottom) of the ones leaving a line's room beside them, and whether a line, a table #: or an object reaches one of them (set beside it by Hancom, which is not followed) self.sides = sides or {} @@ -2163,11 +2164,12 @@ def _flow_below_band(self, para: _Para, table: _FlowTable, top: int) -> None: def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> None: """Objects stacked in a paragraph holding nothing else go one by one to the first page, from the paragraph's on, where they fit below the earlier ones there they overlap across (see - :meth:`_stack_spot`). The first, fitting there on none, flows from where it stands (a table split at the - page's foot); a later one starts at the top of the page after the last one used, a table taller than a - page split over the pages after. A page a table goes on from is full. No line goes into them: the - paragraph's line takes the first place clear of them, on a later page when its own has none, and the - lines after follow it.""" + :meth:`_stack_spot`), those of earlier such paragraphs included. The first, not fitting on the + paragraph's page, flows from where it stands (a table split at the page's foot, going on at the next + page's top whatever is there); a later one, fitting on no page holding objects, starts at the top of + the page after, a table taller than a page split over the pages after. A page a table goes on from is + full. No line goes into them: the paragraph's line takes the first place clear of them, on a later + page when its own has none, and the lines after follow it.""" if self.columns > 1: raise _Unsupported("objects placed top and bottom one below another in columns") @@ -2177,12 +2179,13 @@ def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> N if self.last_vp is not None and start + para.height(0) > self.body: # its line goes on to the next start = self._next_frame(para, 0, True) # page, the objects with it home, top = self.frame, start - para.prev - placed: dict[int, list[tuple[int, int, int, int]]] = {} # frame -> left, right, top, bottom + placed = {frame: list(boxes) for frame, boxes in self.stacked.items() if frame >= home} last = home - for obj in para.stack: - spot = self._stack_spot(placed, obj, home, last, top) - if spot is None: # the first from where it stands, a later one from the top of the page after the last - spot = (last + 1, 0) if placed else (home, top + obj.offset) + for number, obj in enumerate(para.stack): + end = last if number == 0 else max([last, *placed]) + spot = self._stack_spot(placed, obj, home, end, top) + if spot is None: # the first from where it stands, a later one from the top of the page after + spot = (end + 1, 0) if number else (home, max([top + obj.offset] + self._below(placed, obj, home))) if obj.table is None and spot[1] + obj.height > self.body: raise _Unsupported("an object placed top and bottom past the page's foot") frame, y = spot @@ -2196,10 +2199,11 @@ def _stacked(self, index: int, paras: list[_Para], para: _Para, start: int) -> N (obj.left, obj.right, y if page == frame else 0, bottom if page == end_frame else self.body)) last = max(last, end_frame) for frame, boxes in placed.items(): - if self.bands.get(frame) or self.sides.get(frame) or frame != home and self.reserved.get(frame): + if self.bands.get(frame) and frame not in self.stacked or self.sides.get(frame) \ + or frame != home and self.reserved.get(frame): raise _Unsupported("objects placed top and bottom one below another on a page with other objects") self.bands[frame] = [(above, below) for _, _, above, below in boxes] - self.stacked.add(frame) + self.stacked[frame] = boxes self.table_end = max(self.table_end, last) frame, y, height = home, start, para.height(0) while True: # the paragraph's line, at the first place clear of them @@ -2224,12 +2228,17 @@ def _stack_spot(self, placed: dict[int, list[tuple[int, int, int, int]]], obj: _ when it fits on none.""" for frame in range(home, last + 1): - below = [box[3] for box in placed.get(frame, ()) if box[0] < obj.right and obj.left < box[1]] - y = max([top + obj.offset if frame == home else 0] + below) + y = max([top + obj.offset if frame == home else 0] + self._below(placed, obj, frame)) if y + obj.height <= self.body: return frame, y return None + @staticmethod + def _below(placed: dict[int, list[tuple[int, int, int, int]]], obj: _Stacked, frame: int) -> list[int]: + """The bottoms of the objects *placed* on *frame* that *obj* overlaps across.""" + + return [box[3] for box in placed.get(frame, ()) if box[0] < obj.right and obj.left < box[1]] + def _anchored(self, index: int, paras: list[_Para], para: _Para, start: int) -> None: """The lines before the anchor's line, the object at that line's top, then the rest of the paragraph below the object.""" diff --git a/tests/fixtures/hancom_saved/pages_stacked_in_two_paragraphs.hwpx b/tests/fixtures/hancom_saved/pages_stacked_in_two_paragraphs.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..dd1937d22198ae5b7230897efd5b42ecf5acaa19 GIT binary patch literal 8596 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 m|M5ru*}H#Z6jA>J Non "pages_stacked_low_two_tables_table": (2, 1), # its first row alone on the first page "pages_stacked_low_small_second_table": (2, 1), # the small second one not back on the first page "pages_stacked_low_table_taller_than_a_page": (3, 2), # no room left for the line: the next page's top + # After an empty paragraph whose second table of two went on to the next page: + "pages_stacked_in_two_paragraphs": 2, # another such paragraph: its tables below the first's line + "pages_stacked_in_two_paragraphs_over_four_pages": (4, 3), # four tables, then two more from where the + # first's line leaves off: the first of them split + # over the next page's top across the other's, the + # second below it, the line on the fourth page + "pages_stacked_then_a_flowing_table": 2, # a paragraph holding one flowing table: under its line + "pages_stacked_then_text_over_two_pages": (3, 2), # 60 lines, going on below the second table } From 38a83e63e6994a0896a3bb397e796b3ace1cc4b7 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Fri, 2 Oct 2026 10:45:05 +0900 Subject: [PATCH 5/5] fix(layout): let a line moved below an object's band go on to the next page A line moved below an object's band on a fresh page took that page however tall it was, as a line at a page's top does, and overflowed it. Hancom skips the page instead: only a line at the top takes a page it is taller than. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 3 ++- src/hwpx/layout/pages.py | 9 +++++---- ...n_a_table_as_character_below_a_short_one.hwpx | Bin 0 -> 8085 bytes ..._a_table_as_character_past_a_filled_page.hwpx | Bin 0 -> 8086 bytes ...ked_then_text_below_a_nearly_filled_page.hwpx | Bin 0 -> 8788 bytes ...ges_stacked_then_text_past_a_filled_page.hwpx | Bin 0 -> 8781 bytes tests/test_layout_page_estimate.py | 5 +++++ 7 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/hancom_saved/pages_stacked_then_a_table_as_character_below_a_short_one.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_then_a_table_as_character_past_a_filled_page.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_then_text_below_a_nearly_filled_page.hwpx create mode 100644 tests/fixtures/hancom_saved/pages_stacked_then_text_past_a_filled_page.hwpx diff --git a/CHANGELOG.md b/CHANGELOG.md index 0da0d90e..9552466b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,7 +41,8 @@ 시작해 흐른다. 쪽보다 긴 표는 그 뒤 쪽들로 나뉜다(CELL은 줄 사이에서, TABLE은 행째). - 이런 문단이 이어지면 뒤 문단의 개체도 앞 문단 개체를 비켜 들어가는 첫 쪽에 놓인다. 다만 쪽을 넘어 이어지는 표의 나머지는 다음 쪽 맨 위에서 이어지고, 그 쪽의 다른 개체와 겹쳐도 비키지 않는다. - - 문단의 줄과 뒤 줄은 개체를 비킨 첫 자리에 놓이고, 그 쪽에 자리가 없으면 다음 쪽 맨 위로 간다. + - 문단의 줄과 뒤 줄은 개체를 비킨 첫 자리에 놓이고, 그 쪽에 자리가 없으면 다음 쪽 맨 위로 간다. 개체가 혼자 + 차지한 쪽으로 넘어간 줄(글자처럼 둔 표가 든 줄도)은 개체 아래 남은 자리에 들어가지 않으면 그 쪽을 건너뛴다. - 여러 단, 쪽 바닥을 넘는 그림·도형은 전처럼 지원 밖이다. - 쪽 수 추정(실험, `estimate_pages`)이 `hp:t` 글 안에 글자로 든 전각 공백(U+3000)을 고정폭 빈칸(`hp:fwSpace`)으로 보던 것을 고친다(python-hwpx는 둘을 모두 U+3000으로 읽는다). 글자 전각 공백은 글꼴의 폭(대개 글자 크기만큼)을 diff --git a/src/hwpx/layout/pages.py b/src/hwpx/layout/pages.py index 4d71afcf..8572c148 100644 --- a/src/hwpx/layout/pages.py +++ b/src/hwpx/layout/pages.py @@ -2503,20 +2503,21 @@ def _lay(self, index: int, paras: list[_Para], para: _Para, start: int, broke: b para = self._at_width(para, 0) remaining, first_chunk = para.lines, True fresh = self.last_vp is None or broke + below = False # the next line was moved below an object's band while remaining: done = para.lines - remaining hit = self._band_hit(para, done, remaining, start) if hit is not None and hit[0] == 0: # the line reaches an object placed on the paper: below it - start = hit[1] + start, below = hit[1], True continue count = self._chunk(index, paras, para, start, remaining, done, first_chunk) - if count == 0 and (self.last_vp is None or fresh) and not self.reserved.get(self.frame): + if count == 0 and (self.last_vp is None or fresh) and not below and not self.reserved.get(self.frame): count = 1 # a line taller than the page still takes an empty page (and overflows it) if hit is not None and hit[0] < count: # the lines above it stay, the next goes below it count = hit[0] self.out.extend((self.frame, start + para.span(done, j)) for j in range(count)) self._place(para, done, count) - remaining, start, first_chunk = remaining - count, hit[1], False + remaining, start, first_chunk, below = remaining - count, hit[1], False, True continue self.out.extend((self.frame, start + para.span(done, j)) for j in range(count)) self._place(para, done, count) @@ -2528,7 +2529,7 @@ def _lay(self, index: int, paras: list[_Para], para: _Para, start: int, broke: b self.laid = para return False if remaining: - start = self._next_frame(para, count, first_chunk) + start, below = self._next_frame(para, count, first_chunk), False again = self._at_width(para, para.lines - remaining) if again is not para: para, remaining = again, again.lines diff --git a/tests/fixtures/hancom_saved/pages_stacked_then_a_table_as_character_below_a_short_one.hwpx b/tests/fixtures/hancom_saved/pages_stacked_then_a_table_as_character_below_a_short_one.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..8e21675deea101f3eaeb2981f8fd02594f8851c9 GIT binary patch literal 8085 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 TF9ZOf!oJ=xpM*gEc=!JR`t&!w literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_then_a_table_as_character_past_a_filled_page.hwpx b/tests/fixtures/hancom_saved/pages_stacked_then_a_table_as_character_past_a_filled_page.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..cfa1f232c14d73285ba068328e1d70e620516bd4 GIT binary patch literal 8086 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 U;9dv-z=VIj;XVn4^5O3P0Za2Vi~s-t literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_then_text_below_a_nearly_filled_page.hwpx b/tests/fixtures/hancom_saved/pages_stacked_then_text_below_a_nearly_filled_page.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..baece2e63dc95c0e9c38b6fb4d82236057fd764a GIT binary patch literal 8788 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 LCUwC(A|U)9X*!A9 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/pages_stacked_then_text_past_a_filled_page.hwpx b/tests/fixtures/hancom_saved/pages_stacked_then_text_past_a_filled_page.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..a61ba80651a9d4987b48458940a4d88592f2b554 GIT binary patch literal 8781 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 F{{VPclve-% literal 0 HcmV?d00001 diff --git a/tests/test_layout_page_estimate.py b/tests/test_layout_page_estimate.py index d0b4d25e..09f0dfbd 100644 --- a/tests/test_layout_page_estimate.py +++ b/tests/test_layout_page_estimate.py @@ -475,6 +475,11 @@ def test_without_line_caches_formfit_breaks_the_lines_the_same(name: str) -> Non # second below it, the line on the fourth page "pages_stacked_then_a_flowing_table": 2, # a paragraph holding one flowing table: under its line "pages_stacked_then_text_over_two_pages": (3, 2), # 60 lines, going on below the second table + # After an empty paragraph whose second table went alone to the top of the next page, filling it but for 1500: + "pages_stacked_then_text_below_a_nearly_filled_page": (3, 2), # 60 lines: one in those 1500, the rest after + "pages_stacked_then_text_past_a_filled_page": (3, 2), # 900 left, less than a line: the lines skip that page + "pages_stacked_then_a_table_as_character_past_a_filled_page": (3, 2), # one 55000 tall skips it too + "pages_stacked_then_a_table_as_character_below_a_short_one": (2, 1), # under a second table 5762 tall }