jinja2cpp / jinja2cpp/Jinja2Cpp

Fix "str|format" string formatting to match spec (%s formatting, not {} formatting), also support "str.format" syntax

Open
#267 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
600
Forks
114
PR merge metrics
No merged PRs in 30d

Description

The jinja2 spec alludes to two flavors of format -- `str.format` and `str|format` -- that seemingly have / support different string formatting syntaxes.
https://jinja.palletsprojects.com/en/2.10.x/templates/

The `str.format` syntax appears to support standard {} string formatting (like fmt::format), whereas `str|format` appears to support % string formatting (like printf). Here's a quick mapping / handy guide as I understand it.
* jinja2 `"hello %"|format("world")` -> Python `"hello %" % "world"
* jinja2 `"hello {}".format("world")` -> Python `"hello {}".format("world")`

Here's a template with corresponding Python jinja2 output.
```
# template; note that the "2 {}" case fails to compile if arg is passed
{{ "1 %s"|format(0) }}
{{ "2 {}"|format() }}
{{ "3 %s".format(0) }}
{{ "4 {}".format(0) }}

# Python jinja2 output
1 0
2 {}
3 %s
4 0
```

And a similar template with its corresponding jinja2cpp output.
```
# template; note that 3/4 are missing because `.format` syntax not currently supported in jinja2cpp
{{ "3 %s"|format(0) }}
{{ "4 {}"|format(0) }}

# jinja2cpp output
3 %s
4 0
```

From these examples, we can see a couple key differences between jinja2cpp and Python jinja2.
1. `str|format` syntax in jinja2cpp behaves like `str.format` syntax in Python jinja2. That is to say that jinja2cpp uses {} string formatting for `str|format` when it should instead use %s string formatting (per spec / Python parity).
2. `str.format` syntax is not supported in jinja2cpp. This should have the {} string formatting behavior, so existing `str|format` implementation in jinja2cpp could perhaps largely be reused / repurposed to support this.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.