Skip to content

Releases: airmang/python-hwpx

v2.11.1

12 Jun 03:27

Choose a tag to compare

[2.11.1] - 2026-06-12

수정

  • create_document_from_plan()heading block과 builder Heading이 기본 템플릿의 개요 N/Outline N 문단 스타일을 실제로 적용하도록 수정했습니다. 생성 문서가 한컴 개요/문서 탐색과 MCP outline readback에서 구조화된 제목으로 인식됩니다.
  • document-plan 기본 스타일 preset에 제목 18pt, 부제 12pt, 장 제목 14pt 글자 크기와 함초롬바탕 폰트를 적용해 보고서 생성 시 제목/본문 시각 위계가 명확하게 보이도록 했습니다.

v2.11.0

11 Jun 15:34

Choose a tag to compare

[2.11.0] - 2026-06-12

추가

  • 시드 결정적 퍼징 수렴 루프 hwpx.tools.fuzz(시나리오 카탈로그·생성기·3중 오라클 러너·최소화)와 tests/fixtures/fuzz_regressions 회귀 박제 수트를 추가했습니다.
  • 레이아웃 근사 프리뷰 렌더러 hwpx.tools.layout_preview를 추가했습니다(페이지 박스·표·여백 근사 HTML/PNG — 에이전트 자기검증용).
  • section XML 바이트 splice 기반 문단 패치 경로 hwpx.patch를 추가했습니다(미수정 영역 바이트 보존).
  • 그림 자산 안전 삽입·치환 API(add_picture 및 치환 워크플로)와 manifest 검증을 추가했습니다.
  • 기존 문서 서식 편집 API를 추가했습니다: 문단 정렬·줄간격·들여쓰기·문단 간격, 용지·여백·방향, 머리말/꼬리말·쪽번호, 불릿/번호 형식.
  • 누름틀(클릭히어 필드) 1급 조회·채움 API를 추가했습니다.
  • 공문서 작성규정 lint hwpx.tools.official_lint(항목기호 위계·"끝." 표시·붙임·날짜 표기)와 결재란 프리셋을 추가했습니다.
  • 고급 생성기 hwpx.tools.advanced_generators를 추가했습니다: 사진대지(build_image_grid)·회의 명패(build_meeting_nameplates)·표 기반 조직도.
  • 신구대조 문단 diff와 참조 정합 lint hwpx.tools.doc_diff를 추가했습니다.
  • 메일머지 대량 생성과 표 합계·평균 계산 유틸 hwpx.tools.mail_merge를 추가했습니다.
  • 참조 문서 서식 프로파일 추출·적용과 템플릿 레지스트리 hwpx.tools.style_profile을 추가했습니다.
  • template analyzer 리포트를 강화했습니다(열너비 재구성·cell margin·vertAlign).

변경

  • hwpx.oxml.document 모놀리스(5,700여 줄)를 요소별 모듈(_document_impl 외 18개)로 분할했습니다. 공개 API는 변하지 않습니다.

수정

  • 신뢰할 수 없는 입력 파싱을 강건화했습니다(hwpx.opc.security): XML entity 선언 거부와 깊이/크기 한도, ZIP 압축비·멤버 수 한도를 적용해 entity 폭탄·압축 폭탄 입력을 안전하게 거부합니다.

v2.10.3

09 Jun 22:07

Choose a tag to compare

[2.10.3] - 2026-06-09

추가

  • hwpx.tools.validate_editor_open_safety()EditorOpenSafetyReport를 추가해 package validation, document validation, 재오픈 검증을 한 곳에서 확인할 수 있게 했습니다.

수정

  • 텍스트를 줄이는 저수준 편집 뒤 stale hp:linesegarray가 남아 한컴 편집기에서 열리지 않을 수 있는 문제를 막기 위해, 저장 직전 plain-text 문단의 무효한 layout cache를 제거합니다.
  • 편집된 section과 public 저수준 section write 경로는 모든 hp:lineSegArray layout cache를 제거해, 복합 문단처럼 stale 여부를 안전하게 계산하기 어려운 경우도 편집기가 다시 계산하도록 했습니다.
  • public 저수준 section/header XML write 경로도 Hancom-compatible root namespace 선언과 standalone="yes" XML declaration을 보정해 generic XML serializer 출력이 그대로 저장되지 않도록 했습니다.
  • HwpxDocument.to_bytes(), save_to_path(), save_to_stream()이 생성된 패키지의 editor-open safety를 확인한 뒤에만 결과를 반환하거나 쓰도록 보강했습니다. save_to_path()는 safety 실패 시 기존 대상 파일을 교체하지 않습니다.
  • HwpxPackage.save()도 editor-open safety를 기본 검증해 저수준 package 직접 편집이 unsafe HWPX를 bytes/path/stream으로 내보내지 않도록 막습니다.
  • public HwpxPackage.save()에서 editor-open safety 검증을 우회하는 파라미터를 제공하지 않도록 정리했습니다. 검증 실패 상태의 bytes snapshot은 package 내부 진단 토큰이 있는 경로에서만 생성하며, unchecked 경로는 caller-provided file path/stream에 직접 쓸 수 없습니다.
  • HwpxDocument._to_bytes_raw()의 open-safety bypass 인자를 제거해 document 객체에서 unchecked bytes를 얻는 실수성 우회 경로를 더 좁혔습니다.
  • private archive writer도 save 내부 컨텍스트에서만 동작하게 해, _write_archive()/_write_zip_entry() 직접 호출로 editor-open safety 검증을 건너뛴 ZIP을 만드는 실수성 우회 경로를 막았습니다.
  • 문서/package 저장 중 open-safety, 실제 파일 쓰기, stream short write가 실패하면 dirty 상태를 성공처럼 정리하지 않도록 보강했습니다. seek 가능하고 안전하게 복원 가능한 stream은 쓰기 실패 시 원래 내용으로 rollback합니다.
  • archive pack CLI가 재패킹 결과를 editor-open safety 리포트로 재검증하고, 실패 시 기존 output을 보존합니다. 성공 시 PackResult.open_safety와 CLI open_safety_ok=true 출력으로 handoff evidence를 제공합니다.
  • repair/recover 출력도 CRC와 package validation 뒤에 editor-open safety를 재검증하고, section의 hp:lineSegArray layout cache 제거와 section/header root namespace 및 standalone="yes" 보정을 적용합니다. 실패 시 기존 output은 보존하고, 성공 시 RepairResult.open_safety로 handoff evidence를 제공합니다.
  • template form-fit apply가 최종 목적지에 먼저 복사하지 않고 temp 파일에서 저장 및 editor-open safety 검증을 끝낸 뒤에만 교체하도록 보강했습니다.
  • builder Document.save_to_path() 리포트에 editor_open_safety hard gate와 세부 리포트를 포함합니다.
  • template form-fit paragraph clone 경로가 텍스트를 직접 바꿀 때도 layout cache를 제거합니다.
  • package validator가 실제 텍스트 길이를 넘어서는 lineseg/@textpos를 hard error로 보고하도록 보강했습니다.
  • EditorOpenSafetyReport.ok가 package/reopen뿐 아니라 document validation 실행 실패와 hard error도 반영하도록 보강했습니다.
  • 저장 직전 paragraph의 styleIDRefNormal/본문처럼 header style 이름으로 잘못 들어간 경우, 일치하는 numeric style id로 정규화해 저수준 편집 산출물이 document validation에서 차단되거나 편집기 오픈 리스크를 만들지 않도록 했습니다.
  • HwpxPackage.save(updates=...) 같은 순수 package 저수준 저장 경로도 header style 이름으로 된 paragraph styleIDRef를 numeric id로 정규화해, MCP를 거치지 않는 직접 ZIP/XML 편집 산출물도 같은 safety 보정을 받도록 했습니다.

v2.10.2

06 Jun 14:17

Choose a tag to compare

[2.10.2] - 2026-06-06

추가

  • hwpx.tools.markdown_export.export_markdown()HwpxDocument.export_rich_markdown()을 추가해 풍부한 Markdown 변환을 지원합니다. 인라인 서식(굵게/기울임/취소선/색상/하이라이트), 표 병합 셀(colspan/rowspan HTML), 중첩 표 재귀, rect/ellipse/polygon 도형 내부 paragraph, BinData 이미지 추출, Ⅰ./1. 패턴 기반 헤딩 감지(# /## ), 각주·미주(정확 위치 마커 + fn1/en1 일련번호 + 본문 인라인 서식), 하이퍼링크([text](url)) 보존을 한 번에 처리합니다. 기존 HwpxDocument.export_markdown()은 그대로 유지됩니다.
  • HwpxOxmlNote에 본문 paragraph 접근/편집 helper를 추가했습니다: body_paragraph property, add_run(text, *, char_pr_id_ref=..., bold=..., italic=..., underline=..., color=..., font=..., size=..., highlight=..., strike=..., attributes=...), add_hyperlink(url, display_text, *, char_pr_id_ref=...). XML 직접 조작 없이 각주 본문에 혼합 서식 run과 하이퍼링크를 추가할 수 있습니다.
  • get_table_map() 결과에 본문 표 anchor location, 셀 문단별 table_cell_paragraph location, caption_text, preceding_paragraph_text를 추가했습니다.
  • 새 컨버터와 helper에 대한 회귀 테스트를 tests/test_markdown_export.py에 추가했습니다.

변경

  • HwpxOxmlTableCell.text가 셀 내부 여러 문단을 줄바꿈으로 보존하고, set_text(..., preserve_format=True, split_paragraphs=True) 경로에서 기존 run charPrIDRef를 유지하도록 개선했습니다.

수정

  • HwpxOxmlParagraph.add_footnote()/add_endnote()char_pr_id_ref 인자가 외부 호스팅 run에만 적용되고 각주 본문 run은 항상 charPrIDRef="0"으로 하드코딩되던 문제를 수정했습니다. 인자가 사용자 의도대로 본문 run에도 적용됩니다.

v2.10.1

04 Jun 06:42

Choose a tag to compare

[2.10.1] - 2026-06-04

추가

  • document_plan authoring을 builder lowering 중심으로 확장하고 v2 builder node, TOC, government_report preset을 지원합니다.
  • 정부보고서 계산/파싱 유틸리티(hwpx.tools.report_utils, hwpx.tools.report_parser)와 computed field 치환을 추가했습니다.
  • generic element coverage inventory, table cleanup, table profile/caption/unit preservation, id reference integrity checker를 추가했습니다.
  • linesegarray, transMatrix, scaMatrix, rotMatrix, edit/combo box control을 first-class OXML 모델로 승격했습니다.

변경

  • builder save report의 hard gate가 id integrity를 실제 검사 결과로 반영하도록 강화했습니다.
  • 패키지 rewrite 시 mimetype 엔트리를 보존하도록 OPC 저장 경로를 정리했습니다.

v2.10.0

02 Jun 11:54

Choose a tag to compare

[2.10.0] - 2026-06-02

추가

  • hwpx.builder 공개 패키지를 추가했습니다. Document, Section, Paragraph, Run, Heading, Bullet, NumberedList, Table, Image, Header, Footer, PageNumber, PageBreak, Metadata, PageSize, Margins 노드로 조립형 HWPX 생성을 지원합니다.
  • BuilderSaveReportReopenReport를 추가해 builder 저장 후 package validation, document error/lint, reopen, feature flags, visual review 필요 여부를 확인할 수 있게 했습니다.
  • 머리글/바닥글 리치 content, 자동 쪽번호, 리치 런 서식(color/font/size/highlight/strike), 다단계 목록, 표 병합/음영/열너비, 이미지 배치를 위한 HwpxDocument facade 및 OXML wrapper 메서드를 추가했습니다.
  • hwpx.document_plan.v1, 운영 계획서 품질 프로필, template form-fit authoring, proposal/form-fill 품질 검증 흐름을 강화했습니다.
  • hwpxlib sample corpus 기반 oracle fixture와 builder vertical slice 통합 테스트를 추가했습니다.
  • src/hwpx/tools/_schemas/owpml/에 2011 Hancom 네임스페이스용 subset XSD 번들을 추가했습니다 (header.xsd, body.xsd, paralist.xsd, core.xsd, xml.xsd, NOTICE).
  • hwpx.oxml.load_compound_schema()SchemaImportError를 추가해 offline compound XSD 로딩을 지원합니다.
  • fixture matrix 기반 Phase 1 validation 리포트(shared/hwpx/HWPX_STACK_VALIDATION_2026-04-20_pre-phase1.md, ..._post-phase1.md)와 회귀 테스트를 추가했습니다.

변경

  • validate_document().ok는 error 기준으로 유지하고 schema warning은 lint/warning으로 분리해 가시화합니다.
  • HwpxDocument.save_to_path() 기반 저장/재오픈 검증 경로를 builder와 authoring workflow에서 일관되게 사용하도록 정리했습니다.
  • hwpx-validate는 이제 기본 strict 모드로 Phase 1 subset schema bundle을 사용합니다. --no-strict로 warning-only 분류를 지원합니다.
  • HwpxDocument.validate()는 기본 strict=False로 동작하며, validate_on_save_strict 옵션으로 저장 시 strict 검증을 제어할 수 있습니다.
  • 패키지 배포물(sdist/wheel)에 OWPML subset schema bundle이 포함되도록 package-data를 확장했습니다.

수정

  • split-run placeholder, template form-fit, proposal/document-plan 생성 경로의 회귀를 보강했습니다.
  • builder vertical slice에서 Hancom Office HWP 재오픈과 구조 hard gate가 통과하도록 머리글/바닥글 lowering과 page number control 배치를 정렬했습니다.

v2.9.1

27 Apr 13:56
4cf99ae

Choose a tag to compare

[2.9.1] - 2026-04-27

상호운용성(interop) 버그 묶음 릴리즈입니다. 외부 기여자들이 보고하고 수정한 세 가지 문제를 정리합니다.

수정

  • HwpxOxmlTableCell._ensure_text_elementensure_run_style 내 modifier가 lxml 엘리먼트 상에서 또한 ET.SubElement를 호출해 TypeError를 발생시키던 경로를 기본 헬퍼 _append_child로 정리했습니다. 이제 cell.text = ...paragraph.add_run(..., bold=True)가 monkey-patch 없이 정상 동작합니다 (#30, @hhy827).
  • _paragraph_id / _object_id / _memo_iduuid4().int & 0xFFFFFFFF로부터 signed int32 범위를 벗어나는 값을 약 50% 확률로 생성하던 문제를 수정했습니다. id 값을 signed 32-bit 양수 범위(0 <= x < 2^31)로 클램프해 downstream 소비자와의 상호운용성을 확보했습니다 (#34, @seonghoony).
  • HwpxDocument.new()의 seed로 쓰이는 번들 Skeleton.hwpx에 signed int32 범위를 벗어나는 <hp:p id="3121190098">가 포함돼 있던 문제를 수정했습니다 (#35, @seonghoony).
  • pyproject.toml에 PEP 639 license expression과 같이 남아 있던 legacy License :: OSI Approved :: Apache Software License classifier를 제거해 setuptools>=77에서의 소스 설치/바이너리 빌드 실패를 해소했습니다.

추가

  • 위 세 버그에 대한 회귀 테스트를 추가했습니다 (tests/test_document_formatting.py, tests/test_id_generator_range.py, tests/test_skeleton_template_ids.py).
  • 머지된 기여를 인정하는 CONTRIBUTORS.md를 추가하고 README.md / CONTRIBUTING.md에서 연결했습니다.

변경

  • License relicensed to Apache-2.0 (sole author, full consent). Previous license terms no longer apply to future releases.

v2.9.0

02 Apr 03:34

Choose a tag to compare

[2.9.0] - 2026-04-02

추가

  • HwpxDocument.get_table_map(), find_cell_by_label(), fill_by_path()를 추가해 HWPX 양식/템플릿 표를 문서 순서 기반으로 탐색하고 채울 수 있게 했습니다.
  • hwpx.tools.table_navigation 모듈을 추가해 엔진 레벨에서 재사용 가능한 표 탐색, 라벨 정규화, 방향 이동, 배치 채우기 helper를 공개했습니다.

변경

  • 라벨 매칭이 공백 축약, 대소문자 무시, 후행 콜론 허용 규칙을 따르도록 정규화 로직을 추가했습니다.
  • 표 자동화 API에 대한 회귀 테스트와 README/API 레퍼런스 문서를 추가했습니다.

v2.8.3

10 Mar 01:40

Choose a tag to compare

[2.8.3] - 2026-03-10

변경

  • 저장소와 배포 메타데이터의 라이선스 표기를 실제 LICENSE 파일과 일치하도록 정렬했습니다.
  • pyproject.toml을 PEP 639 방식의 LicenseRef-python-hwpx-NonCommercial + license-files 구성으로 갱신하고, 잘못된 MIT 분류자를 제거했습니다.
  • README 라이선스 배지/섹션을 커스텀 비상업적 라이선스 기준으로 수정하고, wheel/sdist 산출물의 라이선스 메타데이터를 검증하는 회귀 테스트를 추가했습니다.

v2.8.2

08 Mar 14:55

Choose a tag to compare

[2.8.2] - 2026-03-08

변경

  • README를 현재 공개 API와 CLI 범위에 맞춰 정리했습니다. Quick start, 텍스트 추출, 객체 검색 예시를 실제 호출 방식 기준으로 수정했습니다.
  • add_memo()/add_memo_with_anchor()HwpxDocument.new()로 만든 실제 lxml 기반 문서에서도 동작하도록 memo XML 생성 경로를 엔진 호환 방식으로 정리했습니다.
  • 실제 빈 문서 템플릿에서 메모 추가 후 roundtrip 되는 회귀 테스트를 추가했습니다.