summaryrefslogtreecommitdiff
path: root/CHANGES
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-07-07 20:52:31 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2012-07-07 20:52:31 -0400
commit0f58ab39bf6753492e565a85f9f436d476a550b1 (patch)
tree241293f5643da3d12148af15af3c81a79ea8c59e /CHANGES
parent936efb91e23058a0450eea823489514f4d422a51 (diff)
downloadmako-0f58ab39bf6753492e565a85f9f436d476a550b1.tar.gz
epic trailing whitespace removal
Diffstat (limited to 'CHANGES')
-rw-r--r--CHANGES310
1 files changed, 155 insertions, 155 deletions
diff --git a/CHANGES b/CHANGES
index 535658b..a6d0509 100644
--- a/CHANGES
+++ b/CHANGES
@@ -14,7 +14,7 @@
Thanks to Ben Trofatter for all
the work on this [ticket:125]
-- [feature] Added a real check for "reserved"
+- [feature] Added a real check for "reserved"
names, that is names which are never pulled
from the context and cannot be passed to
the template.render() method. Current names
@@ -22,15 +22,15 @@
- [feature] The html_error_template() will now
apply Pygments highlighting to the source
- code displayed in the traceback, if Pygments
- if available. Courtesy Ben Trofatter
+ code displayed in the traceback, if Pygments
+ if available. Courtesy Ben Trofatter
[ticket:95]
- [feature] Added support for context managers,
i.e. "% with x as e:/ % endwith" support.
Courtesy Ben Trofatter [ticket:147]
-- [feature] Added class-level flag to CacheImpl
+- [feature] Added class-level flag to CacheImpl
"pass_context"; when True, the keyword argument
'context' will be passed to get_or_create()
containing the Mako Context object.
@@ -40,7 +40,7 @@
to filehandles being implicitly closed.
[ticket:182]
-- [bug] Fixed endless recursion bug when
+- [bug] Fixed endless recursion bug when
nesting multiple def-calls with content.
Thanks to Jeff Dairiki. [ticket:186]
@@ -56,7 +56,7 @@
0.6.1
- [bug] Added special compatibility for the 0.5.0
Cache() constructor, which was preventing file
- version checks and not allowing Mako 0.6 to
+ version checks and not allowing Mako 0.6 to
recompile the module files.
0.6.0
@@ -66,7 +66,7 @@
default plugin. Template and TemplateLookup
now accept a string "cache_impl" parameter which
refers to the name of a cache plugin, defaulting
- to the name 'beaker'. New plugins can be
+ to the name 'beaker'. New plugins can be
registered as pkg_resources entrypoints under
the group "mako.cache", or registered directly
using mako.cache.register_plugin(). The
@@ -75,7 +75,7 @@
- [feature] Added support for Beaker cache regions
in templates. Usage of regions should be considered
- as superseding the very obsolete idea of passing in
+ as superseding the very obsolete idea of passing in
backend options, timeouts, etc. within templates.
- [feature] The 'put' method on Cache is now
@@ -86,10 +86,10 @@
minus the "cache_" prefix will be passed as keyword
arguments to the CacheImpl methods.
-- [feature] Template and TemplateLookup now accept an argument
+- [feature] Template and TemplateLookup now accept an argument
cache_args, which refers to a dictionary containing
- cache parameters. The cache_dir, cache_url, cache_type,
- cache_timeout arguments are deprecated (will probably
+ cache parameters. The cache_dir, cache_url, cache_type,
+ cache_timeout arguments are deprecated (will probably
never be removed, however) and can be passed
now as cache_args={'url':<some url>, 'type':'memcached',
'timeout':50, 'dir':'/path/to/some/directory'}
@@ -102,11 +102,11 @@
then template.render(myfilter=some_callable)
[ticket:180]
-- [feature] Added "--var name=value" option to the mako-render
- script, allows passing of kw to the template from
+- [feature] Added "--var name=value" option to the mako-render
+ script, allows passing of kw to the template from
the command line. [ticket:178]
-- [feature] Added module_writer argument to Template,
+- [feature] Added module_writer argument to Template,
TemplateLookup, allows a callable to be passed which
takes over the writing of the template's module source
file, so that special environment-specific steps
@@ -120,33 +120,33 @@
[ticket:173]
- [bug] The "benchmark" example is now Python 3 compatible
- (even though several of those old template libs aren't
+ (even though several of those old template libs aren't
available on Py3K, so YMMV) [ticket:175]
0.5
- A Template is explicitly disallowed
from having a url that normalizes to relative outside
- of the root. That is, if the Lookup is based
+ of the root. That is, if the Lookup is based
at /home/mytemplates, an include that would place
- the ultimate template at
+ the ultimate template at
/home/mytemplates/../some_other_directory,
i.e. outside of /home/mytemplates,
is disallowed. This usage was never intended
despite the lack of an explicit check.
The main issue this causes
- is that module files can be written outside
+ is that module files can be written outside
of the module root (or raise an error, if file perms aren't
- set up), and can also lead to the same template being
- cached in the lookup under multiple, relative roots.
- TemplateLookup instead has always supported multiple
+ set up), and can also lead to the same template being
+ cached in the lookup under multiple, relative roots.
+ TemplateLookup instead has always supported multiple
file roots for this purpose.
[ticket:174]
0.4.2
- Fixed bug regarding <%call>/def calls w/ content
whereby the identity of the "caller" callable
- inside the <%def> would be corrupted by the
- presence of another <%call> in the same block.
+ inside the <%def> would be corrupted by the
+ presence of another <%call> in the same block.
[ticket:170]
- Fixed the babel plugin to accommodate <%block>
@@ -154,18 +154,18 @@
0.4.1
- New tag: <%block>. A variant on <%def> that
- evaluates its contents in-place.
+ evaluates its contents in-place.
Can be named or anonymous,
the named version is intended for inheritance
- layouts where any given section can be
+ layouts where any given section can be
surrounded by the <%block> tag in order for
it to become overrideable by inheriting
templates, without the need to specify a
top-level <%def> plus explicit call.
- Modified scoping and argument rules as well as a
- more strictly enforced usage scheme make it ideal
- for this purpose without at all replacing most
- other things that defs are still good for.
+ Modified scoping and argument rules as well as a
+ more strictly enforced usage scheme make it ideal
+ for this purpose without at all replacing most
+ other things that defs are still good for.
Lots of new docs. [ticket:164]
- a slight adjustment to the "highlight" logic
@@ -174,12 +174,12 @@
without any extra guessing. [ticket:165]
0.4.0
-- A 20% speedup for a basic two-page
+- A 20% speedup for a basic two-page
inheritance setup rendering
a table of escaped data
(see http://techspot.zzzeek.org/2010/11/19/quick-mako-vs.-jinja-speed-test/).
A few configurational changes which
- affect those in the I-don't-do-unicode
+ affect those in the I-don't-do-unicode
camp should be noted below.
- The FastEncodingBuffer is now used
@@ -187,30 +187,30 @@
regardless of whether output_encoding
is set to None or not. FEB is faster than
both. Only StringIO allows bytestrings
- of unknown encoding to pass right
- through, however - while it is of course
- not recommended to send bytestrings of unknown
+ of unknown encoding to pass right
+ through, however - while it is of course
+ not recommended to send bytestrings of unknown
encoding to the output stream, this
mode of usage can be re-enabled by
setting the flag bytestring_passthrough
to True.
-- disable_unicode mode requires that
+- disable_unicode mode requires that
output_encoding be set to None - it also
forces the bytestring_passthrough flag
to True.
- the <%namespace> tag raises an error
if the 'template' and 'module' attributes
- are specified at the same time in
- one tag. A different class is used
- for each case which allows a reduction in
+ are specified at the same time in
+ one tag. A different class is used
+ for each case which allows a reduction in
runtime conditional logic and function
call overhead. [ticket:156]
-- the keys() in the Context, as well as
+- the keys() in the Context, as well as
it's internal _data dictionary, now
- include just what was specified to
+ include just what was specified to
render() as well as Mako builtins
'caller', 'capture'. The contents
of __builtin__ are no longer copied.
@@ -225,45 +225,45 @@
setup.py instead of "install_requires".
This to produce a lighter weight install
for those who don't use the caching
- as well as to conform to Pyramid
+ as well as to conform to Pyramid
deployment practices. [ticket:154]
- The Beaker import (or attempt thereof)
- is delayed until actually needed;
- this to remove the performance penalty
- from startup, particularly for
+ is delayed until actually needed;
+ this to remove the performance penalty
+ from startup, particularly for
"single execution" environments
such as shell scripts. [ticket:153]
- Patch to lexer to not generate an empty
'' write in the case of backslash-ended
lines. [ticket:155]
-
-- Fixed missing **extra collection in
+
+- Fixed missing **extra collection in
setup.py which prevented setup.py
from running 2to3 on install.
[ticket:148]
-
-- New flag on Template, TemplateLookup -
+
+- New flag on Template, TemplateLookup -
strict_undefined=True, will cause
- variables not found in the context to
+ variables not found in the context to
raise a NameError immediately, instead of
defaulting to the UNDEFINED value.
- The range of Python identifiers that
are considered "undefined", meaning they
- are pulled from the context, has been
- trimmed back to not include variables
+ are pulled from the context, has been
+ trimmed back to not include variables
declared inside of expressions (i.e. from
- list comprehensions), as well as
+ list comprehensions), as well as
in the argument list of lambdas. This
to better support the strict_undefined
- feature. The change should be
+ feature. The change should be
fully backwards-compatible but involved
a little bit of tinkering in the AST code,
- which hadn't really been touched for
+ which hadn't really been touched for
a couple of years, just FYI.
-
+
0.3.5
- The <%namespace> tag allows expressions
for the `file` argument, i.e. with ${}.
@@ -271,22 +271,22 @@
must be referenced explicitly.
[ticket:141]
-- ${} expressions embedded in tags,
- such as <%foo:bar x="${...}">, now
+- ${} expressions embedded in tags,
+ such as <%foo:bar x="${...}">, now
allow multiline Python expressions.
-
-- Fixed previously non-covered regular
- expression, such that using a ${} expression
- inside of a tag element that doesn't allow
+
+- Fixed previously non-covered regular
+ expression, such that using a ${} expression
+ inside of a tag element that doesn't allow
them raises a CompileException instead of
silently failing.
- Added a try/except around "import markupsafe".
This to support GAE which can't run markupsafe.
- [ticket:151] No idea whatsoever if the
- install_requires in setup.py also breaks GAE,
+ [ticket:151] No idea whatsoever if the
+ install_requires in setup.py also breaks GAE,
couldn't get an answer on this.
-
+
0.3.4
- Now using MarkupSafe for HTML escaping,
i.e. in place of cgi.escape(). Faster
@@ -294,19 +294,19 @@
single quotes for additional security.
Supports the __html__ attribute for
the given expression as well.
-
+
When using "disable_unicode" mode,
a pure Python HTML escaper function
is used which also quotes single quotes.
-
- Note that Pylons by default doesn't
- use Mako's filter - check your
+
+ Note that Pylons by default doesn't
+ use Mako's filter - check your
environment.py file.
-
-- Fixed call to "unicode.strip" in
+
+- Fixed call to "unicode.strip" in
exceptions.text_error_template which
is not Py3k compatible. [ticket:137]
-
+
0.3.3
- Added conditional to RichTraceback
such that if no traceback is passed
@@ -314,13 +314,13 @@
the formatter just returns blank
for the "traceback" portion.
[ticket:135]
-
-- Fixed sometimes incorrect usage of
+
+- Fixed sometimes incorrect usage of
exc.__class__.__name__
- in html/text error templates when using
+ in html/text error templates when using
Python 2.4 [ticket:131]
-- Fixed broken @property decorator on
+- Fixed broken @property decorator on
template.last_modified
- Fixed error formatting when a stacktrace
@@ -332,18 +332,18 @@
where the source is stored temporarily is
now made in the same directory as that of
the .py file. This ensures that the two
- files share the same filesystem, thus
+ files share the same filesystem, thus
avoiding cross-filesystem synchronization
issues. Thanks to Charles Cazabon.
-
+
0.3.2
-- Calling a def from the top, via
- template.get_def(...).render() now checks the
- argument signature the same way as it did in
+- Calling a def from the top, via
+ template.get_def(...).render() now checks the
+ argument signature the same way as it did in
0.2.5, so that TypeError is not raised.
reopen of [ticket:116]
-
-
+
+
0.3.1
- Fixed incorrect dir name in setup.py
[ticket:129]
@@ -354,24 +354,24 @@
- Python 3 support is added ! See README.py3k
for installation and testing notes.
[ticket:119]
-
+
- Unit tests now run with nose. [ticket:127]
- Source code escaping has been simplified.
- In particular, module source files are now
- generated with the Python "magic encoding
- comment", and source code is passed through
+ In particular, module source files are now
+ generated with the Python "magic encoding
+ comment", and source code is passed through
mostly unescaped, except for that code which
is regenerated from parsed Python source.
- This fixes usage of unicode in
+ This fixes usage of unicode in
<%namespace:defname> tags. [ticket:99]
- RichTraceback(), html_error_template().render(),
text_error_template().render() now accept "error"
- and "traceback" as optional arguments, and
+ and "traceback" as optional arguments, and
these are now actually used. [ticket:122]
-
-- The exception output generated when
+
+- The exception output generated when
format_exceptions=True will now be as a Python
unicode if it occurred during render_unicode(),
or an encoded string if during render().
@@ -379,11 +379,11 @@
- A percent sign can be emitted as the first
non-whitespace character on a line by escaping
it as in "%%". [ticket:112]
-
+
- Template accepts empty control structure, i.e.
% if: %endif, etc. [ticket:94]
-- The <%page args> tag can now be used in a base
+- The <%page args> tag can now be used in a base
inheriting template - the full set of render()
arguments are passed down through the inherits
chain. Undeclared arguments go into **pageargs
@@ -396,16 +396,16 @@
breakage. [ticket:109]
- Windows paths are handled correctly if a Template
- is passed only an absolute filename (i.e. with c:
+ is passed only an absolute filename (i.e. with c:
drive etc.) and no URI - the URI is converted
to a forward-slash path and module_directory
is treated as a windows path. [ticket:128]
- TemplateLookup raises TopLevelLookupException for
a given path that is a directory, not a filename,
- instead of passing through to the template to
+ instead of passing through to the template to
generate IOError. [ticket:73]
-
+
0.2.6
- Fix mako function decorators to preserve the
@@ -429,15 +429,15 @@
- When Mako creates subdirectories in which
to store templates, it uses the more
permissive mode of 0775 instead of 0750,
- helping out with certain multi-process
+ helping out with certain multi-process
scenarios. Note that the mode is always
subject to the restrictions of the existing
umask. [ticket:101]
-
-- Fixed namespace.__getattr__() to raise
- AttributeError on attribute not found
+
+- Fixed namespace.__getattr__() to raise
+ AttributeError on attribute not found
instead of RuntimeError. [ticket:104]
-
+
- Added last_modified accessor to Template,
returns the time.time() when the module
was created. [ticket:97]
@@ -446,28 +446,28 @@
around '=' sign in defs. [ticket:102]
- Removed errant "lower()" in the lexer which
- was causing tags to compile with
+ was causing tags to compile with
case-insensitive names, thus messing up
custom <%call> names. [ticket:108]
- added "mako.__version__" attribute to
the base module. [ticket:110]
-
+
0.2.4
- Fixed compatibility with Jython 2.5b1.
0.2.3
- the <%namespacename:defname> syntax described at
- http://techspot.zzzeek.org/?p=28 has now
+ http://techspot.zzzeek.org/?p=28 has now
been added as a built in syntax, and is recommended
as a more modern syntax versus <%call expr="expression">.
- The %call tag itself will always remain,
+ The %call tag itself will always remain,
with <%namespacename:defname> presenting a more HTML-like
- alternative to calling defs, both plain and
+ alternative to calling defs, both plain and
nested. Many examples of the new syntax are in the
"Calling a def with embedded content" section
of the docs.
-
+
- added support for Jython 2.5.
- cache module now uses Beaker's CacheManager
@@ -479,42 +479,42 @@
e.g. ${local.cache.get('somekey')} or
template.cache.invalidate_body()
-- added "cache_enabled=True" flag to Template,
+- added "cache_enabled=True" flag to Template,
TemplateLookup. Setting this to False causes cache
operations to "pass through" and execute every time;
this flag should be integrated in Pylons with its own
cache_enabled configuration setting.
-
+
- the Cache object now supports invalidate_def(name),
- invalidate_body(), invalidate_closure(name),
- invalidate(key), which will remove the given key
+ invalidate_body(), invalidate_closure(name),
+ invalidate(key), which will remove the given key
from the cache, if it exists. The cache arguments
(i.e. storage type) are derived from whatever has
been already persisted for that template.
[ticket:92]
- For cache changes to work fully, Beaker 1.1 is required.
- 1.0.1 and up will work as well with the exception of
+ 1.0.1 and up will work as well with the exception of
cache expiry. Note that Beaker 1.1 is **required**
for applications which use dynamically generated keys,
- since previous versions will permanently store state in memory
- for each individual key, thus consuming all available
- memory for an arbitrarily large number of distinct
+ since previous versions will permanently store state in memory
+ for each individual key, thus consuming all available
+ memory for an arbitrarily large number of distinct
keys.
-- fixed bug whereby an <%included> template with
+- fixed bug whereby an <%included> template with
<%page> args named the same as a __builtin__ would not
honor the default value specified in <%page> [ticket:93]
-
+
- fixed the html_error_template not handling tracebacks from
normal .py files with a magic encoding comment [ticket:88]
- RichTraceback() now accepts an optional traceback object
- to be used in place of sys.exc_info()[2]. html_error_template()
+ to be used in place of sys.exc_info()[2]. html_error_template()
and text_error_template() accept an optional
render()-time argument "traceback" which is passed to the
RichTraceback object.
-
+
- added ModuleTemplate class, which allows the construction
of a Template given a Python module generated by a previous
Template. This allows Python modules alone to be used
@@ -532,16 +532,16 @@
- cached blocks now use the current context when rendering
an expired section, instead of the original context
passed in [ticket:87]
-- fixed a critical issue regarding caching, whereby
+- fixed a critical issue regarding caching, whereby
a cached block would raise an error when called within a
-cache-refresh operation that was initiated after the
+cache-refresh operation that was initiated after the
initiating template had completed rendering.
0.2.1
-- fixed bug where 'output_encoding' parameter would prevent
+- fixed bug where 'output_encoding' parameter would prevent
render_unicode() from returning a unicode object.
-- bumped magic number, which forces template recompile for
-this version (fixes incompatible compile symbols from 0.1
+- bumped magic number, which forces template recompile for
+this version (fixes incompatible compile symbols from 0.1
series).
- added a few docs for cache options, specifically those that
help with memcached.
@@ -566,18 +566,18 @@ help with memcached.
template variable. This affords a 12-30% speedup in
template render time. (idea courtesy same anonymous
guest) [ticket:76]
-
-- New Features, API changes:
-
+
+- New Features, API changes:
+
- added "attr" accessor to namespaces. Returns
attributes configured as module level attributes, i.e.
within <%! %> sections. [ticket:62] i.e.:
-
+
# somefile.html
- <%!
+ <%!
foo = 27
%>
-
+
# some other template
<%namespace name="myns" file="somefile.html"/>
${myns.attr.foo}
@@ -585,7 +585,7 @@ help with memcached.
The slight backwards incompatibility here is, you
can't have namespace defs named "attr" since the
"attr" descriptor will occlude it.
-
+
- cache_key argument can now render arguments passed
directly to the %page or %def, i.e. <%def
name="foo(x)" cached="True" cache_key="${x}"/>
@@ -595,18 +595,18 @@ help with memcached.
_push_buffer(), _pop_buffer(),
caller_stack._push_frame(), caller_stack._pop_frame().
- - added a runner script "mako-render" which renders
- standard input as a template to stdout [ticket:81]
+ - added a runner script "mako-render" which renders
+ standard input as a template to stdout [ticket:81]
[ticket:56]
-
+
- Bugfixes:
- can now use most names from __builtins__ as variable
- names without explicit declaration (i.e. 'id',
+ names without explicit declaration (i.e. 'id',
'exception', 'range', etc.) [ticket:83] [ticket:84]
-
- - can also use builtin names as local variable names
+
+ - can also use builtin names as local variable names
(i.e. dict, locals) (came from fix for [ticket:84])
-
+
- fixed bug in python generation when variable names are
used with identifiers like "else", "finally", etc.
inside them [ticket:68]
@@ -621,10 +621,10 @@ help with memcached.
- fixed issue with inline format_exceptions that was
producing blank exception pages when an inheriting
template is present [ticket:71]
-
+
- format_exceptions will apply the encoding options of
html_error_template() to the buffered output
-
+
- rewrote the "whitespace adjuster" function to work
with more elaborate combinations of quotes and
comments [ticket:75]
@@ -635,17 +635,17 @@ help with memcached.
to the %call function itself (propigates to the inner
calls too, this is a slight side effect which previously
existed anyway)
-- fixed bug where local.get_namespace() could put an
+- fixed bug where local.get_namespace() could put an
incorrect "self" in the current context
- fixed another namespace bug where the namespace functions
did not have access to the correct context containing
their 'self' and 'parent'
-
+
0.1.9
- filters.Decode filter can also accept a non-basestring
object and will call str() + unicode() on it [ticket:47]
- comments can be placed at the end of control lines,
-i.e. if foo: # a comment, [ticket:53], thanks to
+i.e. if foo: # a comment, [ticket:53], thanks to
Paul Colomiets
- fixed expressions and page tag arguments and with embedded
newlines in CRLF templates, follow up to [ticket:16], thanks
@@ -654,7 +654,7 @@ Eric Woroshow
exception reporter [ticket:51]
0.1.8
-- variable names declared in render methods by internal
+- variable names declared in render methods by internal
codegen prefixed by "__M_" to prevent name collisions
with user code
- added a Babel (http://babel.edgewall.org/) extractor entry
@@ -668,14 +668,14 @@ templates with tgplugin even if non-compatible args were sent
0.1.7
- one small fix to the unit tests to support python 2.3
-- a slight hack to how cache.py detects Beaker's memcached,
-works around unexplained import behavior observed on some
+- a slight hack to how cache.py detects Beaker's memcached,
+works around unexplained import behavior observed on some
python 2.3 installations
-0.1.6
-- caching is now supplied directly by Beaker, which has
+0.1.6
+- caching is now supplied directly by Beaker, which has
all of MyghtyUtils merged into it now. The latest Beaker
- (0.7.1) also fixes a bug related to how Mako was using the
+ (0.7.1) also fixes a bug related to how Mako was using the
cache API.
- fix to module_directory path generation when the path is "./"
[ticket:34]
@@ -700,14 +700,14 @@ python 2.3 installations
lines (#32)
- fixed codegen bug when defining <%def> within <%call> within <%call>
- leading utf-8 BOM in template files is honored according to pep-0263
-
+
0.1.5
-- AST expression generation - added in just about everything
+- AST expression generation - added in just about everything
expression-wise from the AST module [ticket:26]
- AST parsing, properly detects imports of the form "import foo.bar"
[ticket:27]
- fix to lexing of <%docs> tag nested in other tags
-- fix to context-arguments inside of <%include> tag which broke
+- fix to context-arguments inside of <%include> tag which broke
during 0.1.4 [ticket:29]
- added "n" filter, disables *all* filters normally applied to an expression
via <%page> or default_filters (but not those within the filter)
@@ -716,7 +716,7 @@ of buffered/cached/filtered %defs, after all filters defined with the %def
itself have been applied. allows the creation of default expression filters
that let the output of return-valued %defs "opt out" of that filtering
via passing special attributes or objects.
-
+
0.1.4
- got defs-within-defs to be cacheable
- fixes to code parsing/whitespace adjusting where plain python comments
@@ -742,10 +742,10 @@ via passing special attributes or objects.
0.1.3
- ***Small Syntax Change*** - the single line comment character is now
*two* hash signs, i.e. "## this is a comment". This avoids a common
-collection with CSS selectors.
+collection with CSS selectors.
- the magic "coding" comment (i.e. # coding:utf-8) will still work with
either one "#" sign or two for now; two is preferred going forward, i.e.
-## coding:<someencoding>.
+## coding:<someencoding>.
- new multiline comment form: "<%doc> a comment </%doc>"
- UNDEFINED evaluates to False
- improvement to scoping of "caller" variable when using <%call> tag
@@ -756,7 +756,7 @@ either one "#" sign or two for now; two is preferred going forward, i.e.
- added mako.ext.preprocessors package, contains one preprocessor so far:
'convert_comments', which will convert single # comments to the new ##
format
-
+
0.1.2
- fix to parsing of code/expression blocks to insure that non-ascii
characters, combined with a template that indicates a non-standard