OK, it has grown to be not that minimalistic after all. Nowadays I see
people suffering with generating JSON, in particular string literals that
can be null. With 2.3.31 (the old version) it's like this:

{
    ...
    "fullName": <#if
user.fullName??>"${user.fullName?json_string}"<#else>null</#if>
    ...
}

So I wanted to offer some new built-in for that, and it went further than I
anticipated. Because, I realized that I can say that ?c generates literals
in a target computer language, and therefore someString?c could generate a
string literal in that computer language (a quoted, escaped thing).
Currently ?c doesn't support strings, so that's backward compatible. So I
generalized ?c a bit, which caused further changes at many places. Like I
had to add the c_format setting to specify the target computer language.

Then I also added a new built-in, ?cn, for "C Nullable", which will output
a null literal if its left side operand is a null/missing value (?c just
dies with missing value error). I know, yet another cryptic shorthand, but
in the use cases where these are needed, you often use them a lot. Also ?c
is already like that. So now the earlier example is reduced to this:

{
    ...
    "fullName": ${user.fullName?cn}
    ...
}


Of course ?cn will work with numerical and boolean values as well, as it's
the same as ?c, except when it comes to handling null/missing values. At
places where you don't expect null/missing values, you should use ?c
instead of ?cn.

Updated change log/documentation is here:
https://freemarker.apache.org/builds/2.3.32-preview/docs/versions_2_3_32.html

Feedback is welcome!

I might add a bit more, but not much more, as I should wrap up 2.3.32, and
then go on with java.time support.


On Fri, Dec 16, 2022 at 1:07 PM Daniel Dekany <ddek...@apache.org> wrote:

> Hi,
>
> I'm adding some smaller changes to the 2.3-gae branch, so we can do a
> release relatively quickly, without waiting for the ever dragging java.time
> support. I hope it will be ready for voting in a few days, which means that
> it can be released this year.
>
> Here's the change log so far... but it will grow. The changes related to
> ?c are already quite substantial, so take a look if you can:
>
> https://freemarker.apache.org/builds/2.3.32-preview/docs/versions_2_3_32.html
>
> After the voting (in a few days if all goes well), I will continue with
> java.time support, which will be part of the next release after this coming
> 2.3.32 release.
>
>

Reply via email to