From bc4d066c11c618e41189867eaf7807c43288a599 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Thu, 26 Apr 2001 16:10:48 +0000 Subject: [PATCH] modularize site.vsl, add a first cut at a FAQ with a stylesheet of its own. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268969 13f79535-47bb-0310-9956-ffa450edef68 --- webpage/build.xml | 10 +- webpage/docs/antnews.html | 339 +++--- webpage/docs/external.html | 1427 ++++++++++++------------ webpage/docs/faq.html | 313 ++++++ webpage/docs/index.html | 433 ++++--- webpage/velocity.properties | 2 + webpage/xdocs/faq.xml | 74 ++ webpage/xdocs/stylesheets/faq.vsl | 117 ++ webpage/xdocs/stylesheets/site.vsl | 289 +---- webpage/xdocs/stylesheets/templates.vm | 196 ++++ 10 files changed, 1874 insertions(+), 1326 deletions(-) create mode 100644 webpage/docs/faq.html create mode 100644 webpage/velocity.properties create mode 100644 webpage/xdocs/faq.xml create mode 100644 webpage/xdocs/stylesheets/faq.vsl create mode 100644 webpage/xdocs/stylesheets/templates.vm diff --git a/webpage/build.xml b/webpage/build.xml index fe3dfc253..c98637480 100644 --- a/webpage/build.xml +++ b/webpage/build.xml @@ -33,12 +33,20 @@ + + + - - - - - - - - - - The Jakarta Site - Ant News - - - - - - - - -
- -
- - - - - - - + + + + + +
-
-
-

Ant

- -

Jakarta

- -

Download

- -

Get Involved

- -

Other Projects

- -

Misc

- -
- - - +
- - Ant 2.0 Requirements - -
-
-

Ant has been in use for quite some time and has been used in ways never conceived when it + + + + + + + The Jakarta Site - Ant News + + + + + + + + +
+ +
+ + + + + + + - - - - - -
+
+
+

Ant

+ +

Jakarta

+ +

Download

+ +

Get Involved

+ +

Other Projects

+ +

Misc

+ +
+ + + -
+ + Ant 2.0 Requirements + +
+
+

Ant has been in use for quite some time and has been used in ways never conceived when it was originally written. While Ant 1.x has continued to sucessfully evolve and grow, there are a number of limitations and inconsistencies that are now apparent and which need to be addressed.

-

+

As we continue to evolve and enhance Ant 1.x, it is now time to define what Ant 2.0 will encompass. Ant 2.0 will be a major rearchitecting of Ant. It has a number of goals including:

    @@ -153,7 +150,7 @@ It is expected that Ant 2.0 will break Ant 1.x based build files. The intention is to make this the last time that will happen.

    -

    +

    To advance the definition of Ant, user requirements are now being accepted on the Ant-Dev mailing list. Any requirement will be accepted for consideration. The requirements are being collected into a document which is available @@ -161,68 +158,58 @@ until March 21st, 2001. At that time, each requirement will be discussed for inclusion in an Ant 2.0 requirement document.

    -

    +

    For your reference some of the goals which have shaped the development of Ant 1.x are available here. These continue to be relevant to Ant 2.0.

    -

    +

    If you want to shape the future of Ant, join the Ant-Dev mailing list and contribute your ideas.

    -
-
- - - +
- - Ant 1.3 Released - -
-
-

+

+
+ + + -
+ + Ant 1.3 Released + +
+
+

Ant 1.3 has been released after going through three betas. Thanks to everyone who took the time to test the beta and report bugs and enhancements.

-

You can download the release from +

You can download the release from here. Both source and binary releases are available in zip, tarball and RPM formats.

-

Please report all bugs using the +

Please report all bugs using the Apache Bugzilla

-
-
-
-
-
-
- Copyright © 1999-2001, Apache Software Foundation -
-
- - +

+
+
+
+
+
+ Copyright © 1999-2001, Apache Software Foundation +
+
+ + - - - - - - - - - - diff --git a/webpage/docs/external.html b/webpage/docs/external.html index 382764d56..1a0fc0c60 100644 --- a/webpage/docs/external.html +++ b/webpage/docs/external.html @@ -4,716 +4,767 @@ - - - - - - - - - - The Jakarta Site - External Resources - - - - - - - - -
- -
- - - - - - - + - - - -
-
-
-

Ant

- -

Jakarta

- -

Download

- -

Get Involved

- -

Other Projects

- -

Misc

- -
- - - +
- - External Resources for Ant - -
-
-

This page lists external resources for Ant: tasks, IDE + + + + + + + The Jakarta Site - External Resources + + + + + + + + +
+ +
+ + + + + + + +
+
+
+

Ant

+ +

Jakarta

+ +

Download

+ +

Get Involved

+ +

Other Projects

+ +

Misc

+ +
+ + + -
+ + External Resources for Ant + +
+
+

This page lists external resources for Ant: tasks, IDE integration tools, loggers, you name it. If you've written something that should be included, please post all relevant information to one of the mailing lists.

-

Nothing listed here is directly supported by the Ant +

Nothing listed here is directly supported by the Ant developers, if you encounter any problems with them, please use the contact information.

-
-
- - - - +
- - Tasks - -
-
- - - +
- - AJC - -
-
-

AspectJ is an +

+
+ + + -
+ + Tasks + +
+
+ + + -
+ + AJC + +
+
+

AspectJ is an aspect-oriented extension to Java. This task compiles a source tree using the AspectJ compiler -- AJC.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.3 - -
- - URL: - - - - http://aspectj.org/dl - -
- - Contact: - - - - support@aspectj.org - -
- - License: - - - - Apache Software License - -
-
-
- - - +
- - Anakia - -
-
-

Actually, Anakia is more than just an Ant task, it is a an + + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.3 + +
+ + URL: + + + + http://aspectj.org/dl + +
+ + Contact: + + + + support@aspectj.org + +
+ + License: + + + + Apache Software License + +
+

+
+ + + -
+ + Anakia + +
+
+

Actually, Anakia is more than just an Ant task, it is a an XML transformation tool based on JDOM, Velocity and Ant.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.2 and 1.3 - -
- - URL: - - - - http://jakarta.apache.org/velocity/anakia.html - -
- - Contact: - - - - Velocity mailing lists - -
- - License: - - - - Apache Software License - -
-
-
- - - +
- - Configure - -
-
-

Recursive build support (call ant on every package level, + + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.2 and 1.3 + +
+ + URL: + + + + http://jakarta.apache.org/velocity/anakia.html + +
+ + Contact: + + + + Velocity mailing lists + +
+ + License: + + + + Apache Software License + +
+

+
+ + + -
+ + Configure + +
+
+

Recursive build support (call ant on every package level, and only build files in that package or in that package and everything below) with seperation of source and output.

-

The task generates build files in any subdirectory (except +

The task generates build files in any subdirectory (except for CVS-directories) for you. Only place one build.xml file in the top and call target 'setup' or 'rescan'.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.2 and 1.3 - -
- - URL: - - - - http://www.dsdelft.nl/~lemval/ant/ - -
- - Contact: - - - - M.J.P. van Leeuwen - -
- - License: - - - - License derived from Apache Software License - -
-
-
- - - +
- - J2ME Ant Tasks - -
-
-

A set of tasks to help build Java 2 Platform, Micro + + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.2 and 1.3 + +
+ + URL: + + + + http://www.dsdelft.nl/~lemval/ant/ + +
+ + Contact: + + + + M.J.P. van Leeuwen + +
+ + License: + + + + License derived from Apache Software License + +
+

+
+ + + -
+ + J2ME Ant Tasks + +
+
+

A set of tasks to help build Java 2 Platform, Micro Edition (J2ME) applications.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.3 - -
- - URL: - - - - http://www.dribin.org/dave/j2me_ant/ - -
- - Contact: - - - - Dave Dribin - -
- - License: - - - - Apache Software License - -
-
-
-
-
- - - -
- - IDE/Editor Integration - -
-
- - - -
- - AntRunner - -
-
-

An OpenTool that integrates Ant into the JBuilder IDE.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.2 and 1.3 - -
- - URL: - - - - http://www.dieter-bogdoll.de/java/AntRunner/ - -
- - Contact: - - - - Dieter Bogdoll - -
- - License: - - - - GNU General Public License - -
-
-
- - - -
- - AntWork - -
-
-

A plugin that integrates Ant into the Jext editor.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.2 and 1.3 - -
- - URL: - - - - ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip - -
- - Contact: - - - - Klaus Hartlage - -
- - License: - - - - GNU General Public License - -
-
-
- - - -
- - NetBeans / Forte for Java - -
-
-

A module that integrates Ant into the NetBeans or Forte for Java IDEs.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - bundles Ant 1.3 - -
- - URL: - - - - http://ant.netbeans.org/ - -
- - Contact: - - - - nbdev@netbeans.org - -
- - License: - - - - Sun Public License - -
-
-
-
-
- - - +
- - Other - -
-
- - - +
- - CruiseControl - -
-
-

CruiseControl is a tool for setting up a continuous build + + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.3 + +
+ + URL: + + + + http://www.dribin.org/dave/j2me_ant/ + +
+ + Contact: + + + + Dave Dribin + +
+ + License: + + + + Apache Software License + +
+

+
+
+
+ + + +
+ + IDE/Editor Integration + +
+
+ + + +
+ + AntRunner + +
+
+

An OpenTool that integrates Ant into the JBuilder IDE.

+ + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.2 and 1.3 + +
+ + URL: + + + + http://www.dieter-bogdoll.de/java/AntRunner/ + +
+ + Contact: + + + + Dieter Bogdoll + +
+ + License: + + + + GNU General Public License + +
+
+
+ + + +
+ + AntWork + +
+
+

A plugin that integrates Ant into the Jext editor.

+ + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.2 and 1.3 + +
+ + URL: + + + + ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip + +
+ + Contact: + + + + Klaus Hartlage + +
+ + License: + + + + GNU General Public License + +
+
+
+ + + +
+ + NetBeans / Forte for Java + +
+
+

A module that integrates Ant into the NetBeans or Forte for Java IDEs.

+ + + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + bundles Ant 1.3 + +
+ + URL: + + + + http://ant.netbeans.org/ + +
+ + Contact: + + + + nbdev@netbeans.org + +
+ + License: + + + + Sun Public License + +
+
+
+
+
+ + + -
+ + Other + +
+
+ + + -
+ + CruiseControl + +
+
+

CruiseControl is a tool for setting up a continuous build process. CruiseControl provides an Ant wrapper and a set of tasks to automate the checkout/build/test cycle. CruiseControl also comes bundled with a servlet for viewing the status of the current build, as well as previous build results.

- - - - - - - - - - - - - - - - - -
- - Compatibility: - - - - Ant 1.2 and 1.3 - -
- - URL: - - - - http://cruisecontrol.sourceforge.net/ - -
- - Contact: - - - - Project Mailing Lists and Administrators - -
- - License: - - - - GNU General Public License - -
-
-
-
-
-
+ + + + + + + + + + + + + + + + +
+ + Compatibility: + + + + Ant 1.2 and 1.3 + +
+ + URL: + + + + http://cruisecontrol.sourceforge.net/ + +
+ + Contact: + + + + Project Mailing Lists and Administrators + +
+ + License: + + + + GNU General Public License + +
+ +
+

+
+
-
-
-
- Copyright © 1999-2001, Apache Software Foundation -
-
- - + + +
+ + +
+ Copyright © 1999-2001, Apache Software Foundation +
+ + + + - - - - - - - - - - diff --git a/webpage/docs/faq.html b/webpage/docs/faq.html new file mode 100644 index 000000000..444a6ed4c --- /dev/null +++ b/webpage/docs/faq.html @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + The Jakarta Site - Frequently Asked Questions + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+
+
+

Ant

+ +

Jakarta

+ +

Download

+ +

Get Involved

+ +

Other Projects

+ +

Misc

+ +
+ + + +
+ + Questions + +
+
+ + + +
+ + Installation + +
+
+ +
+
+ + + +
+ + Advanced issues + +
+
+ +
+
+
+
+ + + + +
+ + Answers + +
+
+ + + + +
+ + + I get checksum errors when I try to extract the + tar.gz distribution file. Why? + + +
+
+

Ant'distibution contains file names which are longer + than 100 characters, which is not supported by the standard + tar file format. Several different implementations of tar use + different and incompatible ways to work around this + restriction.

+

Ant' <tar> task can create tar archives that use + the GNU tar extension, and this has been used when putting + together the distribution. If you are using a different + version of tar (for example the one shipping with Solaris), + you cannot use it to extract the archive.

+

The solution is to either install GNU tar, which can be + found here + or use the zip archive instead (you can extract it using + jar cf).

+
+
+
+ + + + +
+ + + How do I include an XML snippet in my build file? + + +
+
+

You can use XML's way of including external files and let + the parser do the job for Ant:

+
+ + + + + + + + + + + + + + + + +
+<?xml version="1.0"?>
+
+<!DOCTYPE project [
+    <!ENTITY common SYSTEM "file:./common.xml">
+]>
+
+<project name="test" default="test" basedir=".">
+
+  <target name="setup">
+    ...
+  </target>
+
+  &common;
+
+  ...
+
+</project>
+
+
+

will literally include the contents of common.xml where + you've placed the &common; entity.

+

In combination with a DTD this would look like this:

+
+ + + + + + + + + + + + + + + + +
+<!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "file:./ant.dtd" [
+   <!ENTITY include SYSTEM "file:./header.xml">
+]>
+
+
+
+
+
+
+
+
+
+
+
+ Copyright © 1999-2001, Apache Software Foundation +
+
+ + + + + + + + + diff --git a/webpage/docs/index.html b/webpage/docs/index.html index 93af2a246..6303a8299 100644 --- a/webpage/docs/index.html +++ b/webpage/docs/index.html @@ -4,141 +4,138 @@ - - - - - - - - - - The Jakarta Site - Ant - - - - - - - - -
- -
- - - - - - - + +
-
-
-

Ant

- -

Jakarta

- -

Download

- -

Get Involved

- -

Other Projects

- -

Misc

- -
- - - + - - - -
- - Ant - -
-
-

+ + + + + + + The Jakarta Site - Ant + + + + + + + + +
+ +
+ + + + + + + - + + +
+
+
+

Ant

+ +

Jakarta

+ +

Download

+ +

Get Involved

+ +

Other Projects

+ +

Misc

+ +
+ + + -
+ + Ant + +
+
+

Ant is a Java based build tool. In theory it is kind of like make without make's wrinkles.

-

+

Why another build tool when there is already make, gnumake, nmake, jam, and others? Because all of those tools have limitations that Ant's original author couldn't live with when developing software across multiple platforms. Make-like @@ -148,21 +145,21 @@ can easily extend these tools by using or writing any program for the OS that you are working on. However, this also means that you limit yourself to the OS, or at least the OS type such as Unix, that you are working on.

-

+

Makefiles are inherently evil as well. Anybody who has worked on them for any time has run into the dreaded tab problem. "Is my command not executing because I have a space in front of my tab!!!" said the original author of Ant way too many times. Tools like Jam took care of this to a great degree, but still use yet another format to use and remember.

-

+

Ant is different. Instead of a model where it is extended with shell based commands, it is extended using Java classes. Instead of writing shell commands, the configuration files are XML based calling out a target tree where various tasks get executed. Each task is run by an object which implements a particular Task interface.

-

+

Granted, this removes some of the expressive power that is inherent by being able to construct a shell command such as `find . -name foo -exec rm {}` but it gives you the ability to be cross platform. To work anywhere and everywhere. And @@ -170,39 +167,39 @@ hey, if you really need to execute a shell command, Ant has an exec rule that allows different commands to be executed based on the OS that it is executing on.

-
-
- - - +
- - Documentation - -
-
-

+

+
+ + + -
+ + Documentation + +
+
+

You can view the documentation for the most recent release online

-

+

Comprehensive documentation is included in the source and binary distribtions.

-
-
- - - +
- - Latest Release - -
-
-

+

+
+ + + -
+ + Latest Release + +
+
+

You can download the latest release:

-
-
- - - +
- - Nightly Builds - -
-
-

+

+
+ + + -
+ + Nightly Builds + +
+
+

If you wish to use the latest Ant features, you can try downloading a nightly build from here

-
-
- - - +
- - Towards Ant2 - -
-
-

+

+
+ + + -
+ + Towards Ant2 + +
+
+

We are currently collecting feature requests for Ant2. Please read the latest Ant news for more details.

-
-
- - - +
- - Get Involved - -
-
-
    +
+
+ + + -
+ + Get Involved + +
+
+ -
-
-
+

-
-
-
- Copyright © 1999-2001, Apache Software Foundation -
-
- - + +
+
+
+
+ Copyright © 1999-2001, Apache Software Foundation +
+
+ + - - - - - - - - - - diff --git a/webpage/velocity.properties b/webpage/velocity.properties new file mode 100644 index 000000000..7327d96fb --- /dev/null +++ b/webpage/velocity.properties @@ -0,0 +1,2 @@ +file.resource.loader.path=xdocs/stylesheets +velocimacro.library=templates.vm diff --git a/webpage/xdocs/faq.xml b/webpage/xdocs/faq.xml new file mode 100644 index 000000000..5280cfec2 --- /dev/null +++ b/webpage/xdocs/faq.xml @@ -0,0 +1,74 @@ + + + + + Stefan Bodewig + Frequently Asked Questions + + + + + I get checksum errors when I try to extract the + tar.gz distribution file. Why? + +

Ant'distibution contains file names which are longer + than 100 characters, which is not supported by the standard + tar file format. Several different implementations of tar use + different and incompatible ways to work around this + restriction.

+ +

Ant' <tar> task can create tar archives that use + the GNU tar extension, and this has been used when putting + together the distribution. If you are using a different + version of tar (for example the one shipping with Solaris), + you cannot use it to extract the archive.

+ +

The solution is to either install GNU tar, which can be + found here + or use the zip archive instead (you can extract it using + jar cf).

+
+
+
+ + + + How do I include an XML snippet in my build file? + +

You can use XML's way of including external files and let + the parser do the job for Ant:

+ + + + +]> + + + + + ... + + + &common; + + ... + + +]]> + +

will literally include the contents of common.xml where + you've placed the &common; entity.

+ +

In combination with a DTD this would look like this:

+ + +]> +]]> +
+
+
+
\ No newline at end of file diff --git a/webpage/xdocs/stylesheets/faq.vsl b/webpage/xdocs/stylesheets/faq.vsl new file mode 100644 index 000000000..7d5e4fd84 --- /dev/null +++ b/webpage/xdocs/stylesheets/faq.vsl @@ -0,0 +1,117 @@ + + + + + ## Defined variables + #set ($bodybg = "#ffffff") + #set ($bodyfg = "#000000") + #set ($bodylink = "#525D76") + #set ($bannerbg = "#525D76") + #set ($bannerfg = "#ffffff") + #set ($subbannerbg = "#828DA6") + #set ($subbannerfg = "#ffffff") + #set ($tablethbg = "#039acc") + #set ($tabletdbg = "#a0ddf0") + + +#faqs() + + +## This is where the FAQ specific macro's live + +#macro (toc $section) + + + +
+ + $section.getAttributeValue("title") + +
+
+
    + #foreach ($faq in $section.getChildren("faq") ) + #subtoc ($faq) + #end +
+
+
+#end + +#macro (subtoc $faq) + #set ($id = $faq.getAttributeValue("id")) +
  • + $xmlout.outputString($faq.getChild("question")) +
  • +#end + +#macro (answers $section) + #foreach ($faq in $section.getChildren("faq") ) + #faq ($faq) + #end +#end + +#macro (faq $faq) + #set ($id = $faq.getAttributeValue("id")) + + + + +
    + + + $xmlout.outputString($faq.getChild("question")) + + +
    +
    + #foreach ($item in $faq.getChild("answer").getChildren()) + #if ($item.getName().equals("img")) + #image ($item) + #elseif ($item.getName().equals("source")) + #source ($item) + #elseif ($item.getName().equals("table")) + #table ($item) + #else + $xmlout.outputString($item) + #end + #end +
    +
    +
    +#end + +#macro (faqs) + #header() + + + +
    + + Questions + +
    +
    + #set ($allFaqSections = $root.getChildren("faqsection")) + #foreach ( $faqSection in $allFaqSections ) + #toc ($faqSection) + #end +
    +
    + + + + +
    + + Answers + +
    +
    + #foreach ( $faqSection in $allFaqSections ) + #answers ($faqSection) + #end +
    +
    + #footer() +#end diff --git a/webpage/xdocs/stylesheets/site.vsl b/webpage/xdocs/stylesheets/site.vsl index e5e881b23..0e06c605e 100644 --- a/webpage/xdocs/stylesheets/site.vsl +++ b/webpage/xdocs/stylesheets/site.vsl @@ -17,252 +17,65 @@ #document() -## This is where the macro's live - -#macro ( table $table) - - #foreach ( $items in $table.getChildren() ) - #if ($items.getName().equals("tr")) - #tr ($items) - #end - #end -
    -#end - -#macro ( tr $tr) - - #foreach ( $items in $tr.getChildren() ) - #if ($items.getName().equals("td")) - #td ($items) - #elseif ($items.getName().equals("th")) - #th ($items) - #end - #end - -#end - -#macro ( td $value) -#if ($value.getAttributeValue("colspan")) -#set ($colspan = $value.getAttributeValue("colspan")) -#end -#if ($value.getAttributeValue("rowspan")) -#set ($rowspan = $value.getAttributeValue("rowspan")) -#end - - - #if ($value.getText().length() != 0 || $value.hasChildren()) - $xmlout.outputString($value, true) - #else -   - #end - - -#end - -#macro ( th $value) -#if ($value.getAttributeValue("colspan")) -#set ($colspan = $value.getAttributeValue("colspan")) -#end -#if ($value.getAttributeValue("rowspan")) -#set ($rowspan = $value.getAttributeValue("rowspan")) -#end - - - #if ($value.getText().length() != 0 || $value.hasChildren()) - $xmlout.outputString($value, true) - #else -   - #end - - -#end - -#macro ( projectanchor $name $value ) -#if ($value.startsWith("http://")) - $name -#elseif ($value.startsWith("/site")) - $name -#else - $name -#end -#end - -#macro ( metaauthor $author $email ) - - -#end - -#macro ( image $value ) -#if ($value.getAttributeValue("width")) -#set ($width=$value.getAttributeValue("width")) -#end -#if ($value.getAttributeValue("height")) -#set ($height=$value.getAttributeValue("height")) -#end -#if ($value.getAttributeValue("align")) -#set ($align=$value.getAttributeValue("align")) -#end - -#end - -#macro ( source $value) -
    - - - - - - - - - - - - - - - - -
    $escape.getText($value.getText())
    -
    -#end +## This is where the common page macro's live #macro ( subsection $subsection) - - - +
    - - $subsection.getAttributeValue("name") - -
    -
    - #foreach ( $items in $subsection.getChildren() ) - #if ($items.getName().equals("img")) - #image ($items) - #elseif ($items.getName().equals("source")) - #source ($items) - #elseif ($items.getName().equals("table")) - #table ($items) - #else - $xmlout.outputString($items) - #end + + + -
    + + $subsection.getAttributeValue("name") + +
    +
    + #foreach ( $items in $subsection.getChildren() ) + #if ($items.getName().equals("img")) + #image ($items) + #elseif ($items.getName().equals("source")) + #source ($items) + #elseif ($items.getName().equals("table")) + #table ($items) + #else + $xmlout.outputString($items) #end -
    -
    + #end +
    +
    #end #macro ( section $section) - - - -
    - - $section.getAttributeValue("name") - -
    -
    - #foreach ( $items in $section.getChildren() ) - #if ($items.getName().equals("img")) - #image ($items) - #elseif ($items.getName().equals("source")) - #source ($items) - #elseif ($items.getName().equals("table")) - #table ($items) - #elseif ($items.getName().equals("subsection")) - #subsection ($items) - #else - $xmlout.outputString($items) - #end - #end -
    -
    -#end - -#macro ( makeProject ) - #set ($menus = $project.getChild("body").getChildren("menu")) - #foreach ( $menu in $menus ) -

    $menu.getAttributeValue("name")

    -