Skip to main content

ezjww

ezjww is a JWW parser and DXF conversion library. The core parser/writer is implemented in Rust and exposed to Python with PyO3.

Current Features

  • Validate and parse .jww files by their JwwData. binary signature.
  • Report structured CP932 replacement diagnostics with source byte offsets.
  • Read JWW files written by Jw_cad 8 (version 700, Unicode builds): CStrings with the MFC FF FE FF marker are decoded as UTF-16LE, and block definitions (whose list count is a WORD) are loaded.
  • Read damaged files best-effort: a main entity list that cannot be read to its end keeps the entities parsed so far and reports ENTITY_LIST_TRUNCATED (see docs/DIAGNOSTICS.md); MFC CArchive escaped counts (65535+ entities), NULL tags and big object tags are honoured.
  • Read document/header data from Python.
  • Convert parsed JWW entities to DXF intermediate entities.
  • Write ASCII DXF files.
  • Emit DXF handles, BLOCK_RECORD table, and OBJECTS section for better CAD compatibility.

Installation

Install the package from PyPI:

pip install ezjww

If you want to use the optional plotting feature, install the package with the plot extra:

pip install "ezjww[plot]"

Install the package from source:

git clone https://github.com/neka-nat/ezjww.git
cd ezjww
uv sync

Python API

from ezjww import (
    ALL_ISSUE_CODES,
    audit,
    bbox,
    is_jww_file,
    readfile,
    plot_jww,
    read_document,
    read_dxf_document,
    report,
    stats,
    to_dxf_string,
    write_dxf,
)

ok = is_jww_file("sample.jww")
doc = read_document("sample.jww")
dxf_doc = read_dxf_document("sample.jww")
dxf_text = to_dxf_string("sample.jww")
write_dxf("sample.jww", "sample.dxf")
plot_jww("sample.jww", save_path="sample.png")

drawing = readfile("sample.jww")
msp = drawing.modelspace()
lines = msp.query("LINE", layer="#lv4")
mix = msp.query('LINE POINT[layer=="#lv4", color==5]')  # ezdxf-like selector
extents = drawing.bbox(explode_inserts=True)
raw_dxf = drawing.to_dxf_string()
dist = drawing.stats()
health = drawing.audit()  # or: audit("sample.jww")
for diagnostic in health["diagnostics"]:
    print(diagnostic["code"], diagnostic["details"])

# Stable machine-readable catalog for integrations and CI.
assert set(health["issue_codes"]) <= set(ALL_ISSUE_CODES)
full = report("sample.jww", explode_inserts=True)

# expand INSERT references (nested block aware)
flat = drawing.to_dxf(explode_inserts=True, max_block_nesting=32)
flat_count = len(flat["entities"])
# max_block_nesting must be >= 1

CLI

The package installs the ezjww command.

# show summary
ezjww info jww_samples/Test1.jww

# run health checks
ezjww audit jww_samples/Test1.jww --json

# calculate drawing extents
ezjww bbox jww_samples/Test1.jww --json --explode-inserts

# show entity distribution
ezjww stats jww_samples/Test1.jww --json

# show combined audit+bbox+stats
ezjww report jww_samples/Test1.jww --json --explode-inserts

# convert one file
ezjww to-dxf jww_samples/Test1.jww -o /tmp/Test1.dxf

# convert one file + JSON report
ezjww to-dxf jww_samples/Test1.jww -o /tmp/Test1.dxf --report json

# convert one file with INSERT expansion
ezjww to-dxf jww_samples/Test1.jww -o /tmp/Test1.dxf --explode-inserts

# convert directory (recursive)
ezjww to-dxf-dir jww_samples -o /tmp/dxf_out -r

# render with matplotlib
ezjww plot jww_samples/Test1.jww -o /tmp/Test1.png --explode-inserts

Public contracts

is_jww_file(path) checks file content, not the filename extension. A matching signature is only a lightweight format check; parsing still validates the remaining structure.

Development

cargo fmt --all
cargo test
maturin develop

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ezjww-0.2.10.tar.gz (552.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ezjww-0.2.10-cp39-abi3-win_amd64.whl (367.1 kB view details)

Uploaded CPython 3.9+Windows x86-64

ezjww-0.2.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (465.5 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

ezjww-0.2.10-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (835.0 kB view details)

Uploaded CPython 3.9+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file ezjww-0.2.10.tar.gz.

File metadata

  • Download URL: ezjww-0.2.10.tar.gz
  • Upload date:
  • Size: 552.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for ezjww-0.2.10.tar.gz
Algorithm Hash digest
SHA256 e0dfe5f1f01b2ae789e5d4e33b67c55d7d9fc5f1d7e808ef7fdc6ffb307fb944
MD5 54bc557ca1aff2a6a41d63e59ca6b1b2
BLAKE2b-256 e56593a391ada7a9e3517424a4ce7b17c7679c3d2ace7f80a03df00dd4e9a2ab

See more details on using hashes here.

File details

Details for the file ezjww-0.2.10-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: ezjww-0.2.10-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 367.1 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for ezjww-0.2.10-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 4544b098592843690363f5dc039a87af52f6efa1519d357077fba218a2da74cf
MD5 7c3dfc4e531b30c989602c2a5ab4417c
BLAKE2b-256 3a3daa8211feeed1233e8cbe2035a92484b281cc3c56c6c83be621c0efa30b8b

See more details on using hashes here.

File details

Details for the file ezjww-0.2.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ezjww-0.2.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 80e081397bc2d87a3f104381bd1e25b6abf7af18fb107b1e0f1dd5a7f3a7527a
MD5 e712e312933678cc380c2d87e11efa55
BLAKE2b-256 3f6c9d4d02581bab38f91102c9fffe370624c01053fc8170d3be658e0f88fb06

See more details on using hashes here.

File details

Details for the file ezjww-0.2.10-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for ezjww-0.2.10-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 9b7ade8b2e66b707f8e8ca9b86a59e3b5a9f64fdc2c37eb0b0db599d46a6e687
MD5 9cbdd4afb14c5981e9eb3474f3b97498
BLAKE2b-256 1d5c7231b138300e296d2b474407fbc006764e78af406f3905c3a427d09347aa

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.13

4 files

0.2.12

4 files

0.2.11

4 files

This release

0.2.10 This release

4 files

0.2.9

4 files

0.2.8

4 files

0.2.7

4 files

0.2.6

4 files

0.2.5

4 files

0.2.4

4 files

0.2.3

4 files

0.2.2

4 files

0.2.1

4 files

0.2.0

4 files

0.1.0

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page