• [Python-announce] TatSu V5.23.0 New Features + Bug Fixes - Less Dependencies

    From =?UTF-8?Q?Juancarlo_A=C3=B1ez?=@apalala@gmail.com to comp.lang.python.announce on Sun Jun 28 20:47:32 2026
    From Newsgroup: comp.lang.python.announce

    <!-- Copyright (c) 2017-2026 Juancarlo Añez (apalala@gmail.com) SPDX-License-
    Identifier: BSD-4-Clause -->

    [V5.23.0] NEW FEATURES + BUGFIXES + (- DEPENDENCIES)

    ADDED

    * Added --generate-parser option to the cling CLI tool.

    * Added tatsu.util.barz — self-contained progress bar rendering (replaces
    * rich.progress).

    * Added tatsu.util.treez — self-contained dependency tree rendering (replaces
    * rich.tree).

    * Added tests/tree_test.py.

    * Added g2e, bench, and ideps subcommands to cling CLI — all
    tools now
    * invocable through cling.

    * Added add_argparse_options(parser) pattern to bench.py, ideps.py, g2etool.py
    * for uniform CLI interface.

    * Added tatsu.ztyle.markup — Rich-style markup parser
    ([bold]text[/],
    * [red]...[/all]). Parse with markup() → returns StyleZ (a str subclass
    * wrapping list[Style]; styles via .style property). Optionally pass a color
    * policy.

    * Added Style.from_raw() — reconstruct a Style from an ANSI escape string
    * (e.g. "\e[31mhello\e[0m") for roundtrip support.

    * Added Style.apply_style() — applies ANSI rendering to an arbitrary string
    * directly.

    * Added tatsu.util.tty — shared TTY/ANSI utilities (ANSI_RE,
    SGR_RE,
    * tty_escape, tty_unescape, descape, visual_len, cursor hide/show, pushup,
    * blankpad).

    * Added etc/RICH_MARKUP.md — specification for the Rich-style markup syntax.

    * Added Style.__json__() protocol — Style now serializes through
    * asjson/fromjson (any object with __json__ method is supported).

    * Added tatsu/packetz/ — inter-task communication via filesystem-based message
    * passing queues that work across threading and multiprocessing.

    * Added tatsu/barz/ — self-contained progress bar rendering with
    ztyle
    * coloring support and a single background rendering thread.

    * Added rich dependency removed from core: pygments optional for colored cling
    * output; graphviz optional for graphical diagrams (text-based
    railroad
    * diagrams remain default).

    CHANGED

    * No more colorama: All mentions of colorama removed. The project consistently
    * uses its own ztyle library.

    * No more rich dependency: cling CLI no longer pulls in rich. Progress bars
    * use tatsu.util.barz. Dependency trees use tatsu.util.treez.
    Summaries use
    * ztyle.

    * colorize module renamed to ztyle to avoid confusion with the colorize
    * package on PyPI.

    * tatsu.grammars renamed to tatsu.peg (kept grammars.py shim).

    * tatsu.api moved into its own tatsu.api package.

    * ideps.py refactored to use own Tree + Style instead of rich.tree.

    * bench.py, ideps.py, g2etool.py migrated from ad-hoc argument
    parsing to
    * add_argparse_options(parser) + main(parser) -> int.

    * Bar metrics refactored: Metrics class with lazy @cached_property per column;
    * BarRowData base class extracted to break circular dependency; Col enum moved
    * to own module.

    * tatsu/util/escapes.py renamed to tatsu/util/tty.py with expanded API (cursor
    * controls, pushup, blankpad, etc.).

    * Style.__repr__ now uses \e notation consistently and encodes fmt
    specs for
    * roundtrip via f{...:...}.

    * Style.__len__ uses visual_len() from util.tty (ignores ANSI
    escapes in
    * length).

    * packetz serialization simplified: removed hash validation;
    __class__
    * compressed to @ in JSON.

    * barz.BarRow switched from private accessors to public
    attributes;
    * stop_on_complete → selfstop.

    * parproc.task uses PacketzQueue directly instead of init_queue() helper.

    FIXED

    * Fixed: Group no longer optimized away if Group.exp contains non-leaf nodes.
    * The optimization made EBNF representation semantically
    incorrect. Re-
    * introducing a group for --pretty had several special cases (group if
    part of
    * Sequence, Named, ...).

    * Fixed: Exporting cling CLI no longer pulls in rich as a dependency.

    * Fixed: ANSI escape utilities no longer duplicated across
    ztyle.style and
    * packetz.packet; consolidated in util.tty.


    --
    Juancarlo Añez
    mailto:apalala@gmail.com
    --- Synchronet 3.22a-Linux NewsLink 1.2