Package: zpretty
A tool to format in avery opinionatedway HTML, XML and text
containing XML snippets.It satisfies a primary need: decrease the pain of diffing HTML/XML.For this reasonzprettyformats the markup following these rules of
thumb:maximize the vertical space/decrease the line lengthattributes should be sorted consistentlyattribute sorting is first semantic and then alphabeticThis tool understands theTAL
languageand
has some features dedicated to it.This tool is not a linter! If you are looking for linters safe bets areTidyandxmllint.You may have parsing problems!zprettywill close for you some known
self closing tags, likeinputandimg, that are allowed to be open
in HTML.zprettyis not clever enough to understand correctly valueless
attributes! Some work is ongoing, but it works best with "normal"
attributes.Lack of feature/slowness are a known issue. For the moment the
development focused in having a working tool. So it works fast enough:
less than a second to format a ~100k file. New features are planned and
also huge perfomance boost can be easily obtained. Anywayzprettyis
not your option for formatting large files (> 1 MB).SeeTODO sectionto know what is forecast for the
future.The source code and the issue tracker are hosted onGitHub.INSTALLThe suggested installation method is usingpip:python3-mpipinstall--userzprettyThe latest release ofzprettyrequires Python3. If you need to use
Python2.7 usezpretty0.9.x.USAGEBasic usage:$zpretty-husage: zpretty [-h] [--encoding ENCODING] [-i] [-v] [-x] [-z] [--check][--include INCLUDE] [--exclude EXCLUDE][--extend-exclude EXTEND_EXCLUDE][paths ...]positional arguments:paths                 The list of files or directory to prettify (defaults tostdin). If a directory is passed, all files anddirectories matching the regular expression passed to--include will be prettified.options:-h, --help            show this help message and exit--encoding ENCODING   The file encoding (defaults to utf8)-i, --inplace         Format files in place (overwrite existing file)-v, --version         Show zpretty version number-x, --xml             Treat the input file(s) as XML-z, --zcml            Treat the input file(s) as XML. Follow the ZCMLstyleguide--check               Return code 0 if nothing would be changed, 1 if somefiles would be reformatted--include INCLUDE     A regular expression that matches files and directoriesthat should be included on recursive searches. An emptyvalue means all files are included regardless of thename. Use forward slashes for directories on allplatforms (Windows, too). Exclusions are calculatedfirst, inclusions later. [default:\.(html|pt|xml|zcml)$]--exclude EXCLUDE     A regular expression that matches files and directoriesthat should be excluded on recursive searches. An emptyvalue means no paths are excluded. Use forward slashesfor directories on all platforms (Windows, too).Exclusions are calculated first, inclusions later.[default: /(\.direnv|\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|venv|\.svn|\.ipynb_checkpoints|_build|buck-out|build|dist|__pypackages__)/]--extend-exclude EXTEND_EXCLUDELike --exclude, but adds additional files anddirectories on top of the excluded ones. (Useful if yousimply want to add to the default)The default exclude pattern is: `/(\.direnv|\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|venv|\.svn|\.ipynb_checkpoints|_build|buck-out|build|dist|__pypackages__)/`Without parameters constraining the file type (e.g.-x,-z, ...)zprettywill try to guess the right options for you.Example:zpretty hello_world.htmlpre-commit supportzprettycan be used as apre-commithook.
To do so, add the following to your.pre-commit-config.yaml:-repo:https://github.com/collective/zprettyrev:FIXMEhooks:-id:zprettyVSCode extensionThere is a VSCode extension that useszpretty:https://marketplace.visualstudio.com/items?itemName=erral.erral-zcmlLanguageConfigurationThanks to @erral for the work!DEVELOPgitclone...cdzpretty
makeRUNNING TESTSmaketestChangelog3.1.0 (2023-06-30)No changes were made from the latest alpha version
[ale-rt]3.1.0a2 (2023-05-09)Improve the regular expression that matches the entities
(Fixes #130)
[ale-rt]3.1.0a1 (2023-05-04)Add command line parameters to include/exclude files and folders
(Implements #96)
[ale-rt]Be tolerant with characters forbidden in XML when dealing with tal attributes
(See #125)
[ale-rt]3.0.4 (2023-04-20)Fix bogus ampersands in attributes
(Fixes #116)
[ale-rt]3.0.3 (2023-03-26)Handle HTML files with an XML preamble before the doctype.
(Fixes #118)
[ale-rt]3.0.2 (2023-02-26)Handle forbidden characters in attributes properly
(Fixes #110)
[ale-rt]Fix attribute with a value containing double quotes
(Fixes #109)
[ale-rt]3.0.1 (2023-02-09)Fix an issue with empty lines inside an attribute.
(Fixes #106)
[ale-rt]3.0.0 (2023-02-09)The pre-commit hook now modifies fixes the files instead of just checking
if they should be fixed
[ale-rt]Fix the check behavior when multiple files are passed
[ale-rt]Improve the check that sniffs html files
(Fixes #89)
[ale-rt]2.4.1 (2022-10-25)XML files with newlines between attributes are properly formatted
(Fixes #84)
[ale-rt]Do not tamper attributes in XML as if they were a page template attribute
(Fixes #85)
[ale-rt]2.4.0 (2022-10-22)Prevent fiddling around with custom entity declaration (Fixes #80)
[ale-rt]Add support for Python 3.11.
[ale-rt]Drop support for Python 3.6.
[ale-rt]2.3.1 (2022-09-30)Do not try to do anything on CDATAs (Fixes #76)
[ale-rt]2.3.0 (2022-09-26)Added a -v/--version option [ale-rt]2.3.0a4 (2022-09-24)Remove custom tree builder which is not used anymore [ale-rt]Fix entity sustitution in XML (Fixes #48, Refs #71) [ale-rt]2.3.0a3 (2022-07-08)Do not escape entities inside the script and style tags (Fixes #57) [ale-rt]2.3.0a2 (2022-07-08)Fix release2.3.0a1 (2022-07-08)Preserve whitespace in XML documents andpreelements (Fixes #64) [ale-rt]Improve doctype handling [ale-rt]Do not kill XML documents with a doctype (Fixes #47) [ale-rt]Support Python 3.10 [ale-rt]2.2.0 (2021-12-06)Add a--checkcommand line parameter (Fixes #49) [ale-rt]Now the package ispre-commitcompatibile (Fixes #50) [ale-rt]2.1.0 (2021-02-12)Remove unusedautofixmethod [ale-rt]Do not render a spurious=""when new lines appear inside a tag (Refs. #35) [ale-rt]The attributes renderer knows about the element indentation
and for indents the attributes consequently [ale-rt]The ZCML element has now its custom tag templates, this simplifies the code [ale-rt]Attributes content spanning multiple lines is not indented anymore (Refs. #17) [ale-rt]Improved sorting for zcml attributes (Refs. #11) [ale-rt]Code is compliant with black 20.8b1 [ale-rt]Switch to pytest for running tests [ale-rt]Upgrade dev requirements [ale-rt]Support Python 3.9 [ale-rt]2.0.0 (2020-05-28)Updated the list of self closing elements and boolean attributes [ale-rt]1.0.3 (2020-05-22)Fix unwanted newlines (#20)1.0.2 (2019-11-03)In Python3.8 quotes in attributes were escapedFix output again on file and stdout [ale-rt]1.0.1 (2019-10-28)Fix output on file [ale-rt]1.0.0 (2019-10-27)Support Python3 only [ale-rt]0.9.3 (2017-05-06)Last release that supports Python2.7Fix text methodPreserve entities in textAdded an--encodingparameterAdded an--xmlparameter to force xml parsingChoose the better parser according to the given filename if no parser is forcedProcess stdin if-is in the arguments or no arguments are passed [ale-rt]0.9.2 (2017-02-27)Small modification for the order of the zcml attributesAuto add a new line to the end of the prettified filesSelf heal open self closing tag. [ale-rt]0.9.1.1 (2017-02-18)Fixed bad release. [ale-rt]0.9.1 (2017-02-18)Initial support for zcml style guide (#3). [ale-rt]0.9.0 (2017-02-11)Initial release. [ale-rt]