Merge "Installation instructions"
diff --git a/_projectCommon.php b/_projectCommon.php
index a06397a..fa01198 100755
--- a/_projectCommon.php
+++ b/_projectCommon.php
@@ -25,5 +25,6 @@
$Nav->addCustomNav("FAQ", "http://wiki.eclipse.org/Henshin_FAQ", "_blank", 2);
$Nav->addCustomNav("Javadoc", "http://download.eclipse.org/modeling/emft/henshin/javadoc/nightly/", "_blank", 2);
$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/Henshin", "_blank", 2);
+$Nav->addCustomNav("Hudson", "https://hudson.eclipse.org/henshin/", "_blank", 2);
?>
diff --git a/description.html b/description.html
index d2b566b..afbf893 100755
--- a/description.html
+++ b/description.html
@@ -13,9 +13,9 @@
</style>
<div style="margin-top: 30px; margin-bottom:30px;">
-<span style="background: #7036d0; padding: 10px; font-family: Calibri, Verdana; font-weight: bold; display: inline-block;font-size: 13pt; width: 120px; text-align:center;"> <a href="install.php" class="lnk">INSTALL</a> </span>
-<span style="background: #7036d0; padding: 10px; font-family: Calibri, Verdana; font-weight: bold; display: inline-block;font-size: 13pt; width: 120px; text-align:center;"> <a href="get-involved.php" class="lnk">GET INVOLVED</a> </span>
-<span style="background: #7036d0; padding: 10px; font-family: Calibri, Verdana; font-weight: bold; display: inline-block;font-size: 13pt; width: 120px; text-align:center;"> <a href="https://twitter.com/henshintool" target="_blank" class="lnk">FOLLOW US</a> </span>
+<span style="background: #7036d0; padding: 10px; font-family: Calibri, Verdana; font-weight: bold; display: inline-block;font-size: 12pt; width: 120px; text-align:center;"> <a href="install.php" class="lnk">INSTALL</a> </span>
+<span style="background: #7036d0; padding: 10px; font-family: Calibri, Verdana; font-weight: bold; display: inline-block;font-size: 12pt; width: 120px; text-align:center;"> <a href="get-involved.php" class="lnk">GET INVOLVED</a> </span>
+<span style="background: #7036d0; padding: 10px; font-family: Calibri, Verdana; font-weight: bold; display: inline-block;font-size: 12pt; width: 120px; text-align:center;"> <a href="https://twitter.com/henshintool" target="_blank" class="lnk">FOLLOW US</a> </span>
</div>
<h2>Features</h2>
diff --git a/examples/apibasics/apibasics-example.zip b/examples/apibasics/apibasics-example.zip
new file mode 100644
index 0000000..093676c
--- /dev/null
+++ b/examples/apibasics/apibasics-example.zip
Binary files differ
diff --git a/examples/bank/index.html b/examples/bank/index.html
index 048cbed..d13e2c3 100644
--- a/examples/bank/index.html
+++ b/examples/bank/index.html
@@ -85,10 +85,25 @@
To create a new transformation rule, use the <i>Rule</i> tool
in the palette. In the top of every rule, its name and parameters
are specified (and some optional information which we do not consider
-here). In the below example, we write <i>createAccount(client, accountId)</i>,
+here).
+
+<p>
+<b>Parameters:</b>
+In the below example, we write <i>createAccount(in client:EString, in accountId:EInt)</i>,
where the <i>client</i> parameter is the name of the client for whom
an account should be created, and <i>accountId</i> is the ID to be used
for the new account.
+A parameter has a kind, which can be either
+<i>in</i>, <i>out</i>, <i>inout</i>, or <i>var</i>.
+An <i>in</i> parameter is passed into the rule from the
+rule's context.
+An <i>out</i> parameter is passed out of the rule into the
+rule's context.
+An <i>inout</i> parameter is both passed both into and out of the rule, to and from its context.
+A <i>var</i> parameter or <i>variable</i> is used internally inside a rule only.
+Optionally, a parameter also has a type, like <i>EString</i> and <i>EInt</i> in the example.
+You can change the kind, type and name of a parameter simply by typing this information into the bar at the top of the rule.
+
</p>
<p>
@@ -159,7 +174,7 @@
positive. If the conditions don not hold, the rule can not be applied.
The conditions are evaluated by the Oracle Nashorn JavaScript Engine.
Note also that <i>x</i> and <i>y</i> have to be specified as
-parameters. When executing this rule, these parameters will
+<i>var</i> parameters. When executing this rule, these parameters will
be automatically initialized by the found match.
</p>
diff --git a/examples/index.html b/examples/index.html
index 56088ac..def4889 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -3,7 +3,7 @@
<p>
This page lists documented examples of Henshin transformations.
-All examples can be found in the <a href="http://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.henshin/trunk/plugins/org.eclipse.emf.henshin.examples/">Henshin examples plug-in</a>.
+All examples can be found in the <a href="https://git.eclipse.org/c/henshin/org.eclipse.emft.henshin.git/tree/plugins/org.eclipse.emf.henshin.examples">Henshin examples plug-in</a>.
</p>
<h2>Endogenous Transformations</h2>
@@ -22,6 +22,10 @@
<a href="examples.php?example=sierpinski">Sierpinski Triangle</a>:
A simple example for benchmarking the interpreter.
</li>
+<li>
+<a href="examples.php?example=universitycourses">University Courses</a>:
+An example showing the capabilities and usage of Units.
+</li>
</ol>
diff --git a/examples/universitycourses/index.html b/examples/universitycourses/index.html
new file mode 100644
index 0000000..e544e88
--- /dev/null
+++ b/examples/universitycourses/index.html
@@ -0,0 +1,124 @@
+<h1>Henshin Example: University Courses</h1>
+
+<p>
+<small><i>contributed by Benjamin Heidelmeier and Gabriele Taentzer</i></small>
+</p>
+
+<p>
+<i>PLEASE NOTE: This example does not work reliably with the Henshin 1.4 release. Try a newer release or the current nightly build.</i>
+The purpose of this example is to assign university courses to lecturers and students while avoiding time conflicts.
+It is also meant to be an accessible example for the usage of <a href="https://wiki.eclipse.org/Henshin/Units">Units</a>.
+This example wants to showcase as many units as possible.
+Therefore please pardon that some units' usage may seem unnecessarily complicated.
+The transformation model, example input models and source code can be found <a href="http://git.eclipse.org/c/henshin/org.eclipse.emft.henshin.git/tree/plugins/org.eclipse.emf.henshin.examples/src/org/eclipse/emf/henshin/examples/universitycourses">here</a>.
+</p>
+
+<h2>Metamodel</h2>
+
+<p>
+<a href="examples/universitycourses/universityCourses-model.png"><img src="examples/universitycourses/universityCourses-model.png" align="right" width="250" /></a>
+The metamodel describes a <i>University</i> which contains <i>Courses</i> and <i>Persons</i>..
+A <i>Course</i> has a name, belongs to a university and can be of two types.
+An <i>OfferedCourse</i> represents a course which can be staged in the next lecture period.
+A <i>ScheduledCourse</i> represents a course which is staged in the next lecture period with the hour it is starting.
+For the sake of simplicity, we consider one generic weekday only, moreover, every course duration is one hour.
+Furthermore it is required to have at least one lecturer.
+A <i>Lecturer</i> is a person who can teach offered courses and teaches scheduled courses.
+A <i>Student</i> is a person who is interested in courses.
+The <i>Temp</i> object contained in a university is defined to save transient information of course scheduling.</br>
+The metamodel is defined in the file <i>universityCourses.ecore</i>.
+</p>
+
+<h3>Instance Model Restrictions</h3>
+
+<p>
+Instance models - which should be transformed with the transformation rules below - have to meet the following requirements:
+<ul>
+ <li>The instance model should contain at least a <i>University</i> object.</li>
+ <li>The name of a <i>Course</i> is considered to be unique. There must not be any pair of <i>OfferedCourse/ScheduledCourse</i> objects which share the same name.</li>
+ <li>There must not be any time conflicts for a <i>Lecturer</i> or <i>Student</i> and their associated <i>ScheduledCourse</i>s.</li>
+</ul>
+</p>
+
+<h2>Henshin Rules and Units</h2>
+
+<a href="examples/universitycourses/universityCourses-planAllCoursesOrFail.png"><img src="examples/universitycourses/universityCourses-planAllCoursesOrFail.png" /></a>
+
+<p>
+The <i>SequentialUnit</i> <b>planAllCoursesOrFail</b> (<i>strict=true</i>, <i>rollback=false</i>) executes the rule <i>existsUnscheduledInterestingCourse</i> first.
+The rule <b>existsUnscheduledInterestingCourse</b> checks the existence of an <i>OfferedCourse</i> having an interested <i>Student</i> as well as a <i>Lecturer</i> capable of teaching the <i>Course</i>.
+If this application is successful, <i>planCourseOrIncrement</i> is executed.
+</p>
+
+<p>
+The <i>ConditionalUnit</i> <b>planCourseOrIncrement</b> tries to apply the sub-unit <i>planOneCourse</i>.
+If it is successfully applicable, <i>planCourseOrIncrement</i> basically calls itself recursively to attempt <i>planOneCourse</i> again by calling the <i>ConditionalUnit</i> <b>planUnscheduledInterestingCourses</b>.
+This unit uses <i>existsUnscheduledInterestingCourse</i> so that the application terminates as soon as all interesting courses are scheduled.
+In contrast to the very similar (<i>strict</i>) <i>SequentialUnit</i> <i>planAllCoursesOrFail</i>, this <i>ConditionalUnit</i> does not fail if no unscheduled courses exist.
+If it failed after all courses have been scheduled, the previous execution of <i>planCourseOrIncrement</i> would also be unsuccessful and would lead to the rescission of the last <i>planOneCourse</i> execution.
+In consequence there would always remain one unscheduled but interesting course after the successful application of <i>planAllCoursesOrFail</i>.
+Therefore the <i>ConditionalUnit</i> <i>planUnscheduledInterestingCourses</i> - which never fails after an unsuccessful application of its <i>if</i>-sub-unit - is used inside <i>planCourseOrIncrement</i>.
+</p>
+
+<p>
+<a href="examples/universitycourses/universityCourses-incrementHour.png"><img src="examples/universitycourses/universityCourses-incrementHour.png" /></a>
+</p>
+
+<p>
+If <i>planOneCourse</i> is not applicable, the <i>ConditionalUnit</i> <b>incrementIfPossible</b> first checks whether incrementing the current hour is possible by applying the rule <b>incrementPossible</b>.
+After a successful application of <i>incrementPossible</i> the <i>SequentialUnit</i> <i>incrementHour</i> is applied in the <i>SequentialUnit</i> <b>incrementAndContinue</b>.
+The unit <b>incrementHour</b> raises the passed-in <i>hour</i> parameter by one and returns the result via the parameter <i>oneMore</i></i>.
+After successfully incrementing the hour value <i>planCourseOrIncrement</i> is called again.
+In the end <i>planCourseOrIncrement</i> should only terminate with the maximum number of courses (with prospective students) scheduled between the starting time and the end of the day.
+</p>
+
+<p>
+<a href="examples/universitycourses/universityCourses-planOneCourse.png"><img src="examples/universitycourses/universityCourses-planOneCourse.png" align="right" width="350" /></a>
+
+<b>planOneCourse</b> is a <i>SequentialUnit</i> with the flags <i>strict=true</i> and <i>rollback=true</i>.
+First, it schedules a course which prevents time conflicts for lecturers by fixing the time using the rule <i>scheduleOfferedCourse</i>.
+Furthermore it attempts to associate all interested students without time conflicts with the scheduled course.
+Afterwards <i>planOneCourse</i> checks the absence of interested students with time conflicts by applying the rule <i>isScheduledCourseConflictFree</i>.
+At last, the according <i>OfferedCourse</i> is removed by an application of <i>removeOfferedCourseAfterScheduling</i>.
+This unit may fail in <i>scheduleOfferedCourse</i> if there is no lecturer associable without time conflict or in <i>isScheduledCourseConflictFree</i> if there is an interested student with time conflict.
+Due to the flag <i>strict=true</i>, the <i>SequentialUnit</i> application stopps at the failed rule and due to the flag <i>rollback=true</i> it reverts all applied transformations.
+This means that <i>planOneCourse</i> is applied only if there is no time conflict for students or lecturers.
+</p>
+
+<p>
+The rule <b>scheduleOfferedCourse</b> tries to find an <i>OfferedCourse</i> in which at least one <i>Student</i> is interested in and which can be taught by at least one <i>Lecturer</i>.
+The <i>in</i>-parameter <i>hour</i> defines the hour to which the course can be scheduled.
+The <i>Lecturer</i> must not teach another <i>ScheduledCourse</i> at the same time (here called <i>startingHour</i>).
+If those requirements are met, a new <i>ScheduledCourse</i> with the same name as the <i>OfferedCourse</i> is created at the given time.
+At the same time the rule attempts to move students to the ScheduledCourse.
+If a <i>Student</i> is not interested in another conflicting <i>ScheduledCourse</i> he/she will get associated with the <i>ScheduledCourse</i> instead of the <i>OfferedCourse</i>.
+</p>
+
+<p>
+The rule <b>isScheduledCourseConflictFree</b> checks whether there is no student interested in an <i>OfferedCourse</i> with corresponding <i>ScheduledCourse</i> and who is interested in a <i>ScheduledCourse</i> at the same time.
+This rule basically detects <i>Student</i>s who cannot be treated by <i>moveStudentsToScheduledCourse</i>.
+The rule <b>removeOfferedCourseAfterScheduling</b> (<i>checkDangling=false</i>) deletes an <i>OfferedCourse</i> that is scheduled.
+</p>
+
+<p>
+<a href="examples/universitycourses/universityCourses-manageCourses.png"><img src="examples/universitycourses/universityCourses-manageCourses.png" align="right" /></a>
+The starting point for the application of this example is the <i>IteratedUnit</i> <b>manageCourses</b> with the flag <i>strict</i> set to false.
+The <i>in</i>-parameter <i>startHour</i> in this and all other units sets the earliest hour to which courses can be scheduled.
+This unit tries to apply its sub-unit <i>planOrCleanup</i> two times which shall ensure that each of the two sub-units of <i>planOrCleanup</i> is applied at least once.
+<b>planOrCleanup</b> is a <i>PriorityUnit</i> with the sub-units <i>planAllCoursesOrFail</i> and <i>cleanupUninterestingCourses</i>.
+The former sub-unit can be applied <i>successfully</i> at most once.
+This means that the rule <b>cleanupUninterestingCourses</b> which removes <i>OfferedCourse</i>s without prospective students (<i>checkDangling=false</i>) is applied in the second iteration at latest.
+</p>
+
+<h3>Loop Unit vs. Nested Rule</h3>
+
+<p>
+<a href="examples/universitycourses/universityCourses-cleanupUninterestingCoursesUnit.png"><img src="examples/universitycourses/universityCourses-cleanupUninterestingCoursesUnit.png" /></a>
+</p>
+
+<p>
+The rule <i>cleanupUninterestingCourses</i>, which is realised using a nested rule, can alternatively be replaced by a <i>LoopUnit</i> <i>cleanupUninterestingCoursesUnit</i>.
+This unit contains the multi-rule of the formerly nested rule and is named <i>cleanupUninterestingCourse</i> here (singular!).
+The expression with a nested rule is preferreable in this case because of its greater simplicity.
+But for a unit (instead of a rule) which has to be executed as many times as possible a <i>LoopUnit</i> has to be used necessarily.
+</p>
diff --git a/examples/universitycourses/universityCourses-cleanupUninterestingCoursesUnit.png b/examples/universitycourses/universityCourses-cleanupUninterestingCoursesUnit.png
new file mode 100644
index 0000000..7cc0e93
--- /dev/null
+++ b/examples/universitycourses/universityCourses-cleanupUninterestingCoursesUnit.png
Binary files differ
diff --git a/examples/universitycourses/universityCourses-incrementHour.png b/examples/universitycourses/universityCourses-incrementHour.png
new file mode 100644
index 0000000..9d3363c
--- /dev/null
+++ b/examples/universitycourses/universityCourses-incrementHour.png
Binary files differ
diff --git a/examples/universitycourses/universityCourses-manageCourses.png b/examples/universitycourses/universityCourses-manageCourses.png
new file mode 100644
index 0000000..bb59873
--- /dev/null
+++ b/examples/universitycourses/universityCourses-manageCourses.png
Binary files differ
diff --git a/examples/universitycourses/universityCourses-model.png b/examples/universitycourses/universityCourses-model.png
new file mode 100644
index 0000000..8a8fd04
--- /dev/null
+++ b/examples/universitycourses/universityCourses-model.png
Binary files differ
diff --git a/examples/universitycourses/universityCourses-planAllCoursesOrFail.png b/examples/universitycourses/universityCourses-planAllCoursesOrFail.png
new file mode 100644
index 0000000..7c9e89d
--- /dev/null
+++ b/examples/universitycourses/universityCourses-planAllCoursesOrFail.png
Binary files differ
diff --git a/examples/universitycourses/universityCourses-planOneCourse.png b/examples/universitycourses/universityCourses-planOneCourse.png
new file mode 100644
index 0000000..3ca20a8
--- /dev/null
+++ b/examples/universitycourses/universityCourses-planOneCourse.png
Binary files differ
diff --git a/get-involved.php b/get-involved.php
index c1f71a2..603822c 100644
--- a/get-involved.php
+++ b/get-involved.php
@@ -49,7 +49,7 @@
<h2>Contribute code</h2>
<ul>
- <li>Check out our codebase from the <a href="http://git.eclipse.org/c/henshin/org.eclipse.emft.henshin.git" target="_blank">Git repository</a> at Eclipse.</li>
+ <li>Check out our codebase from the <a href="http://git.eclipse.org/c/henshin/org.eclipse.emft.henshin.git" target="_blank">Git repository</a> at Eclipse. Please refer to our instructions for <a href="https://wiki.eclipse.org/Henshin_Committer_Instructions#imports" target="_blank">importing projects and resolving dependencies</a>. </li>
<li>Ideally, please use <a href="https://git.eclipse.org/r/#/q/status%3Aopen+project%3Ahenshin/org.eclipse.emft.henshin" target="_blank">Gerrit</a> to contribute changes to the codebase. This allows us to apply our quality assurance process to all contributions. In our Wiki, we provide more detailed descriptions for <a href="https://wiki.eclipse.org/Henshin_Committer_Instructions" target="_blank">working with Gerrit</a>.</li>
<li>Alternatively, you can also submit patches via e-mail -- especially if you want to contribute relatively small changes that do not justify the overhead of setting up Gerrit. In this case, <a href="#get-in-touch">get in touch with us</a>.</li>
</ul>
@@ -71,7 +71,7 @@
<h2><a name="get-in-touch"></a>Get in touch with us</h2>
<ul>
-<li>Do not hesitate to contact us with ideas and improvement suggestions. For establishing a first contact, please send an e-mail to <a href="https://rgse.uni-koblenz.de/web/pages/people/strueber/index_en.shtml">the project lead</a>.</li>
+<li>Do not hesitate to contact us with ideas and improvement suggestions. For establishing a first contact, please send an e-mail to <a href="mailto:danstru@chalmers.se">the project lead</a> (Daniel Strüber).</li>
</ul>
diff --git a/index.php b/index.php
index bdb4211..1c42903 100755
--- a/index.php
+++ b/index.php
@@ -1,123 +1,128 @@
-<?php
-require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
-$App = new App();
-$Nav = new Nav();
-$Menu = new Menu();
-
-include($App->getProjectCommon());
-
-#
-# Begin: page-specific settings. Change these.
-$pageTitle = "Henshin";
-$pageKeywords = "EMF, Henshin, model transformation, state space analysis";
-$pageAuthor = "Christian Krause";
-
-# Load project description from a separate file:
-ob_start();
-include 'description.html';
-$description = ob_get_contents();
-ob_end_clean();
-
-# Load project news from a separate file:
-ob_start();
-include 'news.html';
-$news = ob_get_contents();
-ob_end_clean();
-
-# Load screenshots from a separate file:
-ob_start();
-include 'screenshots.html';
-$screenshots = ob_get_contents();
-ob_end_clean();
-
-# Add page-specific Nav bars here
-# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
-# $Nav->addNavSeparator("My Page Links", "downloads.php");
-# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
-# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
-
-# End: page-specific settings
-#
-
-# Paste your HTML content between the EOHTML markers!
-$html = <<<EOHTML
-
-<div id="maincontent">
-
- <div id="midcolumn">
- <h1>$pageTitle</h1>
- <img style="float:right" src="henshin_small.png" alt="" style="border-width:0px"/>
-
- $description
-
- <div class="homeitem">
- $news
- </div>
-
+<?php
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
+
+$App = new App();
+$Nav = new Nav();
+$Menu = new Menu();
+
+include($App->getProjectCommon());
+
+#
+# Begin: page-specific settings. Change these.
+$pageTitle = "Henshin";
+$pageKeywords = "EMF, Henshin, model transformation, state space analysis";
+$pageAuthor = "Christian Krause";
+
+# Load project description from a separate file:
+ob_start();
+include 'description.html';
+$description = ob_get_contents();
+ob_end_clean();
+
+# Load project news from a separate file:
+ob_start();
+include 'news.html';
+$news = ob_get_contents();
+ob_end_clean();
+
+# Load screenshots from a separate file:
+ob_start();
+include 'screenshots.html';
+$screenshots = ob_get_contents();
+ob_end_clean();
+
+# Add page-specific Nav bars here
+# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+# $Nav->addNavSeparator("My Page Links", "downloads.php");
+# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+# End: page-specific settings
+#
+
+# Paste your HTML content between the EOHTML markers!
+$html = <<<EOHTML
+
+<script>
+if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent))
+document.getElementById("novaContent").style.backgroundColor = '#FFFFFF';
+</script>
+
+<div id="maincontent">
+
+ <div id="midcolumn">
+ <h1>$pageTitle</h1>
+ <img style="float:right" src="henshin_small.png" alt="" style="border-width:0px"/>
+
+ $description
+
+ <div class="homeitem">
+ $news
+ </div>
+
$screenshots
-
- <!--
-
- <div class="homeitem">
- <h3>Narrow column</h3>
- <ul>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- </ul>
- </div>
-
- <div class="homeitem">
- <h3>Narrow column</h3>
- <ul>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- </ul>
- </div>
-
- <div class="homeitem3col">
- <h3>This is a wide column</h3>
- <ul>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
- </ul>
- </div>
-
- <hr class="clearer" />
- <p>Some free text</p>
- <ul class="midlist">
- <li>list of items in free text</li>
- <li>list of items in free text</li>
- <li>list of items in free text</li>
- </ul>
- <ol>
- <li>Ordered list</li>
- <li>Ordered list</li>
- <li>Ordered list</li>
- </ol>
-
- -->
-
- </div>
-
- <div id="rightcolumn">
- <div class="sideitem">
- <div class="sideitem">
- <h6>Incubation</h6>
- <div align="center"><a href="/projects/what-is-incubation.php"><img align="center" src="egg-incubation.png" border="0" alt="Incubation" /></a></div>
- </div>
- </div>
-
-</div>
-
-EOHTML;
-
-# Generate the web page
-$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-
-?>
+
+ <!--
+
+ <div class="homeitem">
+ <h3>Narrow column</h3>
+ <ul>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ </ul>
+ </div>
+
+ <div class="homeitem">
+ <h3>Narrow column</h3>
+ <ul>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ </ul>
+ </div>
+
+ <div class="homeitem3col">
+ <h3>This is a wide column</h3>
+ <ul>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ <li><a href="#">Link</a>. Teaser text <a href="#">'Reference'</a><span class="dates">02/05/05</span></li>
+ </ul>
+ </div>
+
+ <hr class="clearer" />
+ <p>Some free text</p>
+ <ul class="midlist">
+ <li>list of items in free text</li>
+ <li>list of items in free text</li>
+ <li>list of items in free text</li>
+ </ul>
+ <ol>
+ <li>Ordered list</li>
+ <li>Ordered list</li>
+ <li>Ordered list</li>
+ </ol>
+
+ -->
+
+ </div>
+
+ <div id="rightcolumn">
+ <div class="sideitem">
+ <h6>Incubation</h6>
+ <div align="center"><a href="/projects/what-is-incubation.php"><img align="center" src="egg-incubation.png" border="0" width="180" alt="Incubation" /></a></div>
+ </div>
+ </div>
+
+
+</div>
+
+EOHTML;
+
+# Generate the web page
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+
+?>