Skip to content

estimate_pages: 떠 있는 개체의 어울림·PAGE/PAPER 기준 배치 지원 #309

Description

@airmang

검사한 공개 main은 97670eb2462e106134633acd78a8097d96db0fdd입니다(Python 3.13.13, macOS). 아래 입력은 저장소에 포함되어 있습니다. 추가 참조 검증은 아직 실행하지 않았으며, 관찰 결과를 바탕으로 엔진 지원을 확대하기 위한 과제입니다. core에 외부 실행 환경 의존을 추가하는 제안은 아닙니다.

외부 입력에서 재현한 제한

각 파일을 hwpx.experimental.estimate_pages(path)에 전달하면 pages=None과 아래 이유가 반환됩니다. 모두 tests/fixtures/ 아래 경로입니다.

경로 section 0의 거부 이유
hwpxlib_corpus/error__20230809__test.hwpx rect wrapped square elsewhere than at a column edge
hwpxlib_corpus/error__20240305__2022.hwpx rect placed TOP_AND_BOTTOM relative to PAPER
hwpxlib_corpus/reader_writer__SimpleOLE.hwpx ole wrapped square elsewhere than at a column edge
hwpxlib_corpus/reader_writer__SimplePicture.hwpx pic wrapped square elsewhere than at a column edge
m3_gongmun_gold/seoul_sihaengmun.hwpx tbl placed TOP_AND_BOTTOM relative to PAGE

원본과 캐시 제거 진단 복사본에서 같은 제한을 관찰했습니다. 파일명이 error인 입력의 정상 한컴 동작 여부도 참조 실행에서 먼저 확인해 주세요.

처리 요청

기준 틀(PARA/PAGE/PAPER), 오프셋, 어울림 종류를 하나씩 바꾼 A/B 사례를 실제로 실행해 본문 이동·줄 위치·쪽 수를 관찰하고, 배치군별로 지원을 확대해 주세요. 관련 코드: src/hwpx/layout/pages.py의 개체 배치/어울림 로직. 중첩 표 행 분할을 다룬 #307과는 별도입니다. 거부 메시지 제거보다 실제 본문 밀림·쪽 넘김 비교가 완료 기준입니다.

검증 원칙

입력 SHA-256·산출물 해시를 기록하고, 페이지 렌더와 한컴 재저장 HWPX를 비교해 회귀 기준으로 남겨 주세요. 캐시가 있는 원본과 편집으로 캐시가 무효화된 경우를 구분하고, 검증 환경에 따라 결과가 다르면 별도 기준으로 기록해야 합니다. 미지원 이유를 제거하거나 파일이 열리는 것만으로 완료하지 않습니다.

Activity

  1. airmang commented on Sep 30, 2026

    @airmang
    OwnerAuthor

    한/글에서 확인했습니다.

    • 파일 이름이 error인 두 입력(error__20230809__test.hwpx, error__20240305__2022.hwpx)은 한/글에서 정상으로 열리고, 각각 1쪽으로 그려지며, 다시 저장도 됩니다.
    • error__20230809__test.hwpx에서 거부 사유가 된 rect는 이 문서의 유일한 개체인 첫 글자 장식(TripleLine, 문단 기준, SQUARE)입니다. 장식 옆으로 가는 줄의 규칙(#313에 적음: 줄 k는 k × 줄 간격 < 상자 높이이면 상자 옆으로 감)으로 #324에서 지원했습니다.
    • error__20240305__2022.hwpx(종이 기준 위아래 사각형)는 #315로 지원했습니다. 1쪽이고, 줄 캐시가 있을 때와 없을 때 모두 줄 위치가 한/글과 같습니다.
    • seoul_sihaengmun.hwpx의 나누지 않는 표는 #326으로 지원했고, 쪽 기준 위아래 표는 #328에서 다룹니다.
    • SimpleOLE(문단 가운데 어울림)는 #330으로 지원했습니다. 개체 한쪽에 남는 폭이 1440 이상이면 그쪽에도 줄이 흐르고, 양쪽이면 한 줄이 같은 높이의 두 조각이 됩니다. SimplePicture(세로가 종이 기준인 어울림)는 그 뒤에 이어 갑니다. 두 입력은 한/글에서 각각 1쪽입니다.
  2. airmang commented on Oct 1, 2026

    @airmang
    OwnerAuthor

    남은 입력도 지원했습니다.

    • SimplePicture.hwpx(종이 기준 어울림 그림): feat(layout): page estimate for objects wrapped square on the paper #340. 곁에 자리가 남는 종이 기준 어울림 개체는 그 자리에 닿는 줄·표·개체가 없으면 배치에 영향이 없습니다. 줄 캐시가 있을 때와 없을 때 모두 1쪽으로 한/글과 같습니다.
    • 곁에 1440 미만만 남는 종이 기준 어울림 개체는 위아래 배치처럼 줄을 밉니다(feat(layout): page estimate for objects wrapped square on the paper #340).
    • 개체 자리에 닿는 줄은 줄 캐시가 있으면 캐시대로 따릅니다(feat(layout): follow cached lines beside a square object on the paper #363). 한/글은 그런 줄을 같은 높이·간격으로 개체 곁에 좁혀 둡니다. 캐시 없는 줄이나 표·개체가 닿으면 아직 지원 밖입니다.
    • 이로써 이 이슈의 다섯 입력(error__20230809__test, error__20240305__2022, SimpleOLE, SimplePicture, seoul_sihaengmun)은 원본 그대로 모두 쪽 수를 내고, 한/글과 같은 1쪽입니다. 줄 캐시를 지운 경우에는 네 입력이 1쪽이고, seoul_sihaengmun만 중첩 표 때문에 아직 지원 밖입니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions