HelloExamplesPage

JLoom template:

HelloExamplesPage.jloom
<%@ jloom net.gereon.jloom.homepage.core.PageGenerator /%>

<%@ import net.gereon.jloom.homepage.core.* /%>



<%!
private final static String TEMPLATE1_FILENAME = "HelloWorld.jloom";
private final static String GENERATOR1_FILENAME =
                      "HelloWorld" + JLoomConstants.GENERATOR_CLASS_POSTFIX + ".java";
private final static String TEST1_FILENAME = "HelloWorld.java";

private final static String TEMPLATE2_FILENAME = "HelloBigWorld.jloom";
private final static String GENERATOR2_FILENAME =
                      "HelloBigWorld" + JLoomConstants.GENERATOR_CLASS_POSTFIX + ".java";
private final static String TEST2_FILENAME = "HelloBigWorld.java";
private final static String OUTPUT2_FILENAME = "HelloBigWorld.html";
%
>




<%@ main () %>
<%@ exec PageBorder (getPage()) %>

<h3> Simple Hello World </h3>
Examples can be much more useful than tons of text.
Here is a simple "Hello Word" example template:
<br>
<br>
<%@ exec ExampleCode (TEMPLATE1_FILENAME) /%>
<br>
<br>
Note that the template defines one String parameter,
which is inserted in the salutation.
<br>
<br>
This template has to be translated into the generator class.
If you are using the Eclipse plugin, this is done automatically immediately
after saving the template.
<br>
Otherwise you have to translate it manually: provided that you have the
binary JLoom JAR and the template in the same directory
(you need at least v0.10), you type:
<br>
<br>
<code class="console">
 java -jar jloom-0.10.0.jar HelloWorld
</code>
<br>
<br>
A file called HelloWorld_JLoom.java - the generator class - will be created:
<br>
<br>
<%@ exec ExampleCode (GENERATOR1_FILENAME) /%>
<br>
<br>
The generateMain() method of the generator class declares two parameters.
The first parameter stores information about the generation process and
is mandatory for all generator methods.
All subsequent parameters correspond to the parameters of the template,
in this case one String parameter.
<br>
<br>
You can call the generateMain() method to generate the text,
here is an example code:
<br>
<br>
<%@ exec ExampleCode (TEST1_FILENAME) /%>
<br>
<br>
When you run the above code it writes the generated text output to the console:
<br>
<br>
<code class="console">
<big>
 Hello World!
</big>
</code>
<br>
<br>
<br>
<br>


<h3> Advanced Hello Big World </h3>
Here is an advanced example template to show the basic syntax elements of JLoom.
Smaller examples can be found in

<%@ exec PageLink (Page.INTRODUCTION) /%> and

<%@ exec PageLink (Page.COMMANDS) /%>.
<br>
<br>
<%@ exec ExampleCode (TEMPLATE2_FILENAME) /%>
<br>
<br>
When you look at this template, you will find all basic JLoom syntax elements,
like scriptlets, expressions, and miscellaneous commands and macros.
All these have the same basic tag-structure:
<code>&lt;%...%&gt;</code>
<br>
The template calls itself to demonstrate, how to call other templates:
<code>&lt;%@ exec HelloBigWorld (END_NAME, "") /%&gt;</code>
<br>
<br>
<%= TEMPLATE2_FILENAME %> will be translated by JLoom into the following Java class.
Because this class is generated by JLoom, you don't have do worry about its code,
the code is shown here just to give you an impression how JLoom works:
<br>
<br>
<%@ exec ExampleCode (GENERATOR2_FILENAME) /%>
<br>
<p>
You can use the generator class (in <%= GENERATOR2_FILENAME %>) to generate HTML Pages
(as defined by the template <%= TEMPLATE2_FILENAME %>).
The template <%= TEMPLATE2_FILENAME %> declares two String parameters:
<code>&lt;%@ main (String firstName, String lastName) %&gt;</code>
<br>
Therefore the corresponding method generateMain() in <%= GENERATOR2_FILENAME %>
expects two String arguments (besides a GenerationContext).
This is the most important feature of JLoom, because it allows you
to modularize your code into encapsulated templates.
</p>
<p>
The following code generates the HTML Page:
</p>
<%@ exec ExampleCode (TEST2_FILENAME) /%>
<br>
<br>
<%= TEST2_FILENAME %> calls generateMain() in <%= GENERATOR2_FILENAME %>
and writes the output to <%= OUTPUT2_FILENAME %>.
<br>
So finally, this is the produced output:
<br>
<br>
<%@ exec ExampleCode (OUTPUT2_FILENAME) /%>
<small>
<a href="<%= OUTPUT2_FILENAME %>"
   target="_blank"
   >Show the HTML page</a>
</small>
<br>
<br>
<p>
Ok, this was a stupid example just for demonstration purpose.
An example for real world usage are these JLoom webpages -
yes, this is what you are currently reading, more precisely the entire
content of the JLoom homepage is generated out of JLoom templates.
<br>
You can download these templates on Sourceforge.
You can also browse these templates online in the
<a href="<%= Web.HOMEBROWSER_DIR + "/" + "indexPage_Browser.html" %>"
   target="homebrowser"
   ><nobr>Homepage Template Browser</nobr></a>.
When you take a look at these templates -
each of it is extremely simple because of modularization and elimination of
redundant markup -
you will (hopefully) see, that JLoom can be very helpful for generating static HTML content.
Of course it is much more useful for dynamic content.
</p>
<p>
Another real world example is JLoom itself, because most template
commands are implemented as macros which are JLoom templates.
You can look at these macros to learn about JLoom templates,
you will find them in the sources in the package
net.gereon.jloom.macros.
</p>

<%/ exec %>
<%/ main %>



Generator class:

HelloExamplesPage_JLoom.java
/* JLoom 1.4.0 generator class */

/* AUTO-GENERATED */
/* Do not edit! Changes will be overwritten! */

package net.gereon.jloom.homepage.templates;

import java.io.*;
import net.gereon.jloom.core.*;
import net.gereon.jloom.util.*;
import static net.gereon.jloom.util.GenerationTools.*;
import net.gereon.jloom.homepage.core.*;



public class HelloExamplesPage_JLoom extends net.gereon.jloom.homepage.core.PageGenerator {
  private final static String TEMPLATE1_FILENAME = "HelloWorld.jloom";
  private final static String GENERATOR1_FILENAME =
                        "HelloWorld" + JLoomConstants.GENERATOR_CLASS_POSTFIX + ".java";
  private final static String TEST1_FILENAME = "HelloWorld.java";
  
  private final static String TEMPLATE2_FILENAME = "HelloBigWorld.jloom";
  private final static String GENERATOR2_FILENAME =
                        "HelloBigWorld" + JLoomConstants.GENERATOR_CLASS_POSTFIX + ".java";
  private final static String TEST2_FILENAME = "HelloBigWorld.java";
  private final static String OUTPUT2_FILENAME = "HelloBigWorld.html";


  public void generateMain(GenerationContext context) throws IOException {
    {
      PageBorder_JLoom _generator_25 = new PageBorder_JLoom();
      _generator_25.generateMain(context, getPage());
      newLine(context);
      newLine(context);
      println(context, "<h3> Simple Hello World </h3>");
      println(context, "Examples can be much more useful than tons of text.");
      println(context, "Here is a simple \"Hello Word\" example template:");
      println(context, "<br>");
      println(context, "<br>");
      {
        ExampleCode_JLoom _generator_26 = new ExampleCode_JLoom();
        _generator_26.generateMain(context, TEMPLATE1_FILENAME);
        _generator_26.generateTail(context);
      }
      newLine(context);
      println(context, "<br>");
      println(context, "<br>");
      println(context, "Note that the template defines one String parameter,");
      println(context, "which is inserted in the salutation.");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "This template has to be translated into the generator class.");
      println(context, "If you are using the Eclipse plugin, this is done automatically immediately");
      println(context, "after saving the template.");
      println(context, "<br>");
      println(context, "Otherwise you have to translate it manually: provided that you have the");
      println(context, "binary JLoom JAR and the template in the same directory");
      println(context, "(you need at least v0.10), you type:");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "<code class=\"console\">");
      println(context, " java -jar jloom-0.10.0.jar HelloWorld");
      println(context, "</code>");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "A file called HelloWorld_JLoom.java - the generator class - will be created:");
      println(context, "<br>");
      println(context, "<br>");
      {
        ExampleCode_JLoom _generator_27 = new ExampleCode_JLoom();
        _generator_27.generateMain(context, GENERATOR1_FILENAME);
        _generator_27.generateTail(context);
      }
      newLine(context);
      println(context, "<br>");
      println(context, "<br>");
      println(context, "The generateMain() method of the generator class declares two parameters.");
      println(context, "The first parameter stores information about the generation process and");
      println(context, "is mandatory for all generator methods.");
      println(context, "All subsequent parameters correspond to the parameters of the template,");
      println(context, "in this case one String parameter.");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "You can call the generateMain() method to generate the text,");
      println(context, "here is an example code:");
      println(context, "<br>");
      println(context, "<br>");
      {
        ExampleCode_JLoom _generator_28 = new ExampleCode_JLoom();
        _generator_28.generateMain(context, TEST1_FILENAME);
        _generator_28.generateTail(context);
      }
      newLine(context);
      println(context, "<br>");
      println(context, "<br>");
      println(context, "When you run the above code it writes the generated text output to the console:");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "<code class=\"console\">");
      println(context, "<big>");
      println(context, " Hello World!");
      println(context, "</big>");
      println(context, "</code>");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "<br>");
      newLine(context);
      newLine(context);
      println(context, "<h3> Advanced Hello Big World </h3>");
      println(context, "Here is an advanced example template to show the basic syntax elements of JLoom.");
      println(context, "Smaller examples can be found in");
      newLine(context);
      {
        PageLink_JLoom _generator_29 = new PageLink_JLoom();
        _generator_29.generateMain(context, Page.INTRODUCTION);
        _generator_29.generateTail(context);
      }
      println(context, " and");
      newLine(context);
      {
        PageLink_JLoom _generator_30 = new PageLink_JLoom();
        _generator_30.generateMain(context, Page.COMMANDS);
        _generator_30.generateTail(context);
      }
      println(context, ".");
      println(context, "<br>");
      println(context, "<br>");
      {
        ExampleCode_JLoom _generator_31 = new ExampleCode_JLoom();
        _generator_31.generateMain(context, TEMPLATE2_FILENAME);
        _generator_31.generateTail(context);
      }
      newLine(context);
      println(context, "<br>");
      println(context, "<br>");
      println(context, "When you look at this template, you will find all basic JLoom syntax elements,");
      println(context, "like scriptlets, expressions, and miscellaneous commands and macros.");
      println(context, "All these have the same basic tag-structure:");
      println(context, "<code>&lt;%...%&gt;</code>");
      println(context, "<br>");
      println(context, "The template calls itself to demonstrate, how to call other templates:");
      println(context, "<code>&lt;%@ exec HelloBigWorld (END_NAME, \"\") /%&gt;</code>");
      println(context, "<br>");
      println(context, "<br>");
      print(context, "" + (TEMPLATE2_FILENAME));
      println(context, " will be translated by JLoom into the following Java class.");
      println(context, "Because this class is generated by JLoom, you don\'t have do worry about its code,");
      println(context, "the code is shown here just to give you an impression how JLoom works:");
      println(context, "<br>");
      println(context, "<br>");
      {
        ExampleCode_JLoom _generator_32 = new ExampleCode_JLoom();
        _generator_32.generateMain(context, GENERATOR2_FILENAME);
        _generator_32.generateTail(context);
      }
      newLine(context);
      println(context, "<br>");
      println(context, "<p>");
      print(context, "You can use the generator class (in ");
      print(context, "" + (GENERATOR2_FILENAME));
      println(context, ") to generate HTML Pages");
      print(context, "(as defined by the template ");
      print(context, "" + (TEMPLATE2_FILENAME));
      println(context, ").");
      print(context, "The template ");
      print(context, "" + (TEMPLATE2_FILENAME));
      println(context, " declares two String parameters:");
      println(context, "<code>&lt;%@ main (String firstName, String lastName) %&gt;</code>");
      println(context, "<br>");
      print(context, "Therefore the corresponding method generateMain() in ");
      print(context, "" + (GENERATOR2_FILENAME));
      newLine(context);
      println(context, "expects two String arguments (besides a GenerationContext).");
      println(context, "This is the most important feature of JLoom, because it allows you");
      println(context, "to modularize your code into encapsulated templates.");
      println(context, "</p>");
      println(context, "<p>");
      println(context, "The following code generates the HTML Page:");
      println(context, "</p>");
      {
        ExampleCode_JLoom _generator_33 = new ExampleCode_JLoom();
        _generator_33.generateMain(context, TEST2_FILENAME);
        _generator_33.generateTail(context);
      }
      newLine(context);
      println(context, "<br>");
      println(context, "<br>");
      print(context, "" + (TEST2_FILENAME));
      print(context, " calls generateMain() in ");
      print(context, "" + (GENERATOR2_FILENAME));
      newLine(context);
      print(context, "and writes the output to ");
      print(context, "" + (OUTPUT2_FILENAME));
      println(context, ".");
      println(context, "<br>");
      println(context, "So finally, this is the produced output:");
      println(context, "<br>");
      println(context, "<br>");
      {
        ExampleCode_JLoom _generator_34 = new ExampleCode_JLoom();
        _generator_34.generateMain(context, OUTPUT2_FILENAME);
        _generator_34.generateTail(context);
      }
      newLine(context);
      println(context, "<small>");
      print(context, "<a href=\"");
      print(context, "" + (OUTPUT2_FILENAME));
      println(context, "\"");
      println(context, "   target=\"_blank\"");
      println(context, "   >Show the HTML page</a>");
      println(context, "</small>");
      println(context, "<br>");
      println(context, "<br>");
      println(context, "<p>");
      println(context, "Ok, this was a stupid example just for demonstration purpose.");
      println(context, "An example for real world usage are these JLoom webpages -");
      println(context, "yes, this is what you are currently reading, more precisely the entire");
      println(context, "content of the JLoom homepage is generated out of JLoom templates.");
      println(context, "<br>");
      println(context, "You can download these templates on Sourceforge.");
      println(context, "You can also browse these templates online in the");
      print(context, "<a href=\"");
      print(context, "" + (Web.HOMEBROWSER_DIR + "/" + "indexPage_Browser.html"));
      println(context, "\"");
      println(context, "   target=\"homebrowser\"");
      println(context, "   ><nobr>Homepage Template Browser</nobr></a>.");
      println(context, "When you take a look at these templates -");
      println(context, "each of it is extremely simple because of modularization and elimination of");
      println(context, "redundant markup -");
      println(context, "you will (hopefully) see, that JLoom can be very helpful for generating static HTML content.");
      println(context, "Of course it is much more useful for dynamic content.");
      println(context, "</p>");
      println(context, "<p>");
      println(context, "Another real world example is JLoom itself, because most template");
      println(context, "commands are implemented as macros which are JLoom templates.");
      println(context, "You can look at these macros to learn about JLoom templates,");
      println(context, "you will find them in the sources in the package");
      println(context, "net.gereon.jloom.macros.");
      println(context, "</p>");
      newLine(context);
      _generator_25.generateTail(context);
    }
  }
}

/* TRANSLATION MAPPING:
[62 288 c] [117 329 c] [122 426 s] [192 497 s] [243 549 s]
[331 638 s] [396 704 s] [398 707 s] [471 781 s] [522 833 s]
[613 925 s] [681 994 s] [761 1063 c] [777 1140 c] [811 1263 c]
[960 1588 c] [1005 1781 c] [1651 3049 c] [1697 3243 c] [2121 4027 c]
[2162 4216 c] [2515 5101 c] [2556 5287 c] [2564 5343 c] [2601 5525 c]
[2616 5618 c] [2661 5811 c] [3051 6511 c] [3076 6560 c] [3304 6919 c]
[3350 7113 c] [3399 7262 c] [3425 7312 c] [3479 7418 c] [3504 7467 c]
[3521 7536 c] [3546 7585 c] [3707 7850 c] [3733 7900 c] [3980 8351 c]
[4021 8540 c] [4035 8628 c] [4056 8673 c] [4081 8724 c] [4107 8774 c]
[4134 8849 c] [4157 8896 c] [4220 9089 c] [4263 9280 c] [4283 9375 c]
[4306 9422 c] [4763 10273 c] [4822 10356 c] [5486 11499 c] */



HTML of the generated page:

HelloExamples.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  <meta name="description"
        content="JLoom is a JSP like template language for text generation. JLoom templates are modular encapsulated and can declare arbitrary parameters, not only Strings. They can be used to generate source code, HTML, XML, etc. There is a plugin for Eclipse.">
  <meta name="keywords"
        content="Java, HTML, XML, code generation, Eclipse, JSP, dynamic content, template, templates, text generation">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="pragma" content="no-cache">
  <link rel="stylesheet" type="text/css" href="/etc/style.css">
  <title> Hello World Examples </title>
</head>

<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table cellspacing="0" cellpadding="20" height="100%">
<tr>

<td valign="top" style="background-color:#d7d7ee">
<a href="http://sourceforge.net" target="_top" title="Goto Sourceforge"
   ><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=160273&amp;type=2"
     width="125" height="37" border="0" alt="SourceForge.net Logo"/>
</a>
<br>
<br>
<a href="http://sourceforge.net/projects/jloom" target="_top"
   title="Goto JLoom at Sourceforge"
   style="color:black; text-decoration:none;">
  <nobr>
  <img src="/images/jloom_3.png" border="0" alt="JLoom Logo"/>
  <span style="font-family:Verdana; font-size:4em;">JLoom</span>
  </nobr>
</a>
<br>
<br>
<br>
  <a href="/index.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Overview </b>
</a>
<br>
<br>
  <a href="/Introduction.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Introduction </b>
</a>
<br>
<br>
  <a href="/Commands.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Commands </b>
</a>
<br>
<br>
  <a href="/HelloExamples.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Hello World Examples </b>
</a>
<br>
<br>
  <a href="/Installation.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Installation / Usage </b>
</a>
<br>
<br>
  <a href="/Eclipse.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Eclipse Plugin </b>
</a>
<br>
<br>
  <a href="/Download.html" style="color:#4646aa; font-size:1.8em; text-decoration:none;">
<b> Download </b>
</a>
<br>
<br>

</td>

<td valign="top">
<table width="100%">
<tr>
<td width="20">
  <small>
  <a href="Commands.html"><nobr>Commands</nobr></a>
  </small>
</td>
<td>
<center> <h2> Hello World Examples </h2> </center>
</td>
<td align="right" width="20">
  <small>
  <a href="Installation.html"><nobr>Installation / Usage</nobr></a>
  </small>
</td>
</tr>
</table>

<h3> Simple Hello World </h3>
Examples can be much more useful than tons of text.
Here is a simple "Hello Word" example template:
<br>
<br>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloWorld.jloom </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;jloom&nbsp;template&nbsp;/%</span>&gt;</span>
<br>

<br>
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;main&nbsp;(String&nbsp;name)&nbsp;%</span>&gt;</span>
<br>

<br>
Hello&nbsp;<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;name&nbsp;%</span>&gt;</span>!
<br>

<br>
<span class="jloom-b">&lt;<span class="jloom">%/&nbsp;main&nbsp;%</span>&gt;</span></span>
</td>
</tr>
</table>
<br>
<br>
Note that the template defines one String parameter,
which is inserted in the salutation.
<br>
<br>
This template has to be translated into the generator class.
If you are using the Eclipse plugin, this is done automatically immediately
after saving the template.
<br>
Otherwise you have to translate it manually: provided that you have the
binary JLoom JAR and the template in the same directory
(you need at least v0.10), you type:
<br>
<br>
<code class="console">
 java -jar jloom-0.10.0.jar HelloWorld
</code>
<br>
<br>
A file called HelloWorld_JLoom.java - the generator class - will be created:
<br>
<br>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloWorld_JLoom.java </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">
/*&nbsp;JLoom&nbsp;1.4.0&nbsp;generator&nbsp;class&nbsp;*/
<br>

<br>
/*&nbsp;AUTO-GENERATED&nbsp;*/
<br>
/*&nbsp;Do&nbsp;not&nbsp;edit!&nbsp;Changes&nbsp;will&nbsp;be&nbsp;overwritten!&nbsp;*/
<br>

<br>
package&nbsp;net.gereon.jloom.homepage.examples;
<br>

<br>
import&nbsp;java.io.*;
<br>
import&nbsp;net.gereon.jloom.core.*;
<br>
import&nbsp;net.gereon.jloom.util.*;
<br>
import&nbsp;static&nbsp;net.gereon.jloom.util.GenerationTools.*;
<br>

<br>

<br>

<br>
public&nbsp;class&nbsp;HelloWorld_JLoom&nbsp;extends&nbsp;net.gereon.jloom.core.GeneratorBase&nbsp;{
<br>

<br>

<br>
&nbsp;&nbsp;public&nbsp;void&nbsp;generateMain(GenerationContext&nbsp;context,&nbsp;String&nbsp;name)&nbsp;throws&nbsp;IOException&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"Hello&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(name));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"!");
<br>
&nbsp;&nbsp;}
<br>
}
<br>

<br>
/*&nbsp;TRANSLATION&nbsp;MAPPING:
<br>
[26&nbsp;287&nbsp;c]&nbsp;[51&nbsp;456&nbsp;c]&nbsp;[61&nbsp;508&nbsp;c]&nbsp;[72&nbsp;541&nbsp;c]&nbsp;*/
<br>
</span>
</td>
</tr>
</table>
<br>
<br>
The generateMain() method of the generator class declares two parameters.
The first parameter stores information about the generation process and
is mandatory for all generator methods.
All subsequent parameters correspond to the parameters of the template,
in this case one String parameter.
<br>
<br>
You can call the generateMain() method to generate the text,
here is an example code:
<br>
<br>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloWorld.java </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">
package&nbsp;net.gereon.jloom.homepage.examples;
<br>

<br>
import&nbsp;net.gereon.jloom.core.*;
<br>

<br>

<br>

<br>
public&nbsp;class&nbsp;HelloWorld
<br>
{
<br>
&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception
<br>
&nbsp;&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;create&nbsp;a&nbsp;GenerationContext,&nbsp;configure&nbsp;output&nbsp;to&nbsp;System.out
<br>
&nbsp;&nbsp;&nbsp;&nbsp;GenerationContext&nbsp;context&nbsp;=&nbsp;new&nbsp;SimpleGenerationContext(System.out,&nbsp;"\n",&nbsp;"&nbsp;&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;
<br>
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;create&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;generator&nbsp;class
<br>
&nbsp;&nbsp;&nbsp;&nbsp;HelloWorld_JLoom&nbsp;generator&nbsp;=&nbsp;new&nbsp;HelloWorld_JLoom();
<br>
&nbsp;&nbsp;&nbsp;&nbsp;
<br>
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;generate&nbsp;output&nbsp;to&nbsp;System.out
<br>
&nbsp;&nbsp;&nbsp;&nbsp;generator.generateMain(context,&nbsp;"World");
<br>
&nbsp;&nbsp;}
<br>
}
<br>
</span>
</td>
</tr>
</table>
<br>
<br>
When you run the above code it writes the generated text output to the console:
<br>
<br>
<code class="console">
<big>
 Hello World!
</big>
</code>
<br>
<br>
<br>
<br>


<h3> Advanced Hello Big World </h3>
Here is an advanced example template to show the basic syntax elements of JLoom.
Smaller examples can be found in

<a href="Introduction.html"><nobr>Introduction</nobr></a> and

<a href="Commands.html"><nobr>Commands</nobr></a>.
<br>
<br>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloBigWorld.jloom </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;jloom&nbsp;template&nbsp;/%</span>&gt;</span>
<br>

<br>
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;import&nbsp;java.util.*&nbsp;/%</span>&gt;</span>
<br>

<br>

<br>

<br>
<span class="comment">&lt;&#37;--
<br>
This&nbsp;is&nbsp;a&nbsp;comment,&nbsp;it&nbsp;will&nbsp;be&nbsp;ignored.
<br>
--&#37;&gt;</span>
<br>

<br>

<br>

<br>
<span class="jloom-b">&lt;<span class="jloom">%!
<br>
//&nbsp;This&nbsp;is&nbsp;a&nbsp;declaration:
<br>
//&nbsp;Java&nbsp;code&nbsp;which&nbsp;can&nbsp;contain&nbsp;declarations&nbsp;of&nbsp;methods&nbsp;and&nbsp;fields.
<br>
//&nbsp;It&nbsp;is&nbsp;only&nbsp;one&nbsp;such&nbsp;declaration-tag&nbsp;allowed&nbsp;and&nbsp;it&nbsp;has&nbsp;to
<br>
//&nbsp;be&nbsp;before&nbsp;the&nbsp;main-command-tag
<br>

<br>
private&nbsp;final&nbsp;static&nbsp;String&nbsp;TITLE&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"Hello&nbsp;Big&nbsp;World&nbsp;Example";
<br>
private&nbsp;final&nbsp;static&nbsp;String&nbsp;END_NAME&nbsp;=&nbsp;"END";
<br>

<br>

<br>
public&nbsp;String&nbsp;getTimeString()
<br>
{
<br>
&nbsp;&nbsp;Calendar&nbsp;c&nbsp;=&nbsp;new&nbsp;GregorianCalendar();
<br>
&nbsp;&nbsp;c.setTime(new&nbsp;Date());
<br>
&nbsp;&nbsp;return&nbsp;"sometime&nbsp;in&nbsp;"&nbsp;+&nbsp;c.get(Calendar.YEAR);
<br>
}
<br>
%</span>&gt;</span>
<br>

<br>

<br>

<br>
<span class="comment">&lt;&#37;--&nbsp;The&nbsp;main-command&nbsp;declares&nbsp;the&nbsp;parameters&nbsp;of&nbsp;the&nbsp;template&nbsp;--&#37;&gt;</span>
<br>
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;main&nbsp;(String&nbsp;firstName,&nbsp;String&nbsp;lastName)&nbsp;%</span>&gt;</span>
<br>

<br>
<span class="comment">&lt;&#37;--&nbsp;if-command&nbsp;example&nbsp;--&#37;&gt;</span>
<br>
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;if&nbsp;(!firstName.equals(END_NAME))&nbsp;%</span>&gt;</span>
<br>
&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;
<br>
&lt;html&gt;
<br>
&lt;head&gt;
<br>
&lt;title&gt;&nbsp;<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;TITLE&nbsp;%</span>&gt;</span>&nbsp;&lt;/title&gt;
<br>
&lt;/head&gt;
<br>
&lt;body&gt;
<br>
<span class="jloom-b">&lt;<span class="jloom">%/&nbsp;if&nbsp;%</span>&gt;</span>
<br>

<br>
&lt;h1&gt;
<br>
<span class="comment">&lt;&#37;--&nbsp;The&nbsp;title&nbsp;is&nbsp;inserted&nbsp;by&nbsp;an&nbsp;expression-tag.
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It&nbsp;can&nbsp;contain&nbsp;any&nbsp;Java&nbsp;expression&nbsp;or&nbsp;method&nbsp;call
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;resolves&nbsp;to&nbsp;a&nbsp;String.
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;usefull&nbsp;to&nbsp;add&nbsp;dynamic&nbsp;content.
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;this&nbsp;case&nbsp;it&nbsp;just&nbsp;reduces&nbsp;redundancy,&nbsp;because
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;constant&nbsp;"TITLE"&nbsp;can&nbsp;be&nbsp;used&nbsp;anywhere&nbsp;else.&nbsp;--&#37;&gt;</span>
<br>
<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;TITLE&nbsp;%</span>&gt;</span>
<br>
&lt;/h1&gt;
<br>

<br>
<span class="comment">&lt;&#37;--&nbsp;for-command&nbsp;example&nbsp;--&#37;&gt;</span>
<br>
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;for&nbsp;(int&nbsp;i=1;&nbsp;i&lt;=3;&nbsp;i++)&nbsp;%</span>&gt;</span>
<br>
&lt;b&gt;&nbsp;Hello&nbsp;<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;firstName&nbsp;%</span>&gt;</span>&nbsp;<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;lastName&nbsp;%</span>&gt;</span>&nbsp;No.&nbsp;<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;i&nbsp;%</span>&gt;</span>&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>
<span class="jloom-b">&lt;<span class="jloom">%/&nbsp;for&nbsp;%</span>&gt;</span>
<br>

<br>
&lt;br&gt;
<br>
now&nbsp;the&nbsp;scriptlet&nbsp;is&nbsp;executed...
<br>
&lt;br&gt;
<br>
&lt;br&gt;
<br>

<br>
<span class="jloom-b">&lt;<span class="jloom">%
<br>
//&nbsp;This&nbsp;is&nbsp;a&nbsp;scriptlet:
<br>
//&nbsp;Java&nbsp;code&nbsp;which&nbsp;is&nbsp;executed&nbsp;while&nbsp;executing&nbsp;the&nbsp;template.
<br>

<br>
if&nbsp;(firstName.equals(END_NAME))&nbsp;{
<br>
&nbsp;&nbsp;return;&nbsp;//&nbsp;to&nbsp;end&nbsp;the&nbsp;recursion&nbsp;in&nbsp;this&nbsp;stupid&nbsp;example
<br>
}
<br>
%</span>&gt;</span>
<br>

<br>
<span class="comment">&lt;&#37;--&nbsp;exec-command&nbsp;example&nbsp;--&#37;&gt;</span>
<br>
<span class="jloom-b">&lt;<span class="jloom">%@&nbsp;exec&nbsp;HelloBigWorld&nbsp;(END_NAME,&nbsp;"")&nbsp;/%</span>&gt;</span>&nbsp;&nbsp;<span class="comment">&lt;&#37;--&nbsp;recursive&nbsp;call&nbsp;--&#37;&gt;</span>
<br>

<br>
&lt;small&gt;&nbsp;generated&nbsp;<span class="jloom-b">&lt;<span class="jloom">%=&nbsp;getTimeString()&nbsp;%</span>&gt;</span>&nbsp;&lt;/small&gt;
<br>

<br>
&lt;/body&gt;
<br>
&lt;/html&gt;
<br>

<br>
<span class="jloom-b">&lt;<span class="jloom">%/&nbsp;main&nbsp;%</span>&gt;</span></span>
</td>
</tr>
</table>
<br>
<br>
When you look at this template, you will find all basic JLoom syntax elements,
like scriptlets, expressions, and miscellaneous commands and macros.
All these have the same basic tag-structure:
<code>&lt;%...%&gt;</code>
<br>
The template calls itself to demonstrate, how to call other templates:
<code>&lt;%@ exec HelloBigWorld (END_NAME, "") /%&gt;</code>
<br>
<br>
HelloBigWorld.jloom will be translated by JLoom into the following Java class.
Because this class is generated by JLoom, you don't have do worry about its code,
the code is shown here just to give you an impression how JLoom works:
<br>
<br>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloBigWorld_JLoom.java </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">
/*&nbsp;JLoom&nbsp;1.4.0&nbsp;generator&nbsp;class&nbsp;*/
<br>

<br>
/*&nbsp;AUTO-GENERATED&nbsp;*/
<br>
/*&nbsp;Do&nbsp;not&nbsp;edit!&nbsp;Changes&nbsp;will&nbsp;be&nbsp;overwritten!&nbsp;*/
<br>

<br>
package&nbsp;net.gereon.jloom.homepage.examples;
<br>

<br>
import&nbsp;java.io.*;
<br>
import&nbsp;net.gereon.jloom.core.*;
<br>
import&nbsp;net.gereon.jloom.util.*;
<br>
import&nbsp;static&nbsp;net.gereon.jloom.util.GenerationTools.*;
<br>
import&nbsp;java.util.*;
<br>

<br>

<br>

<br>
public&nbsp;class&nbsp;HelloBigWorld_JLoom&nbsp;extends&nbsp;net.gereon.jloom.core.GeneratorBase&nbsp;{
<br>
&nbsp;&nbsp;//&nbsp;This&nbsp;is&nbsp;a&nbsp;declaration:
<br>
&nbsp;&nbsp;//&nbsp;Java&nbsp;code&nbsp;which&nbsp;can&nbsp;contain&nbsp;declarations&nbsp;of&nbsp;methods&nbsp;and&nbsp;fields.
<br>
&nbsp;&nbsp;//&nbsp;It&nbsp;is&nbsp;only&nbsp;one&nbsp;such&nbsp;declaration-tag&nbsp;allowed&nbsp;and&nbsp;it&nbsp;has&nbsp;to
<br>
&nbsp;&nbsp;//&nbsp;be&nbsp;before&nbsp;the&nbsp;main-command-tag
<br>
&nbsp;&nbsp;
<br>
&nbsp;&nbsp;private&nbsp;final&nbsp;static&nbsp;String&nbsp;TITLE&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"Hello&nbsp;Big&nbsp;World&nbsp;Example";
<br>
&nbsp;&nbsp;private&nbsp;final&nbsp;static&nbsp;String&nbsp;END_NAME&nbsp;=&nbsp;"END";
<br>
&nbsp;&nbsp;
<br>
&nbsp;&nbsp;
<br>
&nbsp;&nbsp;public&nbsp;String&nbsp;getTimeString()
<br>
&nbsp;&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;Calendar&nbsp;c&nbsp;=&nbsp;new&nbsp;GregorianCalendar();
<br>
&nbsp;&nbsp;&nbsp;&nbsp;c.setTime(new&nbsp;Date());
<br>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"sometime&nbsp;in&nbsp;"&nbsp;+&nbsp;c.get(Calendar.YEAR);
<br>
&nbsp;&nbsp;}
<br>

<br>

<br>
&nbsp;&nbsp;public&nbsp;void&nbsp;generateMain(GenerationContext&nbsp;context,&nbsp;String&nbsp;firstName,&nbsp;String&nbsp;lastName)&nbsp;throws&nbsp;IOException&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!firstName.equals(END_NAME))&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;\"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN\"&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;html&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;head&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"&lt;title&gt;&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(TITLE));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&nbsp;&lt;/title&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;/head&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;body&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;h1&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(TITLE));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;/h1&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=1;&nbsp;i&lt;=3;&nbsp;i++)&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"&lt;b&gt;&nbsp;Hello&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(firstName));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(lastName));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"&nbsp;No.&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(i));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&nbsp;!&nbsp;&lt;/b&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;br&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;br&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"now&nbsp;the&nbsp;scriptlet&nbsp;is&nbsp;executed...");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;br&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;br&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;is&nbsp;a&nbsp;scriptlet:
<br>
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Java&nbsp;code&nbsp;which&nbsp;is&nbsp;executed&nbsp;while&nbsp;executing&nbsp;the&nbsp;template.
<br>
&nbsp;&nbsp;&nbsp;&nbsp;
<br>
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(firstName.equals(END_NAME))&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;//&nbsp;to&nbsp;end&nbsp;the&nbsp;recursion&nbsp;in&nbsp;this&nbsp;stupid&nbsp;example
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloBigWorld_JLoom&nbsp;_generator_60&nbsp;=&nbsp;new&nbsp;HelloBigWorld_JLoom();
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_generator_60.generateMain(context,&nbsp;END_NAME,&nbsp;"");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_generator_60.generateTail(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"&nbsp;&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;"&lt;small&gt;&nbsp;generated&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(context,&nbsp;""&nbsp;+&nbsp;(getTimeString()));
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&nbsp;&lt;/small&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;newLine(context);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;/body&gt;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;println(context,&nbsp;"&lt;/html&gt;");
<br>
&nbsp;&nbsp;}
<br>
}
<br>

<br>
/*&nbsp;TRANSLATION&nbsp;MAPPING:
<br>
[26&nbsp;287&nbsp;c]&nbsp;[118&nbsp;307&nbsp;c]&nbsp;[123&nbsp;391&nbsp;s]&nbsp;[150&nbsp;419&nbsp;s]&nbsp;[218&nbsp;488&nbsp;s]
<br>
[280&nbsp;551&nbsp;s]&nbsp;[315&nbsp;587&nbsp;s]&nbsp;[317&nbsp;590&nbsp;s]&nbsp;[384&nbsp;658&nbsp;s]&nbsp;[431&nbsp;706&nbsp;s]
<br>
[433&nbsp;709&nbsp;s]&nbsp;[435&nbsp;712&nbsp;s]&nbsp;[466&nbsp;744&nbsp;s]&nbsp;[469&nbsp;748&nbsp;s]&nbsp;[510&nbsp;790&nbsp;s]
<br>
[536&nbsp;817&nbsp;s]&nbsp;[585&nbsp;867&nbsp;s]&nbsp;[666&nbsp;869&nbsp;c]&nbsp;[713&nbsp;981&nbsp;c]&nbsp;[747&nbsp;1003&nbsp;c]
<br>
[786&nbsp;1042&nbsp;c]&nbsp;[877&nbsp;1237&nbsp;c]&nbsp;[889&nbsp;1273&nbsp;c]&nbsp;[926&nbsp;1385&nbsp;c]&nbsp;[1236&nbsp;1437&nbsp;c]
<br>
[1248&nbsp;1471&nbsp;c]&nbsp;[1290&nbsp;1546&nbsp;c]&nbsp;[1321&nbsp;1577&nbsp;c]&nbsp;[1333&nbsp;1613&nbsp;c]&nbsp;[1349&nbsp;1653&nbsp;c]
<br>
[1350&nbsp;1680&nbsp;c]&nbsp;[1365&nbsp;1719&nbsp;c]&nbsp;[1370&nbsp;1750&nbsp;c]&nbsp;[1378&nbsp;1782&nbsp;c]&nbsp;[1403&nbsp;1855&nbsp;c]
<br>
[1461&nbsp;2047&nbsp;c]&nbsp;[1465&nbsp;2051&nbsp;s]&nbsp;[1490&nbsp;2079&nbsp;s]&nbsp;[1552&nbsp;2144&nbsp;s]&nbsp;[1554&nbsp;2149&nbsp;s]
<br>
[1589&nbsp;2187&nbsp;s]&nbsp;[1647&nbsp;2248&nbsp;s]&nbsp;[1652&nbsp;2250&nbsp;c]&nbsp;[1688&nbsp;2272&nbsp;c]&nbsp;[1729&nbsp;2453&nbsp;c]
<br>
[1755&nbsp;2479&nbsp;c]&nbsp;[1777&nbsp;2565&nbsp;c]&nbsp;[1799&nbsp;2609&nbsp;c]&nbsp;*/
<br>
</span>
</td>
</tr>
</table>
<br>
<p>
You can use the generator class (in HelloBigWorld_JLoom.java) to generate HTML Pages
(as defined by the template HelloBigWorld.jloom).
The template HelloBigWorld.jloom declares two String parameters:
<code>&lt;%@ main (String firstName, String lastName) %&gt;</code>
<br>
Therefore the corresponding method generateMain() in HelloBigWorld_JLoom.java
expects two String arguments (besides a GenerationContext).
This is the most important feature of JLoom, because it allows you
to modularize your code into encapsulated templates.
</p>
<p>
The following code generates the HTML Page:
</p>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloBigWorld.java </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">
package&nbsp;net.gereon.jloom.homepage.examples;
<br>

<br>
import&nbsp;java.io.*;
<br>

<br>
import&nbsp;net.gereon.jloom.core.*;
<br>
import&nbsp;net.gereon.jloom.homepage.core.Web;
<br>

<br>

<br>
public&nbsp;class&nbsp;HelloBigWorld
<br>
{
<br>
&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception
<br>
&nbsp;&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;=&nbsp;new&nbsp;File(Web.EXAMPLES_PATH&nbsp;+&nbsp;"/HelloBigWorld.html");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;Writer&nbsp;out&nbsp;=&nbsp;new&nbsp;FileWriter(file);
<br>
&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GenerationContext&nbsp;context&nbsp;=&nbsp;new&nbsp;SimpleGenerationContext(out,&nbsp;"\n",&nbsp;"&nbsp;&nbsp;");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;HelloBigWorld_JLoom().generateMain(context,&nbsp;"Big",&nbsp;"World");
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
&nbsp;&nbsp;&nbsp;&nbsp;finally&nbsp;{
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
&nbsp;&nbsp;}
<br>
}
<br>
</span>
</td>
</tr>
</table>
<br>
<br>
HelloBigWorld.java calls generateMain() in HelloBigWorld_JLoom.java
and writes the output to HelloBigWorld.html.
<br>
So finally, this is the produced output:
<br>
<br>
<table cellspacing="0" cellpadding="0">
<tr>
<td style="background-color:#7777ff; font-family:Verdana;">
<small> <b> HelloBigWorld.html </b> </small>
</td>
</tr>
<tr>
<td class="code">
<span class="code">

<br>
&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;
<br>
&lt;html&gt;
<br>
&lt;head&gt;
<br>
&lt;title&gt;&nbsp;Hello&nbsp;Big&nbsp;World&nbsp;Example&nbsp;&lt;/title&gt;
<br>
&lt;/head&gt;
<br>
&lt;body&gt;
<br>

<br>
&lt;h1&gt;
<br>
Hello&nbsp;Big&nbsp;World&nbsp;Example
<br>
&lt;/h1&gt;
<br>

<br>
&lt;b&gt;&nbsp;Hello&nbsp;Big&nbsp;World&nbsp;No.&nbsp;1&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>
&lt;b&gt;&nbsp;Hello&nbsp;Big&nbsp;World&nbsp;No.&nbsp;2&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>
&lt;b&gt;&nbsp;Hello&nbsp;Big&nbsp;World&nbsp;No.&nbsp;3&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>

<br>
&lt;br&gt;
<br>
now&nbsp;the&nbsp;scriptlet&nbsp;is&nbsp;executed...
<br>
&lt;br&gt;
<br>
&lt;br&gt;
<br>

<br>

<br>

<br>

<br>
&lt;h1&gt;
<br>
Hello&nbsp;Big&nbsp;World&nbsp;Example
<br>
&lt;/h1&gt;
<br>

<br>
&lt;b&gt;&nbsp;Hello&nbsp;END&nbsp;&nbsp;No.&nbsp;1&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>
&lt;b&gt;&nbsp;Hello&nbsp;END&nbsp;&nbsp;No.&nbsp;2&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>
&lt;b&gt;&nbsp;Hello&nbsp;END&nbsp;&nbsp;No.&nbsp;3&nbsp;!&nbsp;&lt;/b&gt;
<br>
&lt;br&gt;
<br>

<br>
&lt;br&gt;
<br>
now&nbsp;the&nbsp;scriptlet&nbsp;is&nbsp;executed...
<br>
&lt;br&gt;
<br>
&lt;br&gt;
<br>

<br>
&nbsp;&nbsp;
<br>

<br>
&lt;small&gt;&nbsp;generated&nbsp;sometime&nbsp;in&nbsp;2007&nbsp;&lt;/small&gt;
<br>

<br>
&lt;/body&gt;
<br>
&lt;/html&gt;
<br>
</span>
</td>
</tr>
</table>
<small>
<a href="HelloBigWorld.html"
   target="_blank"
   >Show the HTML page</a>
</small>
<br>
<br>
<p>
Ok, this was a stupid example just for demonstration purpose.
An example for real world usage are these JLoom webpages -
yes, this is what you are currently reading, more precisely the entire
content of the JLoom homepage is generated out of JLoom templates.
<br>
You can download these templates on Sourceforge.
You can also browse these templates online in the
<a href="homebrowser/indexPage_Browser.html"
   target="homebrowser"
   ><nobr>Homepage Template Browser</nobr></a>.
When you take a look at these templates -
each of it is extremely simple because of modularization and elimination of
redundant markup -
you will (hopefully) see, that JLoom can be very helpful for generating static HTML content.
Of course it is much more useful for dynamic content.
</p>
<p>
Another real world example is JLoom itself, because most template
commands are implemented as macros which are JLoom templates.
You can look at these macros to learn about JLoom templates,
you will find them in the sources in the package
net.gereon.jloom.macros.
</p>

<br>
<br>
<table width="100%">
<tr>
<td>
<div class="info">
<nobr>
&nbsp;
Generated by
<a href="http://jloom.sourceforge.net" target="_top"
   title="Goto JLoom Home"
   style="color:black; text-decoration:none;">
  <img src="/images/jloom_milli.png" border="0" alt="JLoom Logo"
       style="margin-right:2;vertical-align:sub;"/>JLoom
</a>
November 29, 2007
&nbsp; &#149; &nbsp;
You can view the template here:

<a href="homebrowser/HelloExamplesPage_Browser.html"
   target="homebrowser"
   title="Show in Template Browser"
   >HelloExamplesPage</a>
&nbsp;
</nobr>
</div>
</td>
<td width="100%">
</td>
<td align="right">
<a href="http://sourceforge.net" target="_top" title="Goto Sourceforge"
   ><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=160273&amp;type=1"
     width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
</td>
</tr>
</table>
</td>

</tr>
</table>
</body>
</html>



  Generated by JLoom LogoJLoom November 29, 2007   •   You can view the template here: HomeBrowserView  
SourceForge.net Logo