]> git.ipfire.org Git - thirdparty/jinja.git/log
thirdparty/jinja.git
5 years agoParse isolated set blocks
Kevin [Sun, 10 May 2020 17:59:23 +0000 (13:59 -0400)] 
Parse isolated set blocks

This adds support for set blocks where a key-value pair is being
sent in so there is no matching pair of statement.

5 years agoParse arguments to calls
Kevin [Sun, 10 May 2020 16:54:08 +0000 (12:54 -0400)] 
Parse arguments to calls

This can be combined with the logic for parsing arguments to filters
then they both generate the same AST.

5 years agoInitial support for if blocks
Kevin [Sun, 10 May 2020 16:42:22 +0000 (12:42 -0400)] 
Initial support for if blocks

This currently only supports tests which are a simple condition and
do not span multiple sides of a comparison.

5 years agoAdd parsing of boolean literals
Kevin [Sun, 10 May 2020 16:41:31 +0000 (12:41 -0400)] 
Add parsing of boolean literals

This should finish off all of the parsing of currently supported
literals.

5 years agoSupport parsing `{% block %}` blocks
Kevin [Sun, 10 May 2020 16:27:20 +0000 (12:27 -0400)] 
Support parsing `{% block %}` blocks

This does not currently parse out the scoped parameter but that will
come soon enough.

5 years agoProperly support recursive in for loops
Kevin [Sun, 10 May 2020 16:16:16 +0000 (12:16 -0400)] 
Properly support recursive in for loops

This adds an example to the test file that is being used to verify
that the generated ASTs are comparable.

5 years agoAdd initial parsing of for blocks
Kevin [Sun, 10 May 2020 16:04:38 +0000 (12:04 -0400)] 
Add initial parsing of for blocks

This will correctly parse out most of the starting block as well as
the contents, but it does not yet handle the parsing of the `{% else %}`
block that can be contained within the contents of the block.

5 years agoParse variable tuples
Kevin [Sun, 10 May 2020 16:03:32 +0000 (12:03 -0400)] 
Parse variable tuples

Right now these are custom parsed since they are not the same as
tuple literals and generally serve a different purpose. They are
tuples which contain variable identifiers and are generally used
for assignment.

5 years agoAdd initial support for call accessors
Kevin [Sun, 10 May 2020 16:02:28 +0000 (12:02 -0400)] 
Add initial support for call accessors

This only currently supports call accessors that do not take any
parameters. For now it is hard-coded to have no parameters.

5 years agoAdd list and tuple literal parsing
Kevin [Sun, 10 May 2020 16:01:52 +0000 (12:01 -0400)] 
Add list and tuple literal parsing

5 years agoEnable line parsing in Jinja environment
Kevin [Sun, 10 May 2020 15:50:29 +0000 (11:50 -0400)] 
Enable line parsing in Jinja environment

Right now the grammar is being tested with line parsing enabled so
this makes them match

5 years agoParse raw blocks and comments
Kevin [Sun, 10 May 2020 15:28:26 +0000 (11:28 -0400)] 
Parse raw blocks and comments

Comments get ignored by the parser and raw blocks just get output
directly as a string into the AST.

5 years agoAdd parsing for numeric literals
Kevin [Sun, 10 May 2020 15:19:12 +0000 (11:19 -0400)] 
Add parsing for numeric literals

5 years agoAdd filter parsing for variables
Kevin [Sun, 10 May 2020 15:13:15 +0000 (11:13 -0400)] 
Add filter parsing for variables

Filters and their arguments are now properly parsed into the right
Jinja nodes. Dynamic arguments (`*args`) and dynamic keyword arguments
(`**kwargs`) are not currently parsed as they are not supported by
the grammar.

5 years agoDot accessors can only be identifiers
Kevin [Sun, 10 May 2020 14:48:16 +0000 (10:48 -0400)] 
Dot accessors can only be identifiers

This fixes a bug where the grammar allowed dot accessors to be any
variable type. This results in the filters that were meant for the
variable that was being accessed to be captured by the accessor
itself, which generated an unexpected and invalid AST.

5 years agoOutput nodes are always lists
Kevin [Sun, 10 May 2020 14:43:50 +0000 (10:43 -0400)] 
Output nodes are always lists

Right now we don't optimize Output nodes so that ones next to each
other are combined, but they should all contain a list of a single
node in preparation for eventually doing that.

5 years agoParse the contents of the body of with block
Kevin [Sun, 10 May 2020 14:43:00 +0000 (10:43 -0400)] 
Parse the contents of the body of with block

This logic will inevitable be generalized out in the future for
other full blocks, but for now it properly handled parsing the
contents of the block and converting it to the Jinja AST.

5 years agoProperly parse with targets
Kevin [Sun, 10 May 2020 14:42:21 +0000 (10:42 -0400)] 
Properly parse with targets

The targets of with expressions (the variables to load) should be
properly parsed as a variable using the same load logic which is
used in other areas of the parser.

5 years agoStart working on new AST parser
Kevin [Sun, 10 May 2020 14:29:48 +0000 (10:29 -0400)] 
Start working on new AST parser

This parser will take the Tatsu-generated AST and generate a compatible
Jinja AST from it. This should allow us to refine the grammar to
generate a better AST and also verify that it is producing comparable
Jinja ASTs that can be used by the current compiler.

5 years agoSupport filters on all variables
Kevin [Sun, 10 May 2020 02:23:32 +0000 (22:23 -0400)] 
Support filters on all variables

This adds support to filters on all variables instead of to just
variables which are being printed within templates. This now allows
us to pass in variables that are using filters as parameters within
a block, so they can be used for setting new variables or to perform
transformations on the fly.

5 years agoRename grammar to grammar.ebnf
Kevin [Sun, 10 May 2020 01:54:14 +0000 (21:54 -0400)] 
Rename grammar to grammar.ebnf

This will enable syntax higlighting on GitHub and also makes it more
clear what format is being used within the file.

5 years agoCase insensistive exponent parsing
Kevin [Sun, 10 May 2020 01:49:45 +0000 (21:49 -0400)] 
Case insensistive exponent parsing

5 years agoVariable filters should not capture whitespace
Kevin Brown [Sat, 9 May 2020 03:53:44 +0000 (23:53 -0400)] 
Variable filters should not capture whitespace

This should have no functional difference on the behaviour of the
parser but it does make filters consistent with other areas where
it expects to start with the first character instead of starting
with whitespace.

This also changes the test script to time the individual steps so
we can confirm that the grammar compilation is considerably slower
than the parsing of the template using the grammar.

5 years agoEnable leading whitespace stripping for blocks
Kevin Brown [Sat, 9 May 2020 03:17:40 +0000 (23:17 -0400)] 
Enable leading whitespace stripping for blocks

5 years agoEnable whitespace control within closing blocks
Kevin Brown [Fri, 8 May 2020 23:55:24 +0000 (19:55 -0400)] 
Enable whitespace control within closing blocks

This enables the ability to force whitespace to be stripped following
the end of a block statement by adding a `-` before the closing
tag. This is supported both for stripped the space at the beginning
of a block as well as stripping the space that follows a block.

5 years agoName contents of raw blocks
Kevin Brown [Fri, 8 May 2020 23:36:10 +0000 (19:36 -0400)] 
Name contents of raw blocks

This will also strip the open/close blocks from the AST which cleans
up the final part of it.

5 years agoName parts of a block
Kevin Brown [Fri, 8 May 2020 23:34:08 +0000 (19:34 -0400)] 
Name parts of a block

5 years agoRemove whitespace parsing from inside block
Kevin Brown [Fri, 8 May 2020 23:25:50 +0000 (19:25 -0400)] 
Remove whitespace parsing from inside block

This fixes an issue where trailing whitespace within blocks was being
processed as an expression instead of being collected into the block
definition. Now the whitespace is consisitently stored within the
block expression which should make whitespace handling easier to
implement.

5 years agoAdd support for optional ":" at end of line statement
Kevin Brown [Fri, 8 May 2020 23:18:38 +0000 (19:18 -0400)] 
Add support for optional ":" at end of line statement

This does not fully work for the example file because the grammar
for a test expression can span multiple lines which causes the HTML
in the line following the block expression to be detected as a test
expression instead of being detected as content.

5 years agoFix parameters eating whitespace
Kevin Brown [Fri, 8 May 2020 22:57:33 +0000 (18:57 -0400)] 
Fix parameters eating whitespace

This was causing issues for anything that depends on significant
whitespace to follow a parameter, since it wasn't being made
available within the grammar.

5 years agoSupport independent line statement
Kevin Brown [Fri, 8 May 2020 22:35:09 +0000 (18:35 -0400)] 
Support independent line statement

This allows you to have a line statement that is not paired with an
ending one.

5 years agoStrip spaces before line statements and prefixes
Kevin Brown [Fri, 8 May 2020 22:27:07 +0000 (18:27 -0400)] 
Strip spaces before line statements and prefixes

5 years agoAdd suport for line comments
Kevin Brown [Fri, 8 May 2020 22:21:40 +0000 (18:21 -0400)] 
Add suport for line comments

This also switches comments to produce the same AST whether it is
an inline comment or a line comment.

5 years agoConsistent formatting of OR within grammar
Kevin Brown [Fri, 8 May 2020 22:16:19 +0000 (18:16 -0400)] 
Consistent formatting of OR within grammar

5 years agoAdd support for line statements
Kevin Brown [Fri, 8 May 2020 22:09:09 +0000 (18:09 -0400)] 
Add support for line statements

These are block expresions but the start/end tags take up an entire
line and are marked by a leading symbol.

5 years agoEnsure macro definitions are properly parsed
Kevin Brown [Fri, 8 May 2020 21:25:57 +0000 (17:25 -0400)] 
Ensure macro definitions are properly parsed

5 years agoTest specific imports are supported
Kevin Brown [Fri, 8 May 2020 21:24:03 +0000 (17:24 -0400)] 
Test specific imports are supported

5 years agoConverted more of parse tree to dictionary
Kevin Brown [Fri, 8 May 2020 21:19:04 +0000 (17:19 -0400)] 
Converted more of parse tree to dictionary

This should make it easier to detect what type of literal has been
parsed (we don't differentiate between single and double quoted
strings) as well as determining the specific accessors that are
called on a given variable.

Tuple and list literals have also been normalized to hold their
values in a key called `value` which is the same as other literals.
Implicit identifier tuples have not been switched yet because those
are not currently parses like tuple literals.

5 years agoSupport implicit tuples in block parameters
Kevin Brown [Fri, 8 May 2020 20:56:26 +0000 (16:56 -0400)] 
Support implicit tuples in block parameters

This fixes an issue where implicit tuples were not parsed correctly
when they were used as a key in a block parameter. Now for loops
and set statements with implicit tuples work properly. This only
supports implicit tuples when all values are identifiers, since
these are generally used for assignment and you cannot assign a
new value to a literal.

5 years agoAdd support for tests
Kevin Brown [Fri, 8 May 2020 17:51:14 +0000 (13:51 -0400)] 
Add support for tests

Right now these are very basic and don't appear to form the correct
parse tree for logical comparisons which use tests as well. But it
parses at lease somewaht correctly, so there is something to work
with here.

5 years agoSupport assignment expressions in generic blocks
Kevin Brown [Fri, 8 May 2020 14:01:10 +0000 (10:01 -0400)] 
Support assignment expressions in generic blocks

Because of the way assignment expressions handle implicit tuples,
it's now possible to support the complex for loops within the
standard generic block grammar.

5 years agoAdded grammar for `for` loops
Kevin Brown [Fri, 8 May 2020 13:54:35 +0000 (09:54 -0400)] 
Added grammar for `for` loops

Since this needs to support assignment targets, it is difficult to
properly support this within a generic block syntax because of the
ability to create implicit tuples.

5 years agoAdded tuple literal support
Kevin Brown [Fri, 8 May 2020 12:49:24 +0000 (08:49 -0400)] 
Added tuple literal support

This maintains the expectation that tuple literals will always end
with a comma if there is a single item.

The example is the combined one from the Jinja docs but it does not
include the comma for the tuple assignment since the grammar does
not currently support that.

5 years agoSupport list literals
Kevin Brown [Fri, 8 May 2020 12:42:22 +0000 (08:42 -0400)] 
Support list literals

5 years agoSupport boolean literals
Kevin Brown [Fri, 8 May 2020 12:29:24 +0000 (08:29 -0400)] 
Support boolean literals

This will transparently convert them into an actual boolean which
should skip any variable-like parsing that would otherwise be done.

5 years agoAdd integer and float literals
Kevin Brown [Fri, 8 May 2020 12:15:31 +0000 (08:15 -0400)] 
Add integer and float literals

These align with the one already supported by Jinja.

5 years agoSwitch blocks and variables to dictionaries
Kevin Brown [Fri, 8 May 2020 12:14:38 +0000 (08:14 -0400)] 
Switch blocks and variables to dictionaries

This should make it easier to differentiate them based on their
type but also allow for the different pieces to have proper names.

5 years agoSwitch to named dict for filters
Kevin Brown [Fri, 8 May 2020 11:22:56 +0000 (07:22 -0400)] 
Switch to named dict for filters

This will make it easier to determine what filters need to be
called like a function with parameters and which ones assume
default parameters.

5 years agoSupport key-value block parameters
Kevin Brown [Fri, 8 May 2020 11:13:52 +0000 (07:13 -0400)] 
Support key-value block parameters

Block parameters should support all of the things that a function
call parameter would normally support. This includes key-value
paramters and in our test we include the transaltion example from
the documentation.

5 years agoSupport named parameters to calls
Kevin Brown [Fri, 8 May 2020 11:08:04 +0000 (07:08 -0400)] 
Support named parameters to calls

This also switches the parameters in calls to be returned as a
dictionary which should make it easier to differentiate between a
value-only parameter and a key-value parameter.

5 years agoVariable calls support multiple parameters
Kevin Brown [Fri, 8 May 2020 10:55:57 +0000 (06:55 -0400)] 
Variable calls support multiple parameters

This also updates filter parameters to be handled the same as calling
a variable.

5 years agoFilter parameters are variable identifiers
Kevin Brown [Fri, 8 May 2020 10:50:01 +0000 (06:50 -0400)] 
Filter parameters are variable identifiers

The filter parameters list is actually the same as a variable
accessor for a call but that does not currently support multiple
parameters.

5 years agoAdd function calls for variables
Kevin Brown [Fri, 8 May 2020 10:44:18 +0000 (06:44 -0400)] 
Add function calls for variables

This allows for functions to be called, currently with a single
variable optionally passed.

This also adds a check to make sure that variable literals are
supported.

5 years agoParse block parameter values like variables
Kevin Brown [Fri, 8 May 2020 10:31:56 +0000 (06:31 -0400)] 
Parse block parameter values like variables

This allows for complex values to be used in parameters while also
supporting standard literals.

5 years agoSupport dot accessors on variables
Kevin Brown [Fri, 8 May 2020 10:26:02 +0000 (06:26 -0400)] 
Support dot accessors on variables

This adds support for dot accessors on variables in such a way that
it is flexible enough to match the handling provided by the existing
template engine.

5 years agoStart definining variable identifiers
Kevin Brown [Fri, 8 May 2020 10:21:58 +0000 (06:21 -0400)] 
Start definining variable identifiers

Variables are standard identifiers or literals that can be
augmented by accessors (either dictionary or dot style). This
finally defines what a string is.

5 years agoStrip parens from filter params list
Kevin Brown [Fri, 8 May 2020 09:58:24 +0000 (05:58 -0400)] 
Strip parens from filter params list

This isn't necessary, we will always know that the second item within
the filter list is the set of filter parameters.

This also ensures that any time the filter separator is detected,
we force parsing the next token as a filter parameter.

5 years agoUse variable names in content definition
Kevin Brown [Fri, 8 May 2020 09:43:51 +0000 (05:43 -0400)] 
Use variable names in content definition

This should make it easier later to override these variables without
needing to make additional changes.

5 years agoFix content overtaking expressions
Kevin Brown [Fri, 8 May 2020 09:33:28 +0000 (05:33 -0400)] 
Fix content overtaking expressions

This fixes a issue where content would try to overtake everything
following it, even if there was a better expression to match after
the content. This was fixed by telling content to match everything
but the start of different expressions, which appears to solve a
bunch of issues.

5 years agoInitial commit
Kevin Brown [Fri, 8 May 2020 09:12:26 +0000 (05:12 -0400)] 
Initial commit

5 years agoMerge pull request #1196 from pallets/remove-vim
David Lord [Sun, 19 Apr 2020 16:01:07 +0000 (09:01 -0700)] 
Merge pull request #1196 from pallets/remove-vim

remove vim syntax file

5 years agoremove vim syntax file 1196/head
David Lord [Sun, 19 Apr 2020 15:55:59 +0000 (08:55 -0700)] 
remove vim syntax file

remove unmaintained information from integration doc

5 years agoMerge branch '2.11.x'
David Lord [Mon, 13 Apr 2020 16:26:39 +0000 (09:26 -0700)] 
Merge branch '2.11.x'

5 years agofix changelog header
David Lord [Mon, 13 Apr 2020 16:20:59 +0000 (09:20 -0700)] 
fix changelog header

5 years agorelease version 2.11.2 2.11.2
David Lord [Mon, 13 Apr 2020 16:12:19 +0000 (09:12 -0700)] 
release version 2.11.2

5 years agoMerge pull request #1190 from pallets/native-eval
David Lord [Mon, 13 Apr 2020 15:56:37 +0000 (08:56 -0700)] 
Merge pull request #1190 from pallets/native-eval

native only evals at end of render

5 years agonative only evals at end of render 1190/head
David Lord [Mon, 13 Apr 2020 15:25:49 +0000 (08:25 -0700)] 
native only evals at end of render

Co-authored-by: Martin Krizek <mkrizek@redhat.com>
5 years agoMerge pull request #1183 from exponea/1138-fix-unintended-lstrip-behavior-change
David Lord [Mon, 13 Apr 2020 14:09:31 +0000 (07:09 -0700)] 
Merge pull request #1183 from exponea/1138-fix-unintended-lstrip-behavior-change

Fix unintended lstrip_blocks behavior

5 years agoAdd tests for lstrip whitespace behavior fix 1183/head
Peter Dolak [Fri, 3 Apr 2020 09:29:28 +0000 (11:29 +0200)] 
Add tests for lstrip whitespace behavior fix

Also did peformance tests for the previous fix and saw no measurable
impact.

5 years agoFix unintended lstrip_blocks behavior. Fixes #1138
Peter Dolak [Thu, 2 Apr 2020 14:55:57 +0000 (16:55 +0200)] 
Fix unintended lstrip_blocks behavior. Fixes #1138

Introduced in #858. Tests will follow, also results of performance
testing.

5 years agoDon't use setlocal in syntax file (#1164)
Ken Crowell [Sun, 12 Apr 2020 16:46:08 +0000 (13:46 -0300)] 
Don't use setlocal in syntax file (#1164)

I'm not 100% sure that one should not use `setlocal` in a syntax file,
but this breaks other filetypes that may include this syntax file, like
the vim-markdown plugin.  The `comments` and `commentstring` get set for
that markdown buffer with the jinja settings.

See
https://github.com/dhruvasagar/vim-table-mode/issues/162#issuecomment-595317626
for an example of side effects.

5 years agoUpdate oudated CutomLoader code example (#1185)
Xinbin Huang [Wed, 8 Apr 2020 20:15:30 +0000 (13:15 -0700)] 
Update oudated CutomLoader code example (#1185)

py3 for CustomLoader example

5 years agoMerge branch '2.11.x'
David Lord [Wed, 8 Apr 2020 15:53:28 +0000 (08:53 -0700)] 
Merge branch '2.11.x'

5 years agoMerge tag '2.11.1' into 2.11.x
David Lord [Wed, 8 Apr 2020 15:52:03 +0000 (08:52 -0700)] 
Merge tag '2.11.1' into 2.11.x

5 years agoMerge pull request #1169 from asottile/pep_451
David Lord [Mon, 30 Mar 2020 20:03:04 +0000 (13:03 -0700)] 
Merge pull request #1169 from asottile/pep_451

Use importlib machinery to fix PEP 451 import hooks

5 years agoadd changelog and cleanup for pep 451 support 1169/head
David Lord [Mon, 30 Mar 2020 19:55:40 +0000 (12:55 -0700)] 
add changelog and cleanup for pep 451 support

5 years agoUse importlib machinery to fix PEP 451 import hooks
Anthony Sottile [Tue, 10 Mar 2020 17:02:47 +0000 (10:02 -0700)] 
Use importlib machinery to fix PEP 451 import hooks

5 years agoMerge branch '2.11.x'
David Lord [Mon, 30 Mar 2020 18:40:59 +0000 (11:40 -0700)] 
Merge branch '2.11.x'

5 years agoMerge pull request #1181 from bartfeenstra/async-namespace
David Lord [Mon, 30 Mar 2020 18:34:13 +0000 (11:34 -0700)] 
Merge pull request #1181 from bartfeenstra/async-namespace

Allow namespaces to be used in asynchronously rendered templates.

5 years agonamespace object works in async templates 1181/head
Bart Feenstra [Sat, 28 Mar 2020 16:18:58 +0000 (16:18 +0000)] 
namespace object works in async templates

5 years agoMerge pull request #1178 from avli/fix-lexer-lineno
David Lord [Mon, 30 Mar 2020 18:23:11 +0000 (11:23 -0700)] 
Merge pull request #1178 from avli/fix-lexer-lineno

Fix tokens line number calculation when whitespace stripping is used

5 years agoFix tokens line number calculation when whitespace stripping is used 1178/head
Andrey Lisin [Fri, 27 Mar 2020 10:20:01 +0000 (13:20 +0300)] 
Fix tokens line number calculation when whitespace stripping is used

5 years agoMerge branch '2.11.x'
David Lord [Mon, 30 Mar 2020 17:54:57 +0000 (10:54 -0700)] 
Merge branch '2.11.x'

5 years agoMerge pull request #1182 from pallets/revert-package-loader
David Lord [Mon, 30 Mar 2020 17:34:13 +0000 (10:34 -0700)] 
Merge pull request #1182 from pallets/revert-package-loader

Revert dropping pkg_resources from PackageLoader for 2.11

5 years agochangelog for reverting PackageLoader changes 1182/head
David Lord [Mon, 30 Mar 2020 17:22:51 +0000 (10:22 -0700)] 
changelog for reverting PackageLoader changes

5 years agoRevert "PackageLoader doesn't depend on setuptools"
David Lord [Mon, 30 Mar 2020 17:11:22 +0000 (10:11 -0700)] 
Revert "PackageLoader doesn't depend on setuptools"

This reverts commit 4b6077a8c0a0f56bb8dbac37f8f9027130b4091c.

5 years agoRevert "PackageLoader understands namespace packages"
David Lord [Mon, 30 Mar 2020 16:55:51 +0000 (09:55 -0700)] 
Revert "PackageLoader understands namespace packages"

This reverts commit d2e0e78afe7c6ae864a20c2cc29e80936cff47af.

5 years agoMerge pull request #1179 from pallets/undefined-recursion
David Lord [Fri, 27 Mar 2020 17:05:12 +0000 (10:05 -0700)] 
Merge pull request #1179 from pallets/undefined-recursion

AttributeError in undefined message doesn't cause RuntimeError

5 years agoAttributeError in undefined message doesn't cause RuntimeError 1179/head
David Lord [Fri, 27 Mar 2020 16:51:53 +0000 (09:51 -0700)] 
AttributeError in undefined message doesn't cause RuntimeError

5 years agoMerge pull request #1174 from septatrix/patch-1
Joshua Bronson [Sun, 22 Mar 2020 17:28:57 +0000 (13:28 -0400)] 
Merge pull request #1174 from septatrix/patch-1

Fix html tag

5 years agoFix html tag 1174/head
Nils K [Sun, 22 Mar 2020 16:58:20 +0000 (17:58 +0100)] 
Fix html tag

5 years agoMerge pull request #1163 from pallets/traceback-32-bit
David Lord [Sat, 29 Feb 2020 03:08:10 +0000 (19:08 -0800)] 
Merge pull request #1163 from pallets/traceback-32-bit

better PyObject_HEAD size calculation

5 years agobetter PyObject_HEAD size calculation 1163/head
David Lord [Sat, 29 Feb 2020 02:50:00 +0000 (18:50 -0800)] 
better PyObject_HEAD size calculation

fixes infinite loop on Python 3.6 32-bit

5 years agoMerge pull request #1161 from ldealmei/patch-1
David Lord [Fri, 28 Feb 2020 16:02:50 +0000 (08:02 -0800)] 
Merge pull request #1161 from ldealmei/patch-1

Add link to template designer documentation

5 years agoAdd link to template designer documentation 1161/head
ldealmei [Fri, 28 Feb 2020 15:29:26 +0000 (16:29 +0100)] 
Add link to template designer documentation

For those who were actually looking for the template design documentation putting a link directly to it might prevent them to have to google for it. When on the API page, there is no direct way to find the template design documentation. Hope this can help others.

5 years agoMerge branch '2.11.x'
David Lord [Thu, 27 Feb 2020 19:16:01 +0000 (11:16 -0800)] 
Merge branch '2.11.x'

5 years agoMerge pull request #1160 from sivel/wordcount-soft-str
David Lord [Thu, 27 Feb 2020 19:10:31 +0000 (11:10 -0800)] 
Merge pull request #1160 from sivel/wordcount-soft-str

Use soft_str in do_wordcount, to trigger undefined

5 years agouse soft_str in do_wordcount, to trigger undefined 1160/head
Matt Martz [Thu, 27 Feb 2020 18:46:58 +0000 (12:46 -0600)] 
use soft_str in do_wordcount, to trigger undefined

5 years agoMerge pull request #1149 from davidbrochart/fix_doc
David Lord [Sat, 8 Feb 2020 19:12:55 +0000 (11:12 -0800)] 
Merge pull request #1149 from davidbrochart/fix_doc

5 years agorewrite async discussion 1149/head
David Lord [Sat, 8 Feb 2020 19:07:18 +0000 (11:07 -0800)] 
rewrite async discussion