Donnerstag, August 17, 2017

Mit der Template Engine FreeMarker lassen sich hervorragend Text-Vorlagen aller Art erstellen, sei es für HTML, XML, jede Art von Programmiersprachen (die Quelltexte unterstützen) oder auch für Grafik-Formate wie SVG oder PostScript, obwohl das Ganze auf HTML ausgerichtet ist.

Um FreeMarker lokal auszuführen ist der Einsatz von FMPP sinnvoll, der FreeMarker auch noch um einige Features erweitert.

Ich möchte hier keinen Einführungskurs im Programmieren geben, daher richten sich die Beispiele an jeden mit Erfahrung in anderen Programmiersprachen.
FreeMarker geht weit über das hinaus, was z.B. der Preprozessor in C/C++ leistet, es ist vielmehr schon fast eine eigene Programmiersprache, nur das der Output eben, ähnlich wie in PHP, einfach "nur" Text ist.

Die Ausführliche Dokumentation zu FreeMarker ist auf freemarker.org zu finden.


Ein Commando-File für jEdit (unterstützt FreeMarker von Haus aus) habe ich unter Commando files veröffentlicht.
Dieses baut auf der Kombination FreeMarker + FMPP auf.

 

Ich beginne mit ein paar grundlegenden Beispielen (das passende Syntax-Highlighting habe ich leider noch nicht gefunden).

<#-- Die Leerzeichen, Tabulatoren und Zeilenumbrüche im Template haben direkte
Auswirkung auf die Ausgabe!
Die kann z.B mit den Directiven "compress", "nt" und Steueranweisungen weiter
beeinflußt werden.

Alles was kein Kommentar ist wird ausgegeben.
-->

<#-- ======================================================================= -->

<#-- Einfach Zuweisungen. Die Variablen sind Case-Sensitive! -->

<#assign user = "Blubber"> 
${user} <#-- Das ist die Ausgabe ! -->

<#assign s = "Hallo ${user}!">
${s}
<#-- oder -->
<#assign s = "Hallo " + user + "!">
${s}

<#assign zahl = 10>

<#-- ======================================================================= -->

<#-- Einfache Abfrage -->
<#if user == "Test">
	Benutzer ist "Test"!
<#else>
	Benutzer ist "${user}"!
</#if>

<#if zahl gt 9> <#-- hier ist gt notwendig, da die spitze Klammer
sonst die Anweisung schließen würde --> 
	Zahl ist größer 9.
</#if>

<#-- ======================================================================= -->

<#-- Schleifen -->
<#list 1..10 as x>
	${x}. Absatz
	<#if x == 3><#break></#if> <#-- Abbruch -->
</#list>

 <#-- Zeilenumbrüche und Leerzeichen unterdrücken -->
<#compress>
<#list 1..10 as x>
	${x}. Absatz
	<#if x == 3><#break></#if> <#-- Abbruch -->
</#list>
</#compress>

<#-- oder -->
<#list 1..10 as x>
${x}. Absatz<#if x == 3><#break></#if>
</#list>

<#assign users = ['Joe', 'Kate', 'Fred']>
<#list users as user>
	${user}
</#list>

<#-- mit Zähler -->
<#list users as user>
	${user?counter} = ${user}
</#list>

<#-- mit Trennzeichen -->
<#list users as user>${user}<#sep>, </#list>

<#-- ======================================================================= -->

erzeugt folgende Ausgabe:

Blubber Hallo Blubber!
Hallo Blubber!

	Benutzer ist "Blubber"!

 	Zahl ist größer 9.

	1. Absatz
	 
	2. Absatz
	 
	3. Absatz
	
1. Absatz
2. Absatz
3. Absatz
1. Absatz
2. Absatz
3. Absatz



	Joe
	Kate
	Fred




	1 = Joe
	2 = Kate
	3 = Fred

Joe, Kate, Fred

 

Demnächst geht es hier weiter mit Macros und Funktionen ...