Skip to main content

a HTML/SVG/MathML to htpy converter

Project description

any2htpy

any2htpy is a principled converter for HTML/SVG and MathML to htpy inspired by html2htpy, the built-in tool for htpy.

Unlike html2htpy any2htpy uses a feature-complete HTML parser called justhtml.

Features

  • adheres to SVG and MathML
  • preserves case-sensitive attributes such as SVG viewBox
  • preserves SVG path commands and other non-class attribute values with spaces
  • tries best-effort DOM for malformed HTML
  • properly preserves whitespace for respective tags
  • only supports class_ syntax to allow stable parsing by TailwindCSS

A few things any2htpy needs to fix to be better suited for :

  • auto-detect if code is just a fragment or a whole document
  • boolean attributes are not yet detected (use dict syntax)
  • special attribute detection for AlpineJS or HTMX
    • specifically passing HTMX events : or AlpineJS @

Things that any2htpy will not do:

  • add the import htpy code
  • add the shorthand syntax of htpy

Usage

usage: any2htpy [-h] [--input INPUT] [--stdin] [--debug] [--prefix PREFIX] [--fragment]

options:
  -h, --help       show this help message and exit
  --input INPUT    input as string or file
  --stdin          use stdin as input
  --debug          generate debug output
  --prefix PREFIX  use a prefix for the tags
  --fragment       use htpy fragment

input through stdin

[me@machine ] echo "<p>Hello World</p>" | any2htpy --stdin --prefix htpy
htpy.p["Hello World"]

fetching an icon from Bootstrap library:

[me@machine ] curl -s https://icons.getbootstrap.com/assets/icons/0-circle.svg | any2htpy --fragment --stdin
svg(xmlns="http://www.w3.org/2000/svg",width="16",height="16",fill="currentColor",class_=["bi","bi-0-circle"],viewBox="0 0 16 16")[path(d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"),path(d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8")]

convert a local file

[me@machine ] any2htpy --input icon.svg

Disclaimer

As an AI-skeptic, specifically regarding code and software in general, justhtml is not exactly the obvious choice or more precisely the exact opposite one. However, the heavy test-rig with thousands of tests and the use as a parser without introducing it as a dependency in the resulting code make it a better choice than any other native Python parser library.

License

Licensed under the terms of the MIT License

Copyright

Copyright (c) 2026 Hartmut Seichter

Project details


Download files

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

Source Distribution

any2htpy-0.2.1.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

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

any2htpy-0.2.1-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file any2htpy-0.2.1.tar.gz.

File metadata

  • Download URL: any2htpy-0.2.1.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for any2htpy-0.2.1.tar.gz
Algorithm Hash digest
SHA256 00f448a76be25941b947661ffd8b29108e1c4262eb9aab1c25d9edbce7b95b6c
MD5 82c78735df641cc4880e435e08454841
BLAKE2b-256 9d7866a876a4e4d81cbeb7cdc5865108840320300fb3335db17a9b6bd267e4bd

See more details on using hashes here.

File details

Details for the file any2htpy-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: any2htpy-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for any2htpy-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c6f0f46480555c6cb1a7dd90554e9c7145b73d83aae32a9dcc8a4cf21921da7c
MD5 8ff7f71c0fc5dc848b6719b27a4b8895
BLAKE2b-256 13920568dba7a822aade20272591b9b80885a927a8192d759f0e55b5034a4c90

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page