Skip to main content

winhlp

A pure-Python parser for Windows Help (.hlp) and MediaView (.mvb) files — the help format used from Windows 3.0 through Windows 95 before everything went all chmmy. It parses a help file into a structured object model and can export it to JSON or a single browsable HTML page.

Based on helpdeco by Manfred Winterhoff, Ben Collver, and Paul Wise, therefore GPL licensed.

Install

pip install winhlp          # parser + terminal viewer
pip install winhlp[html]    # + Pillow, for PNG images in HTML export

Command line

winhlp file.hlp                        # open the interactive terminal viewer
winhlp file.hlp --json                 # dump the parsed structure as JSON
winhlp file.hlp --raw                  # JSON including raw byte blobs (base64)
winhlp file.hlp --html out.html        # render the whole file to one HTML page
winhlp file.hlp --html out.html --images extract   # write images to out_images/

The terminal viewer has a searchable topic sidebar, keyboard and mouse links, back/forward history, WinHelp browse-sequence navigation, popup topics, tables, and visible placeholders for embedded images. Press / to search, Tab/Shift-Tab to select links, Enter to follow one, and q to quit.

The HTML export is a single self-contained page: a table of contents followed by every topic as an anchored section, with internal jumps/popups turned into in-page links, character formatting from the |FONT descriptors as CSS, and images embedded as PNG data URIs (or extracted to a folder).

Library

from winhlp.lib.hlp import HelpFile

hlp = HelpFile(filepath="file.hlp")
for topic in hlp.topic.get_all_topics():
    print(topic.title, topic.context_names)
    print(topic.get_plain_text())

hlp.model_dump()          # full structured data (Pydantic)
hlp.parse_errors          # non-fatal per-file problems, if any

from winhlp.lib.html import export_html
open("out.html", "w").write(export_html(hlp))

What it handles

  • WinHelp 3.0, 3.1, and Windows 95, plus MediaView .mvb books.
  • Topic text and formatting, tables, hotspots/jumps, bitmaps (|bmN, SHG/MRB, named MediaView resources), phrases (old-style and Hall compression), |CONTEXT/keyword/title cross-references, and context-id recovery.
  • Malformed or truncated files degrade gracefully (see parse_errors) rather than aborting.

Parsing has been validated across ~6,500 real-world help files.

Development

make dev       # set up the venv + pre-commit hooks
make test      # run the test suite
make coverage  # HTML coverage report in htmlcov/

License

GPLv2, because that's what the original is.

As much as I dislike restrictive license terms, it'd be a lie to say this wasn't derived from the source code of helpdeco.

Download files

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

Source Distribution

winhlp-0.2.0.tar.gz (114.6 kB view details)

Uploaded Source

Built Distribution

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

winhlp-0.2.0-py3-none-any.whl (135.9 kB view details)

Uploaded Python 3

File details

Details for the file winhlp-0.2.0.tar.gz.

File metadata

  • Download URL: winhlp-0.2.0.tar.gz
  • Upload date:
  • Size: 114.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for winhlp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dcf74b0236e7ad9f35624ae1d64d384642c0a73b2918e1701e3093626c80610e
MD5 af872d378af8fe0475ecc68e3c82f202
BLAKE2b-256 b285232b4822e66630c1dd99bcee39c5e77dd20cfe66c8f593a7e48a16d9b45c

See more details on using hashes here.

File details

Details for the file winhlp-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: winhlp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 135.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for winhlp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4c1ec7a25b4bcd798f1e3c619bee8d5e394832c8b6604e3c95cce37b62abae77
MD5 ecbf3e304df6fb22cb8d5cbe14681f46
BLAKE2b-256 372173586599b627a1dd0fda4d655ff07db3ddd08d52bdb25e3980f49e9dce89

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.0

2 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