Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <mailman.0.1724629207.2917.python-list@python.org>
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 ==========