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.9.tar.gz (544.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.9-cp39-abi3-win_amd64.whl (368.1 kB view details)

Uploaded CPython 3.9+Windows x86-64

ezjww-0.2.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (466.4 kB view details)

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

ezjww-0.2.9-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (836.6 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.9.tar.gz.

File metadata

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

File hashes

Hashes for ezjww-0.2.9.tar.gz
Algorithm Hash digest
SHA256 ed6f907afc739aa1e010daa0bc1674f211b94c416c9460e513d593427d5e9534
MD5 95bb469be164184629c9108494251173
BLAKE2b-256 ee84b8e647a4ea79fc3779a97d8718958f48b262d0e9e7cc3a0f36ebc698bbe5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ezjww-0.2.9-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 368.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.9-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ea5284bdb6e03cc15fb4ef3181a79c12da7bfba0c41264e4223a6059db2f1f9f
MD5 f67a6af44ad41fff837cd1b9c2ee0a4b
BLAKE2b-256 01b2d709c9428dcbc952fd1c75f27736231b15703243b5df0f59bfdc9bc03656

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ezjww-0.2.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 310bff405586d9c2c7cc33a8ef4f44b775676a083c650987c7905fce6ab53483
MD5 67f8ea032584d13e2f52c724026b1a61
BLAKE2b-256 07578ae3c8d396ad32cd5e634de564341c3a2f6c1545272b318604fd02eb419d

See more details on using hashes here.

File details

Details for the file ezjww-0.2.9-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.9-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 1c6e1ca6f914d364bdad268d60613783d27b3e17c0a4b17dca1eaa15f4dca0f4
MD5 f4d175e3de54b2d1085dc84d359333cb
BLAKE2b-256 4ebff5fff6f8f2533f8745905869bd595c9d1f0ad1023f66a71005aa76596348

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

0.2.10

4 files

This release

0.2.9 This release

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