Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

pack.py 시점에 pretty_print를 취소하지 않았을 때, 문서의 내용이 오염될 수 있음 #3

Open

Description

좋은 스킬 만들어주셔서 감사합니다.
저희 집 Cursor와 함께 작성한 이슈를 전달드립니다:

[Issue] unpack.py의 Pretty-print로 인한 HWPX 레이아웃 깨짐 현상 및 해결 방안 보고

1. 요약 (Summary)

unpack.py는 XML 가독성을 위해 lxml.etree.indent()로 들여쓰기를 삽입합니다. 그러나 pack.py는 이를 되돌리지 않으므로, unpack → 수정 없이 pack만 해도 원본과 다른 문서가 생성됩니다.

특히 <hp:t> 태그처럼 텍스트와 자식 요소(<hp:fwSpace/>, <hp:lineBreak/> 등)가 혼재하는 Mixed Content 내부에 삽입된 공백은, lxmlremove_blank_text=True 파서로도 제거할 수 없습니다. 파서가 이를 "의미 있는 텍스트"로 간주하기 때문입니다.

2. 현상 분석 (Technical Root Cause)

  • 문제 원인: unpack.pyetree.indent(tree, space=" ")pretty_print=True 설정이 <hp:p>, <hp:run>, <hp:tc> 태그 사이에 \nspace를 삽입합니다.
  • 영향: 한글(Hancom Office) 엔진은 XML 요소 간의 줄바꿈과 공백을 무시하지 않고 렌더링에 반영합니다. 특히 표(Table) 내부의 리스트나 정밀한 정렬이 필요한 구역에서 시각적 오류가 두드러집니다.

3. 검증 결과 (Validation)

동일한 원본 문서를 바탕으로 두 가지 방식으로 테스트한 결과입니다.

  • A.hwpx (Pretty-print 유지): 표 내부 리스트 항목 앞에 의도치 않은 들여쓰기가 발생하여 레이아웃이 깨짐.
  • B.hwpx (Unprettify 적용): 원본과 100% 동일한 레이아웃 유지.

또한, etree.indent()<hp:t>TEXT<hp:fwSpace/></hp:t> 과 같은 Mixed Content에도 줄바꿈과 들여쓰기 공백을 삽입하며, 한컴오피스는 이를 실제 텍스트로 렌더링하여 레이아웃이 깨집니다.

4. 제안 사항 (Action Items)

  1. unpack.py의 Pretty-print가 Mixed Content를 오염시키지 않아야 합니다.
    • 공백은 lxml의 remove_blank_text=True 파서로도 제거할 수 없습니다. 파서가 Mixed Content 내부의 공백을 "의미 있는 텍스트"로 간주하기 때문입니다.
  2. unpack → edit → pack 라운드트립이 데이터 무결성을 보장해야 합니다.
  3. LLM 워크플로우를 위한 XML 가독성(들여쓰기)은 유지되어야 합니다.
  4. SKILL.md 업데이트: <hp:t>는 Mixed Content를 포함하며, 수동 편집 시에도 내부 공백 변경에 주의해야 함을 명시합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /