Metadata-Version: 2.4
Name: any2htpy
Version: 0.1.2
Summary: a HTML/SVG/MathML to htpy converter
Author-email: Hartmut Seichter <hartmut@technotecture.com>
License-Expression: MIT
Project-URL: Homepage, https://codeberg.org/Seichter/any2htpy
Project-URL: Repository, https://codeberg.org/Seichter/any2htpy.git
Project-URL: Issues, https://codeberg.org/Seichter/any2htpy/issues
Keywords: htpy,html,svg,mathml,converter
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Classifier: Topic :: Text Processing :: Markup :: HTML
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: justhtml>=0.35.0
Provides-Extra: cli
Requires-Dist: htpy>=25.12.0; extra == "cli"
Dynamic: license-file

# any2htpy

**any2htpy** is a principled converter for HTML/SVG and MathML to [htpy](https://htpy.dev) inspired by `html2htpy`, the built-in tool for `htpy`.

Unlike `html2htpy` any2htpy uses a feature-complete HTML parser called [justhtml](https://github.com/emilstenstrom/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

```sh
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

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

## 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
