Deutsch English Français Italiano |
<mailman.0.1724629207.2917.python-list@python.org> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!2.eu.feeder.erje.net!feeder.erje.net!fu-berlin.de!uni-berlin.de!not-for-mail From: Erik Max Francis <max@alcyone.com> Newsgroups: comp.lang.python Subject: ANN: EmPy 4.2 -- a powerful, robust and mature templating system for Python Date: Sun, 25 Aug 2024 16:40:01 -0700 Organization: Alcyone Systems Lines: 289 Message-ID: <mailman.0.1724629207.2917.python-list@python.org> References: <d7302f9e-34ad-4831-88e6-0d8ab77b6a3b@alcyone.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de H5LnNO1fk7WCrP18IqyPIQGpweP0leMvh65Hj87SMOgQ== Cancel-Lock: sha1:w3kDfbR46nYyl27/9MdlbS03efM= sha256:DCXFtk0phtkl5Ft+lZZnjnozk1yapqwdcnlVZKfMkFw= Return-Path: <max@alcyone.com> X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org Authentication-Results: mail.python.org; dkim=pass reason="2048-bit key; unprotected key" header.d=alcyone-com.20230601.gappssmtp.com header.i=@alcyone-com.20230601.gappssmtp.com header.b=CKypR+6q; dkim-adsp=none (unprotected policy); dkim-atps=neutral X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'url-ip:140.82/16': 0.03; 'comments': 0.03; 'pip': 0.04; 'indicate': 0.05; 'kernel': 0.05; "python's": 0.05; 'usage': 0.05; 'variable': 0.05; '(to': 0.07; 'aug': 0.07; 'faith': 0.07; 'filter': 0.07; 'linux,': 0.07; 'mar': 0.07; 'modules': 0.07; 'string': 0.07; 'template': 0.07; 'tests': 0.07; 'underlying': 0.07; 'updates.': 0.07; 'python.': 0.08; '2.7': 0.09; 'attempts': 0.09; 'compiler': 0.09; 'etc.).': 0.09; 'expansion': 0.09; 'frontend': 0.09; 'macos': 0.09; 'modules.': 0.09; 'moved': 0.09; 'options,': 0.09; 'parse': 0.09; 'skip:` 10': 0.09; 'skip:` 20': 0.09; 'text.': 0.09; 'uniform': 0.09; 'upgrading': 0.09; 'url:pypy': 0.09; 'subject:Python': 0.12; 'url:github': 0.14; 'announce': 0.15; 'supported': 0.15; 'syntax': 0.15; 'url-ip:140/8': 0.15; '"fully': 0.16; '(why': 0.16; '.py': 0.16; 'abstraction': 0.16; 'apis,': 0.16; 'arbitrary': 0.16; 'arguments': 0.16; 'attributes': 0.16; 'backward': 0.16; 'builtin': 0.16; 'cleaned': 0.16; 'column': 0.16; 'command:': 0.16; 'comments.': 0.16; 'conditional': 0.16; 'constructor': 0.16; 'cpython': 0.16; 'defaults': 0.16; 'document,': 0.16; 'encoding': 0.16; 'executable': 0.16; 'expressions': 0.16; 'file/module': 0.16; 'filter,': 0.16; 'fixes': 0.16; 'from:addr:max': 0.16; 'full-fledged': 0.16; 'icons': 0.16; 'interpreter': 0.16; 'legacy': 0.16; 'literals': 0.16; 'modules,': 0.16; 'namely:': 0.16; 'nothing,': 0.16; 'pip,': 0.16; 'prefix': 0.16; 'python3': 0.16; 'pythonic': 0.16; 'received:mail-pf1-x433.google.com': 0.16; 'repeated': 0.16; 'shortcuts': 0.16; 'specify': 0.16; 'structures': 0.16; 'subject: -- ': 0.16; 'subject:ANN': 0.16; 'system;': 0.16; 'tests,': 0.16; 'textual': 0.16; 'third-party': 0.16; 'unicode': 0.16; 'url:activestate': 0.16; 'url:gz': 0.16; 'url:jupyter': 0.16; 'url:tar': 0.16; 'variant': 0.16; 'python': 0.16; 'api': 0.17; 'instead': 0.17; 'probably': 0.17; 'bug': 0.19; 'url': 0.19; 'to:addr:python-list': 0.20; 'option': 0.20; 'skip:_ 10': 0.22; 'version': 0.23; 'install': 0.23; 'code': 0.23; 'command': 0.23; 'installed': 0.23; 'url:wiki': 0.23; 'run': 0.23; 'favor': 0.76; 'produces': 0.76; 'supposed': 0.76; 'skip:k 20': 0.78; 'highly': 0.78; 'major': 0.78; 'indicated': 0.81; 'skype': 0.81; 'unit': 0.81; 'powerful': 0.84; 'url-ip:199/8': 0.84; 'variety': 0.84; '3.0': 0.84; 'callback': 0.84; 'changed,': 0.84; 'cleaner': 0.84; 'comments,': 0.84; 'controls,': 0.84; 'eliminate': 0.84; 'etc.,': 0.84; 'exceptions': 0.84; 'file(s)': 0.84; 'forms.': 0.84; 'inconsistent': 0.84; 'licensed': 0.84; 'line;': 0.84; 'macro': 0.84; 'macros': 0.84; 'powerful,': 0.84; 'roles,': 0.84; 'sign,': 0.84; 'signals': 0.84; 'subject: \n ': 0.84; 'removal': 0.91; 'retained': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alcyone-com.20230601.gappssmtp.com; s=20230601; t=1724629203; x=1725234003; darn=python.org; h=content-transfer-encoding:organization:subject:from:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=9K7bqUzo9I1j3wd232UeyyhduK7OHGdYl0MDn+UEPpk=; b=CKypR+6qSytqcp13jkqqV4RzdH1aL03Rty/u4unitiFsWRAwxPUBu/kx0Ig2nMIsoV gBuNQPibCuiDASJ5yQ1UhpKmqMkbTk8Wu9Kvr5JJ+jJjUiMUKAvcSdwAP+fR9rnj/O9Q jhAy/jCMyNn30HZ4976h/k0Ru/+7i4CvLfYRORIDfIeBQxM1P9JHjDmdiGdPnmVnZfT8 21yUHJpifoXLBMcS7DB0dbWd4wQdGkimF/OURNnfdOijwUWb4zCoeMRl31dnWtK2vzk+ jV3zH4NVjhZbSR0o/UMZn/7hSWtSqcCYKZiO2E2a9gxdj0cCZv96wNWRqdvcrp33lCOC /Zzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724629203; x=1725234003; h=content-transfer-encoding:organization:subject:from:to :content-language:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9K7bqUzo9I1j3wd232UeyyhduK7OHGdYl0MDn+UEPpk=; b=YG1ZVbMQpOg6UPQpccdRuwzHHtOh7RWfIMiBkQRG0gX9r1Ua85qDDs3Rknvv7FHuwy NlVgXYWZpCq8oGviFc5Ea8ubbNTXIbNFKc7D0KbtDJ50OIjg7KT/p2+3a9a31uMCy+gM 3Hd3Ir0hSNw87h/GWeXurLdnkkwwzQd9FTJT6MKa0GYbE3jo00HLxY6lwx8aGaSwSdGx Nwz+q7W6F7hhFfPjmfdVpRL/2uxW1/zXNGs4zaoLB4rU9CwnFJd2iZ2N51UtXtbnO5U9 JNpFtAVHoeJM9LhN7yGPo1vCWETo6Wh2gHA8ElSPN8B897ZFFDlx/JM7ISFgVgl+oFrU VDcA== X-Gm-Message-State: AOJu0YwHmWtgJ/l9pctYJjWhSGC22lDeSQX8MU7CbWOtkC+5dS2OOSOu 0XyaMcnSNVjaDYQmxLAYIB/Rnhmzz/zhkRxN7hzvTEa91R2N8j29FZAX4ragrUQFgh2DG4Rn67v P X-Google-Smtp-Source: AGHT+IF0M7hn5F5Y04mZ/FFQQv8hGov8PQHIlR1nFBos0a8sr9GzAqlmP8v4UM6ibKWNtEos8FFK8A== X-Received: by 2002:a05:6a21:4603:b0:1c9:16d8:5b89 with SMTP id adf61e73a8af0-1cc89b2a5d7mr9133410637.0.1724629202683; Sun, 25 Aug 2024 16:40:02 -0700 (PDT) User-Agent: Mozilla Thunderbird Content-Language: en-US X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.39 Precedence: list List-Id: General discussion list for the Python programming language <python-list.python.org> List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe> List-Archive: <https://mail.python.org/pipermail/python-list/> List-Post: <mailto:python-list@python.org> List-Help: <mailto:python-list-request@python.org?subject=help> List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe> X-Mailman-Original-Message-ID: <d7302f9e-34ad-4831-88e6-0d8ab77b6a3b@alcyone.com> Bytes: 20130 # EmPy 4.2 release announcement I'm pleased to announce the release of EmPy 4.2. The 4._x_ series is a modernization of the software and a revamp of the EmPy system to update its feature set and make it more consistent with the latest Python versions and practices. EmPy 4._x_ was also relicensed to BSD. The 4._x_ series adds new markups, including inline comments, backquote literals, chained if-then-else extended expression, functional expressions, support for modern Pythonic controls, stringized and multiline significators, disabling and re-enabling output, named escapes, diacritics, icons, emojis, and customizable extension markups. It adds support for configuration objects (replacing options dictionaries); native support for Unicode, file buffering, reference counted `sys.stdout` proxies and error dispatchers and handlers; fixes several serious bugs; has a set of full unit and system tests, an extensive builtin help system; and the online documention has been rewritten and expanded. It also allows customizing the underlying interpreter core and full support for EmPy modules -- EmPy documents which can be imported as modules. Attempts have been made to make EmPy 4._x_ as backward compatible as is practical. Most common markup has not changed; the only changes being removal of `repr` (in favor of backquote literals) as well as literal close parenthesis, bracket and brace markup; in-place markup has changed syntax (to make way for emojis); and extension/custom markup is now parsed more sensibly. Most backward-incompatible changes are in the embedding interface. The `Interpreter` constructor and global `expand` function now require keyword arguments to prevent further backward compatibility problems, though effort has been made to make the behavior as backward compatible as possible. The supported environment variables have changed, as well as the filter, diversion and hook APIs, and options dictionaries no longer exist (in deference to configurations). For a comprehensive list of changes from 3._x_ to 4._x_, see: <http://www.alcyone.com/software/empy/ANNOUNCE.html#changes> ## Introduction: Welcome to EmPy! [EmPy](http://www.alcyone.com/software/empy/) is a powerful, robust and mature templating system for inserting Python code in template text. EmPy takes a source document, processes it, and produces output. This is accomplished via expansions, which are signals to the EmPy system where to act and are indicated with markup. Markup is set off by a customizable prefix (by default the at sign, `@`). EmPy can expand arbitrary Python expressions, statements and control structures in this way, as well as a variety of additional special forms. The remaining textual data is sent to the output, allowing Python to be used in effect as a markup language. EmPy also supports hooks, which can intercept and modify the behavior of a running interpreter; diversions, which allow recording and playback; filters, which are dynamic and can be chained together; and a dedicated user-customizable callback markup. The system is highly configurable via command line options, configuration files, and environment variables. EmPy documents can also be imported as modules, and an extensive API is also available for embedding EmPy functionality in your own Python programs. EmPy also has a supplemental library for additional non-essential features (`emlib`), a documentation building library used to create this documentation (`emdoc`), and an extensive help system (`emhelp`) which can be queried from the command line with the main executable `em.py` (`-h/--help`, `-H/--topics=TOPICS`). The base EmPy interpreter can function with only the `em.py`/`em` file/module available. EmPy can be used in a variety of roles, including as a templating system, a text processing system (preprocessing and/or postprocessing), a simple macro processor, a frontend for a content management system, annotating documents, for literate programming, as a souped-up text encoding converter, a text beautifier (with macros and filters), and many other purposes. ========== REMAINDER OF ARTICLE TRUNCATED ==========