#FreshMarker

2025-06-14

FreshMarker 1.10.0

I am pleased to announce the release of the Java 21 template engine FreshMarker 1.10.0. The version includes some new features and improvements.

unfold list directives on Partial Template Reduction

add Character type support

add type checking built-in is_character

add character built-ins is_digit, is_letter, is_whi

schegge.de/2025/06/freshmarker

#AusDemLeben #Bibliotheken #FreshMarker #Java #FreshMarker #Java #Template #TemplateEngine

2025-06-02

FreshMarker Variable Scope Revised

The blog posts on the FreshMarker template engine pursue several goals. On the one hand, the posts should of course entertain their readers. On the other hand, they also serve me to focus and document my ideas on various aspects of the implementation. One very interesting topic in

schegge.de/2025/06/freshmarker

#Bibliotheken #FreshMarker #Java #Refactoring #FreshMarker #Java #Refactoring #Template #TemplateEngine

2025-06-01

FreshMarker 1.9.0 available

I am pleased to announce the release of FreshMarker 1.9.0. The version includes some new features and improvements.

gitlab.com/schegge/freshmarker

schegge.de/2025/06/freshmarker

#Bibliotheken #FreshMarker #Java #FreshMarker #Java #Release #Template #TemplateEngine

2025-05-23

Masking Sensitive Information in FreshMarker

Working as a software developer allows me to constantly look into new subject areas and gather inspiration for my projects. Looking at a document with redacted information was the impetus for two new FreshMarker built-ins mask and mask_full.

schegge.de/2025/05/masking-sen

#Bibliotheken #FreshMarker #Java #FreshMarker #Java #Template #TemplateEngine

2025-03-24

Compress Whitespace in FreshMarker

Whitespace in a template engine like FreshMarker's is fundamentally different from the rest of the characters outside of it's language constructs. A considerable amount of whitespace and line breaks are only used to ensure that the structure of the template remains comprehensible to the author.

schegge.de/2025/03/compress-wh

#Bibliotheken #FreshMarker #Java #FreeMarker #FreshMarker #Java #Template #TemplateEngine

2025-03-14

FreshMarker – compile it! (4)

A further step on the way to static templates is the automation of their creation. A Maven plugin can be used to convert the FreshMarker template sources into Java source code. Although there are now more modern build tools, Maven is still used in many projects. The first task of the Maven plugin sho

schegge.de/2025/03/freshmarker

#BestPractices #Bibliotheken #FreshMarker #Java #FreshMarker #Java #Maven #Template #TemplateEngine

2025-02-14

FreshMarker – compile it! (3)

In the second article on the FreshMarker Compiler, we looked at the implementation of a pretty printer for Template instances. This implementation serves as the basis for the FreshMarker Compiler, which generates Java code from a Template instance. Before we tackle the Compiler, we need to

schegge.de/2025/02/freshmarker

#Bibliotheken #DesignPattern #FreshMarker #Java #CongoCC #FreshMarker #Java #Template #TemplateEngine #Visitor

2025-02-14

FreshMarker – compile it! (3)

In the second article on the FreshMarker Compiler, we looked at the implementation of a pretty printer for Template instances. This implementation serves as the basis for the FreshMarker Compiler, which generates Java code from a Template instance. Before we tackle the Compiler, we need to

schegge.de/2025/02/freshmarker

#Bibliotheken #DesignPattern #FreshMarker #Java #CongoCC #FreshMarker #Java #Template #TemplateEngine #Visitor

2025-02-10

FreshMarker – compile it! (2)

In the first article on static FreshMarker templates, some basic thoughts were put on paper. This article is intended to set a first milestone on the way to supporting much faster templates than before. As a nice side effect of this initial work, a pretty printer for Fr

schegge.de/2025/02/freshmarker

#Bibliotheken #DesignPattern #FreshMarker #Java #Refactoring #CongoCC #FreshMarker #Java #Maven #Template #TemplateEngine #Visitor

2025-02-05

FreshMarker – compile it!

The template engine FreshMarker occupies a middle position in terms of processing speed for the benchmark displayed on the FreshMarker project page. In line with the concept of a dynamic, expandable engine, a noticeable acceleration of processing is not to be expected. The question therefore arises as to which conc

schegge.de/2025/02/freshmarker

#Bibliotheken #FreshMarker #Java #Refactoring #FreshMarker #Java #Template #TemplateEngine

2025-01-27

FreshMarker Features

The follow-up article on FreshMarker Features took a little longer because there was simply no feature that wanted to manifest itself in a plugin. In the FreshMarker Includes article, the features for activating and deactivating functionalities within FreshMarker were presented. The outlook was given that FreshMarker plugins should also

schegge.de/2025/01/freshmarker

#Bibliotheken #FreshMarker #Java #FreshMarker #Java #Template #TemplateEngine

2025-01-22

FreshMarker Switch On Directive

Nothing is so good that it can't be reworked. The switch directive in FreshMarker differed from the FreeMarker variant quite early on. FreshMarker's switch directive does not have a fall-through mechanism. This mechanism is a legacy of the C language family, whose switch statements with break also found

schegge.de/2025/01/freshmarker

#Bibliotheken #FreshMarker #Java #CongoCC #FreeMarker #FreshMarker #Java #TemplateEngine

2025-01-20

FreshMarker Includes (2)

In the first article on the Include Directive, I showed how this directive can be implemented in FreshMarker. Although additional content can now be inserted into the template, some additional details are still missing. An important detail is the avoidance of recursive includes. These usually never end well. The following template

schegge.de/2025/01/freshmarker

#Bibliotheken #FreshMarker #Java #FreshMarker #Java #Template #TemplateEngine

2025-01-16

FreshMarker Includes

“By believing passionately in something that still does not exist, we create it. The nonexistent is whatever we have not sufficiently desired.”
Franz Kafka

Some time ago I had the pleasure of giving a talk about FreshMarker at the Java User Group Bielefeld. At this event, the question arose as to why FreshMarker does not

schegge.de/2025/01/freshmarker

#Bibliotheken #FreshMarker #Java #FreeMarker #FreshMarker #Java #Template #TemplateEngine

2024-12-26

Lorem ipsum dolor sit amet

There was no mistake in the title of this post. Anyone who has looked at the FreshMarker Random plugin recently will probably have discovered the two new built-in sentence and paragraph plugins. These two support the library with the generation of the famous Lorem Ipsum pseudo-texts. Without de

schegge.de/2024/12/lorem-ipsum

#Algorithmen #Bibliotheken #FreshMarker #Java #Test #FreshMarker #Java #SpringBoot #Template #TemplateEngine

2024-12-06

FreshMarker – Groundhog Day

The moment is a wonderful thing, but not for software developers, because it keeps on moving. How can you write a test if the value changes with every test run? Functionality has always been an abomination that concealed some form of now. In FreshMarker, for example, this little monster can be found in

schegge.de/2024/12/freshmarker

#Bibliotheken #FreshMarker #Java #Test #FreshMarker #Java #Junit #JUnit5 #Template #TemplateEngine

2024-11-25

FreshMarker Random Plug-In

The topic of randomness has visited this blog several times. There was a post about the Voses algorithm and random values in JUnit 5 Test. So why not provide random values in FreshMarker. Since random values are rarely needed in templates, this extension is not realized in FreshMarker itself, but in a separat

schegge.de/2024/11/freshmarker

#Bibliotheken #FreshMarker #Java #FreshMarker #Java #Random #Template #TemplateEngine #Zufall

2024-11-18

FreshMarker I18N

“Those who know nothing of foreign languages know nothing of their own.”
Johann Wolfgang von Goethe

Internationalization, or I18N for short, is a skill that every modern software must master. Long gone are the days when software could only offer an English only interface.

Localizable values such as dates and numbers can always be output i

schegge.de/2024/11/freshmarker

#Bibliotheken #FreshMarker #Java #FreshMarker #Java #Template #TemplateEngine

2023-05-20

Trivial Pursuit – API MarkDown (2)

Fasst drei Jahre nach dem ersten Beitrag zum eigenen API MarktDown ergibt sich ein zweiter Beitrag zum Thema. Bei der Durchsicht der eigenen Projekte fiel auf, dass in dem Projekt rest-markdown-plugin noch immer FreeMarker als Template-Engine verwendet

schegge.de/2023/05/trivial-pur

#Bibliotheken #Java #AsciiDoc #Asciidoctor #CongoCC #FreeMarker #FreshMarker #Java #JavaCC21 #MarkDown #OpenApi #Template #TemplateEngine

2023-05-07

Mehr Zeit mit FreshMarker

Einer der Gründe für die Entwicklung der FreshMarker Bibliothek, war die fehlende Unterstützung der Java Time API in FreeMarker. Daher existierte schon in der ersten Implementierung neben der Unterstützung für java.util.Date, java.sql.Date und java.sql.Time auch eine Unterstützung f

schegge.de/2023/05/mehr-zeit-m

#BestPractices #Bibliotheken #Java #Format #FreeMarker #FreshMarker #Java #LocalDate #LocalTime #Template #Template-Engine

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst