python-hwpx 3.3.0__tar.gz → 3.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_hwpx-3.3.0/src/python_hwpx.egg-info → python_hwpx-3.4.1}/PKG-INFO +18 -2
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/README.md +17 -1
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/pyproject.toml +17 -1
- python_hwpx-3.4.1/src/hwpx/_document/__init__.py +2 -0
- python_hwpx-3.4.1/src/hwpx/_document/_units.py +16 -0
- python_hwpx-3.4.1/src/hwpx/_document/fields.py +570 -0
- python_hwpx-3.4.1/src/hwpx/_document/layout.py +682 -0
- python_hwpx-3.4.1/src/hwpx/_document/media.py +347 -0
- python_hwpx-3.4.1/src/hwpx/_document/memos.py +225 -0
- python_hwpx-3.4.1/src/hwpx/_document/persistence.py +267 -0
- python_hwpx-3.4.1/src/hwpx/_document/shapes.py +218 -0
- python_hwpx-3.4.1/src/hwpx/_document/tracked.py +126 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/model.py +103 -7
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/commands.py +121 -89
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/authoring.py +30 -1
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/builder/core.py +87 -6
- python_hwpx-3.4.1/src/hwpx/document.py +1777 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/guidance_scan.py +136 -65
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/document_parts.py +149 -114
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/run.py +150 -137
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/markdown_export.py +108 -87
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/package_validator.py +325 -226
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/toc_author.py +81 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1/src/python_hwpx.egg-info}/PKG-INFO +18 -2
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/python_hwpx.egg-info/SOURCES.txt +17 -0
- python_hwpx-3.4.1/tests/test_authoring_native_toc.py +240 -0
- python_hwpx-3.4.1/tests/test_authoring_quality_corpus.py +503 -0
- python_hwpx-3.4.1/tests/test_byte_patch_identity.py +314 -0
- python_hwpx-3.4.1/tests/test_corpus_toc_verify.py +452 -0
- python_hwpx-3.4.1/tests/test_document_facade_surface.py +76 -0
- python_hwpx-3.4.1/tests/test_formfill_differential_driver.py +482 -0
- python_hwpx-3.4.1/tests/test_m9_p0_spike_tools.py +109 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_openrate.py +515 -0
- python_hwpx-3.4.1/tests/test_pii_leak_sweep.py +280 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_save_pipeline_no_bypass.py +25 -7
- python_hwpx-3.3.0/src/hwpx/document.py +0 -2961
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/LICENSE +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/NOTICE +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/setup.cfg +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/bundle.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/catalog.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/dump.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/mapping.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/native.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/blueprint/replay.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/catalog.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/cli.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/document.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/form_plan.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/model.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/path.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/query.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/agent/story.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/benchmark/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/benchmark/blind_eval.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/body_patch.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/builder/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/builder/report.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/badges.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/corpus/corpus.json +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/corpus/meeting_summary.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/corpus/notice.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/corpus/report_table.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/corpus.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/report.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/roundtrip_batch.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/conformance/runner.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/data/Skeleton.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/_support.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/composer.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/harvest.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/plan.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/application_form/fragments/body.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/application_form/fragments/heading.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/application_form/fragments/info_table.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/application_form/fragments/title.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/application_form/profile.json +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/application_form/template.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/home_notice/fragments/body.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/home_notice/fragments/heading.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/home_notice/fragments/title.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/home_notice/profile.json +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/home_notice/template.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/official_notice/fragments/body.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/official_notice/fragments/heading.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/official_notice/fragments/info_table.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/official_notice/fragments/title.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/official_notice/profile.json +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/official_notice/template.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/report/fragments/body.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/report/fragments/heading.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/report/fragments/info_table.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/report/fragments/title.xml +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/report/profile.json +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/profiles/report/template.hwpx +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/design/validator.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/evalplan_fill.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/exam/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/exam/compose.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/exam/ir.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/exam/measure.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/exam/parser.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/exam/profile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/fill_residue.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fill.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/apply.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/engine.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/measure.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/policy.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/report.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/seal.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/form_fit/wordbox.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/formfill_quality.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/ingest/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/ingest/base.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/ingest/hwpx_converter.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/layout/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/layout/lint.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/layout/report.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/opc/package.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/opc/relationships.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/opc/security.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/opc/xml_utils.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/_document_impl.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/_document_primitives.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/body.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/canonical_defaults.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/common.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/document.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/header.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/header_part.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/memo.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/namespaces.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/numbering.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/objects.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/paragraph.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/parser.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/schema.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/section.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/section_format.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/section_story.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/simple_parts.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/table.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/oxml/utils.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/package.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/patch.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/presets/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/presets/proposal.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/py.typed +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/quality/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/quality/ledger.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/quality/policy.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/quality/report.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/quality/save_pipeline.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/table_patch.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/template_formfit.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/templates.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/_schemas/header.xsd +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/_schemas/section.xsd +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/advanced_generators.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/archive_cli.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/doc_diff.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/exporter.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/fuzz/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/fuzz/__main__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/fuzz/catalog.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/fuzz/generator.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/fuzz/minimize.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/fuzz/runner.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/generic_inventory.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/id_integrity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/idempotence.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/ir_equality.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/layout_preview.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/mail_merge.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/object_finder.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/official_lint.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/package_reconcile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/page_guard.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/pii.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/read_fidelity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/recover.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/redline.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/repair.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/report_parser.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/report_utils.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/roundtrip_diff.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/style_profile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/table_cleanup.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/table_compute.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/table_navigation.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/template_analyzer.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/text_extract_cli.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/text_extractor.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/toc_fidelity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/tools/validator.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/__init__.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/_hancom_open_rate.ps1 +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/_refresh_hwpx_mac.applescript +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/_render_hwpx.ps1 +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/_render_hwpx_mac.applescript +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/detectors.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/diff.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/fixture_corpus.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/hancom_worker.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/masks.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/oracle.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/page_qa.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/qa_contracts.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/qa_metrics.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/hwpx/visual/report.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/python_hwpx.egg-info/dependency_links.txt +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/python_hwpx.egg-info/entry_points.txt +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/python_hwpx.egg-info/requires.txt +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/src/python_hwpx.egg-info/top_level.txt +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_advanced_generators.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_blueprint_contracts.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_blueprint_dump.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_blueprint_replay.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_catalog.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_cli.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_commands.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_contracts.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_document.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_mixed_form.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_path_query.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_agent_story_commands.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_authoring_profile_routing.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_authoring_profile_routing_oracle.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_authoring_render_check.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_blind_eval_fixture.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_body_patch.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_builder_core.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_builder_plan_v2.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_builder_vertical_slice.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_cell_line_spacing.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_comment_node_robustness.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_conformance.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_corpus_read_fidelity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_coverage_promotion.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_coverage_targets.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_design_builder.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_deviations_registry.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_doc_diff.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_document_context_manager.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_document_formatting.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_document_plan.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_document_plan_computed_fields.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_document_save_api.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_evalplan_fill.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_compose.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_compose_oracle.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_fixtures.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_ir.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_measure.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_parser.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_exam_profile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_existing_document_format_editing.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_fill_residue.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fields.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fill_split_run.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fit.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fit_integration.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fit_seal.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fit_seal_placement.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_form_fit_wordbox.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_formfill_quality.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_fuzz_loop.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_fuzz_regressions.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_gap_closure_tools.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_government_report_preset.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_government_table_profile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_guidance_scan.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_hancom_render_worker.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_hp_tab_support.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_hwpxlib_corpus_read.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_id_generator_range.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_id_integrity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_image_object_workflow.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_ingest.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_inline_models.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_integration_hwpx_compatibility.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_integration_roundtrip.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_kordoc_absorption.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_layout_lint.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_layout_preview.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_mail_merge_fit.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_mail_merge_table_compute.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_mail_merge_xlsx.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_markdown_export.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_memo_and_style_editing.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_mixed_form_plan.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_namespace_handling.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_new_features.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_official_document_style.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_official_lint_gongmun_gate.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_official_lint_tableaware.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_opc_package.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_open_safety_corpus.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_oxml_modularization.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_oxml_parsing.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_packaging_license_metadata.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_packaging_py_typed.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_paragraph_keep_together.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_paragraph_section_management.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_pii.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_pii_structural.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_pii_wiring.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_proposal_preset.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_public_runtime_boundary.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_question_split_detector.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_read_fidelity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_recover_broken_zip.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_redline_authoring.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_redline_verify.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_repair_repack.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_report_parser.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_report_utils.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_repr_snapshots.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_rhwp_t1_gates.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_rhwp_t2_verification.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_roundtrip_fidelity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_row_heights.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_save_pipeline.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_section_headers.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_set_paragraph_format_keep.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_skeleton_template_ids.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_split_cell.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_split_merged_cell.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_style_profile.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_table_cleanup.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_table_navigation.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_table_patch.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_table_patch_dryrun.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_table_patch_m105.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_tables_default_border.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_template_analyzer_enrichment.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_template_formfit.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_text_extractor_annotations.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_toc_author.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_toc_fidelity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_validation_severity.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_validator_comment_nodes.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_version_metadata.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_visual_fixture_corpus.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_visual_oracle.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_visual_oracle_budget.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_visual_qa_contracts.py +0 -0
- {python_hwpx-3.3.0 → python_hwpx-3.4.1}/tests/test_visual_qa_metrics.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-hwpx
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.4.1
|
|
4
4
|
Summary: 한글 없이 HWPX 문서를 열고, 편집하고, 생성하고, 검증하는 Python 자동화 라이브러리
|
|
5
5
|
Author: python-hwpx Maintainers
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -70,13 +70,29 @@ Dynamic: license-file
|
|
|
70
70
|
`hwpx-mcp-server`와 `hwpx-plugin`은 같은 프로젝트가 직접 유지보수하는 first-party 연동 구성요소입니다.
|
|
71
71
|
“first-party”는 프로젝트 유지보수 관계를 뜻하며, 한컴 또는 제3자의 공식 인증을 뜻하지 않습니다.
|
|
72
72
|
|
|
73
|
-
현재 PyPI 공개 릴리스는 `python-hwpx 3.
|
|
73
|
+
현재 PyPI 공개 릴리스는 `python-hwpx 3.4.1`입니다. 일반
|
|
74
74
|
`pip install python-hwpx`로 이 릴리스를 설치할 수 있습니다.
|
|
75
75
|
현재 패키지 분류는 `Development Status :: 3 - Alpha`입니다. 이 분류는 API와 제품의
|
|
76
76
|
성숙도를 나타내며, 공개 버전이나 플러그인의 최소 호환 버전을 대신하지 않습니다.
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
80
|
+
## 실측으로 말합니다 — Published Corpus
|
|
81
|
+
|
|
82
|
+
이 스택의 산출물은 주장 대신 **실제 한컴오피스 전수 측정**으로 검증됩니다
|
|
83
|
+
(동결 코퍼스 N=497, 2026-07-19, 상세·주의사항은
|
|
84
|
+
[실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html)):
|
|
85
|
+
|
|
86
|
+
- **한컴 오픈 수용률 100%** (476/476 all-pass, 하한 ≥99.4%) · 파싱 96.2%
|
|
87
|
+
- **미수정 영역 바이트 보존 100%** (497/497, patch 경로) · **개인정보 0-leak**
|
|
88
|
+
- 렌더 검증 416건 + 정직 버킷(변경추적 문서의 PDF export는 한컴 자체가 거부 — 실측 한계로 발행)
|
|
89
|
+
- 양식 채움 차등은 wild 공개 양식에서 49.2% — **낮은 숫자도 그대로 발행**하고 잔여 과제로 명기합니다
|
|
90
|
+
|
|
91
|
+
> 이 숫자들은 *생성물 수용률* 축입니다(우리가 만든 파일을 실제 한컴이 받아들이는가).
|
|
92
|
+
> 문서 *파싱 recall*과는 다른 축이므로 파서 프로젝트 수치와 병치 비교하지 마세요.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
80
96
|
## 왜 python-hwpx인가
|
|
81
97
|
|
|
82
98
|
- **코어 편집에 한컴오피스 설치 불필요** — HWPX는 ZIP+XML(OWPML/OPC) 구조라, 순수 파이썬으로 Windows·macOS·Linux·CI 어디서나 읽고 씁니다.
|
|
@@ -25,13 +25,29 @@
|
|
|
25
25
|
`hwpx-mcp-server`와 `hwpx-plugin`은 같은 프로젝트가 직접 유지보수하는 first-party 연동 구성요소입니다.
|
|
26
26
|
“first-party”는 프로젝트 유지보수 관계를 뜻하며, 한컴 또는 제3자의 공식 인증을 뜻하지 않습니다.
|
|
27
27
|
|
|
28
|
-
현재 PyPI 공개 릴리스는 `python-hwpx 3.
|
|
28
|
+
현재 PyPI 공개 릴리스는 `python-hwpx 3.4.1`입니다. 일반
|
|
29
29
|
`pip install python-hwpx`로 이 릴리스를 설치할 수 있습니다.
|
|
30
30
|
현재 패키지 분류는 `Development Status :: 3 - Alpha`입니다. 이 분류는 API와 제품의
|
|
31
31
|
성숙도를 나타내며, 공개 버전이나 플러그인의 최소 호환 버전을 대신하지 않습니다.
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
+
## 실측으로 말합니다 — Published Corpus
|
|
36
|
+
|
|
37
|
+
이 스택의 산출물은 주장 대신 **실제 한컴오피스 전수 측정**으로 검증됩니다
|
|
38
|
+
(동결 코퍼스 N=497, 2026-07-19, 상세·주의사항은
|
|
39
|
+
[실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html)):
|
|
40
|
+
|
|
41
|
+
- **한컴 오픈 수용률 100%** (476/476 all-pass, 하한 ≥99.4%) · 파싱 96.2%
|
|
42
|
+
- **미수정 영역 바이트 보존 100%** (497/497, patch 경로) · **개인정보 0-leak**
|
|
43
|
+
- 렌더 검증 416건 + 정직 버킷(변경추적 문서의 PDF export는 한컴 자체가 거부 — 실측 한계로 발행)
|
|
44
|
+
- 양식 채움 차등은 wild 공개 양식에서 49.2% — **낮은 숫자도 그대로 발행**하고 잔여 과제로 명기합니다
|
|
45
|
+
|
|
46
|
+
> 이 숫자들은 *생성물 수용률* 축입니다(우리가 만든 파일을 실제 한컴이 받아들이는가).
|
|
47
|
+
> 문서 *파싱 recall*과는 다른 축이므로 파서 프로젝트 수치와 병치 비교하지 마세요.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
35
51
|
## 왜 python-hwpx인가
|
|
36
52
|
|
|
37
53
|
- **코어 편집에 한컴오피스 설치 불필요** — HWPX는 ZIP+XML(OWPML/OPC) 구조라, 순수 파이썬으로 Windows·macOS·Linux·CI 어디서나 읽고 씁니다.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-hwpx"
|
|
7
|
-
version = "3.
|
|
7
|
+
version = "3.4.1"
|
|
8
8
|
description = "한글 없이 HWPX 문서를 열고, 편집하고, 생성하고, 검증하는 Python 자동화 라이브러리"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -109,6 +109,14 @@ python_version = "3.10"
|
|
|
109
109
|
follow_imports = "skip"
|
|
110
110
|
files = [
|
|
111
111
|
"src/hwpx/document.py",
|
|
112
|
+
"src/hwpx/_document/_units.py",
|
|
113
|
+
"src/hwpx/_document/fields.py",
|
|
114
|
+
"src/hwpx/_document/layout.py",
|
|
115
|
+
"src/hwpx/_document/media.py",
|
|
116
|
+
"src/hwpx/_document/memos.py",
|
|
117
|
+
"src/hwpx/_document/persistence.py",
|
|
118
|
+
"src/hwpx/_document/shapes.py",
|
|
119
|
+
"src/hwpx/_document/tracked.py",
|
|
112
120
|
"src/hwpx/agent/commands.py",
|
|
113
121
|
"src/hwpx/agent/document.py",
|
|
114
122
|
"src/hwpx/agent/story.py",
|
|
@@ -148,6 +156,14 @@ ignore_missing_imports = true
|
|
|
148
156
|
# both central facades and every extracted/touched runtime owner to the gate.
|
|
149
157
|
include = [
|
|
150
158
|
"src/hwpx/document.py",
|
|
159
|
+
"src/hwpx/_document/_units.py",
|
|
160
|
+
"src/hwpx/_document/fields.py",
|
|
161
|
+
"src/hwpx/_document/layout.py",
|
|
162
|
+
"src/hwpx/_document/media.py",
|
|
163
|
+
"src/hwpx/_document/memos.py",
|
|
164
|
+
"src/hwpx/_document/persistence.py",
|
|
165
|
+
"src/hwpx/_document/shapes.py",
|
|
166
|
+
"src/hwpx/_document/tracked.py",
|
|
151
167
|
"src/hwpx/agent/commands.py",
|
|
152
168
|
"src/hwpx/agent/document.py",
|
|
153
169
|
"src/hwpx/agent/story.py",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""Shared HWPUNIT conversion helpers for the HwpxDocument owner modules (S-084)."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
_HWP_UNITS_PER_MM = 7200 / 25.4
|
|
8
|
+
_HWP_UNITS_PER_PT = 100
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _mm_to_hwp_units(value: float) -> int:
|
|
12
|
+
return round(value * _HWP_UNITS_PER_MM)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _pt_to_hwp_units(value: float) -> int:
|
|
16
|
+
return round(value * _HWP_UNITS_PER_PT)
|