Nested Directives with Parameters

When replicating the concepts of another template engine, there are always moments when you put off working on a particular concept. This rarely has anything to do with the complexity of the concept itself, but often stems from a personal aversion. For FreshMarker, this has meant tha

https://schegge.de/2026/05/nested-directives-with-parameters/

#AusDemLeben #Bibliotheken #FreshMarker #Java #CongoCC #FreeMarker #FreshMarker #Template #TemplateEngine

</Agile> Nested Directives with Parameters

When replicating the concepts of another template engine, there are always moments when you put off working on a particular concept. This rarely has anything to do with the complexity of the concep…

</Agile>

Vier Jahre FreshMarker

Vor vier Jahren begann das Abenteuer FreshMarker mit dem Blog-Beitrag „FreshMarker, eine frische Template Engine für Java“. Was als akademisches Experiment startete, hat sich inzwischen zu einer vielseitigen und stabilen Template Engine entwickelt. Mit Version 2.5.0 und insgesamt 87 Blog-B

https://schegge.de/2026/03/vier-jahre-freshmarker/

#AgileAnekdoten #AusDemLeben #Bibliotheken #FreshMarker #Java #CongoCC #FreeMarker #FreshMarker #Template #TemplateEngine

</Agile> Vier Jahre FreshMarker

Vor vier Jahren begann das Abenteuer FreshMarker mit dem Blog-Beitrag „FreshMarker, eine frische Template Engine für Java“. Was als akademisches Experiment startete, hat sich inzwischen zu einer vi…

</Agile>

Context-Sensitive Tokenization With CongoCC

If you want to interpret a programming language or a DSL, there's no way around using a parser generator. At the heart of FreshMarker is a template parser generated by the CongoCC parser generator. I can't praise this JavaCC successor from Jon Revusky highly enough. Many new features and completely revised parts m

https://schegge.de/2026/02/context-sensitive-tokenization-with-congocc/

#Bibliotheken #FreshMarker #Java #CongoCC #FreshMarker

</Agile> Context-Sensitive Tokenization With CongoCC

If you want to interpret a programming language or a DSL, there’s no way around using a parser generator. At the heart of FreshMarker is a template parser generated by the CongoCC parser gene…

</Agile>

Quo Vadis, Lambda?

To implement a new built-in for sequences, lambdas were added as a new language component of the FreshMarker Expression Language. The lambda expression made it much easier to map the semantics of the new count built-in in an easily readable syntax. Now that lambda expressions are available, what else can they be used for and what s

https://schegge.de/2026/02/quo-vadis-lambda/

#Bibliotheken #FreshMarker #Java #CongoCC #FreshMarker #Lambda #Template #TemplateEngine

</Agile> Quo Vadis, Lambda?

To implement a new built-in for sequences, lambdas were added as a new language component of the FreshMarker Expression Language. The lambda expression made it much easier to map the semantics of t…

</Agile>

Comparison operators for Strings

FreshMarker allows you to overload a wide variety of operators for your own model types. These operators are multiplication, addition, negation and comparison operators. For strings, the addition operator + has so far been overloaded to realize a string concatenation. In this blog post, we want to implem

https://schegge.de/2025/07/comparison-operators-for-strings/

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

</Agile> Comparison operators for Strings

FreshMarker allows you to overload a wide variety of operators for your own model types. These operators are multiplication, addition, negation and comparison operators. For strings, the addition o…

</Agile>

New Operators

For the next version of FreshMarker, a number of new options will be created for the template engine. These new possibilities include the Spaceship Operator and a new String Concatenation Operator.

https://schegge.de/2025/07/new-operators/

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

</Agile> New Operators

For the next version of FreshMarker, a number of new options will be created for the template engine. These new possibilities include the Spaceship Operator and a new String Concatenation Operator.

</Agile>

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

https://schegge.de/2025/02/freshmarker-compile-it-3/

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

</Agile> 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, …

</Agile>

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

https://schegge.de/2025/02/freshmarker-compile-it-3/

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

</Agile> 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, …

</Agile>

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

https://schegge.de/2025/02/freshmarker-compile-it-2/

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

</Agile> 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 be…

</Agile>

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

https://schegge.de/2025/01/freshmarker-switch-on-directive/

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

</Agile> 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 fal…

</Agile>