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>

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

https://schegge.de/2023/05/trivial-pursuit-api-markdown-2/

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

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

</Agile>