Skip to content

fix(layout): read an object offset written with a minus sign as 0, as Hancom does - #459

Merged
airmang merged 1 commit into
mainfrom
fix/page-estimate-signed-offset-text-as-zero
Oct 11, 2026
Merged

airmang merged 1 commit into
mainfrom
fix/page-estimate-signed-offset-text-as-zero

Conversation

@airmang

@airmang airmang commented Oct 11, 2026

Copy link
Copy Markdown
Owner

무엇

한/글은 위·왼쪽으로 올린 개체 오프셋을 부호 없는 32비트로 저장한다(-1500 → 4294965796). 빼기 부호로 쓴 값(vertOffset="-1500")은 0으로 읽는다. 개체를 문단(또는 종이) 기준 자리에 그대로 그리고, 저장할 때 0으로 고쳐 쓴다.

쪽 수 추정은 그런 값을 그만큼 위(왼쪽)로 읽어서, 개체 뒤 줄 자리가 한/글과 달랐다. 이제 vertOffset·horzOffset을 읽는 19곳이 모두 _pos_offset() 하나를 거친다. 빼기 부호로 쓴 값은 0으로, 나머지는 전처럼 부호 없는 수로 읽는다.

확인

  • 이미 있던 한/글 저장본 pages_para_shape_signed_offset은 한/글이 0으로 고쳐 쓴 판이다. 거기에 -1500을 다시 써 넣고 추정한 줄 자리가, 줄 배치 정보가 있을 때와 지웠을 때 모두 한/글과 같은지 보는 새 시험을 더했다. 고치기 전 코드에서는 실패한다(13번째 문단 23500, 한/글은 25000).
  • 오프셋·개체 관련 합성 묶음 27개(입력 그대로·한/글 다시 저장 두 갈래)를 고치기 전과 비교했다. 나아진 것은 1판(위 판의 만든 그대로 입력)이고, 나빠진 것은 0이다. 종이 기준 빼기 부호 판(pages_paper_shape_signed_offsets)은 전에도 맞았고 지금도 맞다.
  • 배치 관련 시험과 쪽 수 추정을 쓰는 시험 1,863건이 통과했다. ruff·mypy·pyright·오류 코드 집계·c901도 통과했다.

참고

이 컴퓨터의 하드웨어 점검 때문에 이 PC에서 전체 시험과 넓은 문서 대조는 돌리지 않았다. 전체 시험은 GitHub CI가 돌린다. 넓은 대조는 점검 뒤에 하고, 결과를 여기에 남긴다.

🤖 Generated with Claude Code

… Hancom does

Hancom keeps an offset up or left as an unsigned 32-bit number. One
written with a minus sign instead (vertOffset="-1500") it reads as 0: it
draws the object at its paragraph's (or the paper's) place and saves 0.
The page estimate read such a value as that far up, so the lines after
the object went elsewhere than Hancom put them. It now reads every
vertOffset and horzOffset through one helper that does as Hancom does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@airmang

airmang commented Oct 11, 2026

Copy link
Copy Markdown
Owner Author

리뷰 결과: 막을 것은 없습니다. CI가 통과하면 병합합니다.

  • pages.py에서 vertOffset·horzOffset을 읽는 자리가 모두 _pos_offset을 거칩니다(남은 int(pos.get(...Offset...)) 없음). 부호 없는 32비트 값(위·왼쪽)은 고치기 전처럼 그대로 넘어가 각 자리의 >= 1 << 31 처리가 바뀌지 않고, 달라지는 것은 빼기 부호로 쓴 값이 0이 되는 것뿐입니다. 첫 함수는 원래도 음수를 0으로 두었으므로 결과가 같습니다.
  • 새 시험은 고치기 전 코드에서 실패하고, test_layout_page_estimate.py 1,361건이 통과합니다.

@airmang
airmang merged commit b7e2cba into main Oct 11, 2026
13 checks passed
@airmang
airmang deleted the fix/page-estimate-signed-offset-text-as-zero branch October 11, 2026 07:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant