증상
Task #672 (TAC 표 비례 축소 면제) 정정 후에도, line_segs 부재 paragraph 의 마지막 줄이 시각적으로 보이지 않거나 인접 행/셀 영역으로 침범하는 결함.
발현 영역
samples/계획서.hwp 1페이지 표:
- 셀 [21] r=5, c=1 "목적": 측정값 row_heights[5]=67.76 (3줄 + pad), 한컴은 3줄 정상 표시. 본 환경은 SVG에 3줄 그려졌으나 PNG 변환 시 마지막 줄 미표시 또는 잘림.
- 셀 [52] r=13, c=3 "특허 취득": 동일 패턴.
진단 결과
Task #672 정정 결과 (확인 완료)
- height_measurer 측정: row_heights[5] = 67.76 (3줄 + pad, 정확)
- table_layout
cell_h = 67.76, layout 단 recompose_for_cell_width 결과 3줄 분할 ✅
- paragraph_layout 줄별 y 누적 정상 (379.37, 400.71, 422.04)
- 줄 2 끝 y = 443.37 = col_area end_y (정확히 일치) ✅
- SVG에 3줄 baseline 모두 그려짐 (y=395.37/411.37/432.71) ✅
잔존 결함의 본질
paragraph_layout 줄 layout 위치는 col_area.y + line_idx * line_height 로 결정되며, row_heights 와 무관. 측정값을 늘려 cell BoundingBox 를 확장해도 줄 위치는 같음.
마지막 줄 baseline (432.71) + glyph descender 영역이 셀 외곽 BoundingBox (cell_y_end=445.25) 안에 있어야 정상이나, rsvg-convert PNG 변환 또는 web Canvas 렌더링에서 클립 발생.
본질 정정 방향 제안
옵션 A: paragraph_layout 줄 위치 ↔ row_heights 연동
마지막 줄의 baseline 위치를 col_area.h 기반이 아니라 row_heights 기반으로 결정. 측정값 증가 시 줄 위치도 위로 조정되어 모든 줄이 cell 안에 fit.
옵션 B: row_heights 결정 시 baseline + descent 까지 포함
calc_para_lines_height / lines_total 계산 시 마지막 줄에 font_size * 0.5 정도 descent 여유 추가 + paragraph_layout 줄 layout 위치도 동일하게 조정.
옵션 C: cell BoundingBox 확장 (clip 영역만 확장)
cell.clip 영역을 cell_h + descent_buffer 로 확장. 인접 셀 영역 침범 위험 (시각 회귀).
Task #672 와의 관계
마일스톤
M100 (v1.0.0) — 조판 엔진 정합성
권위 자료
의존성
후속 영역
본 결함 정정 후 samples/계획서.hwp 1페이지 표의 모든 셀 콘텐츠가 한컴 정합 표시.
증상
Task #672 (TAC 표 비례 축소 면제) 정정 후에도,
line_segs부재 paragraph 의 마지막 줄이 시각적으로 보이지 않거나 인접 행/셀 영역으로 침범하는 결함.발현 영역
samples/계획서.hwp1페이지 표:진단 결과
Task #672 정정 결과 (확인 완료)
cell_h = 67.76, layout 단recompose_for_cell_width결과 3줄 분할 ✅잔존 결함의 본질
paragraph_layout 줄 layout 위치는
col_area.y + line_idx * line_height로 결정되며,row_heights와 무관. 측정값을 늘려 cell BoundingBox 를 확장해도 줄 위치는 같음.마지막 줄 baseline (432.71) + glyph descender 영역이 셀 외곽 BoundingBox (cell_y_end=445.25) 안에 있어야 정상이나, rsvg-convert PNG 변환 또는 web Canvas 렌더링에서 클립 발생.
본질 정정 방향 제안
옵션 A: paragraph_layout 줄 위치 ↔ row_heights 연동
마지막 줄의 baseline 위치를 col_area.h 기반이 아니라 row_heights 기반으로 결정. 측정값 증가 시 줄 위치도 위로 조정되어 모든 줄이 cell 안에 fit.
옵션 B: row_heights 결정 시 baseline + descent 까지 포함
calc_para_lines_height/lines_total계산 시 마지막 줄에font_size * 0.5정도 descent 여유 추가 + paragraph_layout 줄 layout 위치도 동일하게 조정.옵션 C: cell BoundingBox 확장 (clip 영역만 확장)
cell.clip 영역을
cell_h + descent_buffer로 확장. 인접 셀 영역 침범 위험 (시각 회귀).Task #672 와의 관계
마일스톤
M100 (v1.0.0) — 조판 엔진 정합성
권위 자료
samples/계획서.hwp— 권위 재현 영역 (Task 표 셀 내부 paragraph 줄바꿈 시 다중 LINE_SEG 줄 겹침 — 같은 y 좌표 그려짐 #671/TAC 표 비례 축소 시 셀 콘텐츠 클립 — common.height vs measured row_heights 불일치 #672 와 공유)의존성
후속 영역
본 결함 정정 후
samples/계획서.hwp1페이지 표의 모든 셀 콘텐츠가 한컴 정합 표시.