<?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());    # All on the same line to unclutter the user's desktop'
/*******************************************************************************
 * Copyright (c) 2010, 2012
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Stephan Herrmann
 *******************************************************************************/

	$pageTitle 		= "Object Teams - Features of the OTDT";
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/objectteams/css/style.css"/>');

	$html  = <<<EOHTML
	<div id="widecolumn">
	<div style="position:relative;top:0px;left:0px;"> <!-- parent for absolute-positioned contentbox -->
	
	<h1>$pageTitle</h1>
	
			The release 2.4 is based on Eclipse SDK 4.5.
			<p>
			The OTDT contains a modified version of the JDT core<br/>
			and several added plugins.
			</p>
			<div style="margin-top:30px;">
			<span style="text-decoration:underline;">See also:</span>
			<div class="indent">
			<a href="http://help.eclipse.org/topic/org.eclipse.objectteams.otdt.doc/ot.html"><img alt=">>" src="images/arrow-right-trans.png"/>The OTDT user guide </a><br/>
			(this is also bundled with the OTDT as <a href="#help">online help</a>)
			</div>
			</div>
		
		    <div id="contentbox">
		    <div id="contentinner">
				<b>Contents:</b>
				<ul style="margin-top:2px;margin-bottom:0px;">
				  <li><a href="#compiler">Compiler</a></li>
				  <li><a href="#wizards">Wizards</a></li>
				  <li><a href="#editor">Editor</a></li>
				  <li><a href="#bindingEditor">Binding Editor</a></li>
				  <li><a href="#refactoring">Refactoring</a></li>
				  <li><a href="#structureViewers">Structure Viewers</a></li>
			  	  <li><a href="#search">Search</a></li>
				  <li><a href="#execution">Execution Environment</a></li>
				  <li><a href="#otequinox">OT/Equinox</a></li>
				  <li><a href="#debugging">Debugging</a></li>
				  <li><a href="#help">Help and additional Information</a></li>
				</ul>
			</div>
			</div>
			
			
			<h2 id="compiler" style="margin-top:150px;">Compiler</h2>
			            
			The Object Teams Compiler is an incremental compiler, based on the Eclipse Compiler for Java. 
			<dl>
			<dt><strong>Language Definition</strong></dt>
			<dd>The compiler implements the language as defined in the OT/J
				<a href="http://www.objectteams.org/def/1.3.1/index.html" target=_blank>language definition</a> version 1.3.1 (OTJLD).
				The language definition has continuously been revised to precisely specify the language 
				including various corner cases and combinations of features.
			</dd>
			<dt><strong>Language Implementation</strong></dt>
			<dd>
				The compiler supports all features of OT/J according to the 
				<a href="http://www.objectteams.org/def/1.3.1/index.html" target=_blank><img alt="otjld" src="images/otdt/ot_paragraph.png"/> OTJLD v1.3.1</a>
				&sect;&sect;1-7,9.
				Support for the join point sub-language (<a href="http://www.objectteams.org/def/0.9/joinpoints.html" target=_blank><img alt="otjld"  src="images/otdt/ot_paragraph.png"/> OTJLD &#167; 8</a>) is not included.
				<p></p>
				The compiler can be <strong>configured</strong> using global <code>Preferences</code> or project
				specific <code>Properties</code>.
				<ul>
				  <li>Configure OT/J-specific compiler diagnostics as "ignore", "warning" or "error".<br/>
				      Any warnings configured on this property sheet can also be suppressed in the
				      source code using the <code>@SuppressWarnings</code> annotation.</li>
				  <li>Scoped keywords <a href="http://www.objectteams.org/def/stable/sA.html#sA.0.1" target=_blank><img alt="otjld"  src="images/otdt/ot_paragraph.png"/> OTJLD &#167; A.0.1</a> can be disabled (default is enabled).
				  </li>
				</ul>
			</dd>
			<!--dt><strong>Status of the Compiler</strong></dt>
			<dd>
				The OTDT is continuously tested using two growing test suites:
				<table class="default">
				<tr><th>Name</th><th>Software under Test</th><th>Kind</th><th>Number of tests</th></tr>
				<tr class="z1"><td><b>Jacks</b></td><td>compiler and runtime environment</td><td>black box</td><td> &gt;2000 (test programs)</td></tr>
				<tr class="z2"><td><b>JUnit</b></td><td>all of the OTDT</td>                 <td>white box</td><td> &gt;40000 tests.</td>        </tr>
				</table>
				
				Feel free to have a look at the <a href="otdt.html#testresults">test status</a> and remaining <a href="http://trac.objectteams.org/ot/wiki/JUnitFailures">known problems</a>.
			</dd-->
			</dl>
			
			<h2 id="wizards">Wizards</h2>
			<ul>
			
			<li>The first step to developing with Object Teams in Eclipse is creating an 
				<img class="inline" alt="" src="images/otdt/newprj_wiz.gif"/><code>&nbsp;Object&nbsp;Teams&nbsp;Project</code>. 
				A wizard will guide you through that process. 
				It will also add the Object Teams Runtime Environment (<tt>otre.jar</tt>) to your project's classpath.
			</li>
			
			<li>
			
			Having done that, you can start adding classes &mdash; be it regular classes, 
			or <img class="inline" alt="" src="images/otdt/team_obj.gif"/> team 
			or <img class="inline" alt="" src="images/otdt/role_obj.png"/> role classes &mdash; 
			wizards will assist you in creating the classes properly.
			</li>
			</ul>
			
			
			<h2 id="editor">Editor</h2>
			<ul>
			
			<li>Editing Object Teams source code is supported by an outline view, showing the structure of the edited source file. 
				This includes the Object Teams specific constructs, 
				<em>teams</em> (<img class="inline" alt=""  src="images/otdt/team_obj.gif"/>),
				<em>roles</em> (<img class="inline" alt=""  src="images/otdt/role_obj.png"/>),
				and <em>method bindings</em> (<img class="inline" alt="" src="images/otdt/callinbindingbefore_obj.gif"/>,
						 <img  class="inline" alt="" src="images/otdt/callinbindingreplace_obj.gif"/>,
						 <img class="inline" alt=""  src="images/otdt/callinbindingafter_obj.gif"/>,
						 <img class="inline" alt=""  src="images/otdt/calloutbinding_obj.gif"/>).</li>
			
			<li>The editor highlights the Object Teams keywords like "<code class="keyword">team</code>" the same way standard Java keywords are highlighted.</li>
			<li>All constructs referencing other code elements are navigable. E.g. you can navigate <tt>super()</tt>, <tt>tsuper()</tt>, <tt>base()</tt> calls, as well as <em>callin</em> and <em>callout bindings</em>. 
				The name in a <code class="keyword">team package</code> declaration lets you navigate from a role file 
				(<a href="http://www.objectteams.org/def/stable/s1.html#s1.2.5" target=_blank><img alt="otjld" src="images/otdt/ot_paragraph.png"/> OTJLD &#167; 1.2.5</a>) to its enclosing team.</li>
			
			<li>Classes to which one or more roles are bound using <code class="keyword">playedBy</code> are 
				annotated with a marker (<img class="inline" alt="" src="images/otdt/playedBy_obj.gif"/>), 
				that allows navigating to the role declaration(s).
				Similarly, methods in a base class that are bound with a <em>callin binding</em> are 
				annotated with a marker (<img class="inline" alt="" src="images/otdt/callinbinding_obj.gif"/>), 
				that allows navigating to the method binding declaration(s).
				
			<br/>
			Because this feature may be resource-consuming in a large workspace the global Object Teams preferences page allows to completely disable the generation of callin markers.</li>
			
			<li>Semantic highlighting (checkbox "mark occurrences") is fully supported.</li>
			<li>Code completion (Ctrl-space) is widely supported. It is, e.g., possible to use completion in order to create a callout binding.</li>
			<li>Content assist provides quick-fixes (Ctrl-1) for a number of OT/J specific errors and warnings. 
				Also a few templates for specific OT/J language constructs &mdash; 
				namely <code>with{}</code> and <code>within (<em>Expression</em>){}</code> &mdash; are available.</li>
			</ul>
			
			<h2 id="bindingEditor">Binding Editor</h2>
			<ul>
			<li>Supports easy creation of connector definitions using a table based graphical user interface. In this context, a <b>connector</b> is meant to be a team that inherits structure
			(roles) and functionality (methods) from its super-team, and its main purpose is to bind 
			the inherited structure and functionality using <code class="keyword">playedBy</code> 
			declarations and callin/callout method bindings.</li>
			<li>Type bindings (<code class="keyword">playedBy</code>) can be defined by choosing a provided role type and the desired base type with a type selection dialog.</li>
			<li>Method bindings (either callin or callout) can be established by choosing a role method and a base method from the provided role and base method list respectively.
			  <ul>
			        <li>Only appropriate binding kinds are selectable in the corresponding context (callin or callout).</li>
			        <li>Besides the provided role methods, a new role method can be implemented by selecting a provided base method, thus creating a callout binding.</li>
			  </ul>
			</li>
			<li>Parameter and result mappings are definable by typing in an expression in the corresponding text field of the parameter mapping configuration tab.</li>
			</ul>
			The binding editor can be opened either from the new team wizard or using the package explore's context menu (<code><img class="inline" alt="" src="images/otdt/calloutbinding_obj.gif"/>&nbsp;Open&nbsp;Binding&nbsp;Editor</code>).
			<p></p>
			
			<h2 id="refactoring">Refactoring</h2>
			<p></p>
			Significant work has been put into supporting the automated refactoring of OT/J code.
			The following refactorings take into account the Object Teams-specific 
			relationships (implicit role inheritance, team nesting, role-base bindings and method 
			bindings).
			<ul>
			<li><b>Extract Method</b></li>
			<li><b>Move Method</b></li>
			<li><b>Pull Up</b> applicable to method or field</li>
			<li><b>Push Down</b> applicable to method or field</li>
			<li><b>Rename</b> applicable to: project, source folder, package, type, method, field.<br/>
				<i>When trying to rename a team package you'll be asked to rename the team class instead.</i></li>
			</ul>
			Additionally, specific refactorings for OT/J are being developed. Currently these are implemented:
			<ul>
			<li><b>Extract Callin</b></li>
			<li><b>Inline Callin</b></li>
			<li><b>Move to Role File</b></li>
			</ul>
			<p></p>

			
			<h2 id="structureViewers">Structure Viewers</h2>
			<dl>
			<dt><strong>The Package Explorer</strong></dt>
			<dd>
				<ul>
				<li>
				 provides access to all project artifacts and their structure, i.e. source files, used libraries (<em>jar</em>-files), and other documents. Note that team and role classes are annotated with distinct icons (<img class="inline" alt="" src="images/otdt/team_obj.gif"/> for teams and <img class="inline" alt="" src="images/otdt/role_obj.png"/> for roles). (The same icons are used throughout the IDE, whenever a team or role is visible.)
				</li>
				<li>
				 If "Java Type Indicators" is enabled under general preferences/label decorations, OT-specific decorations will also be applied to compilation units (files) and team packages.
				</li>
				<li>
				By opening the tree-branches, you can peek at the structure of e.g. classes.
				</li>
				<li>For team classes, there is special support for <b>role files</b> (<a href="http://www.objectteams.org/def/stable/s1.html#s1.2.5" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>):<br/>
				Role files are separate files and can be shown either 
				<em>physically</em> (<img class="inline" alt="" src="images/otdt/team_package.gif"/>) as (separate) files in the team package or
				<em>logically</em> (<img class="inline" alt="" src="images/otdt/external_roles.gif"/>) as member types of the enclosing team.
				</li>
				<li>
				Furthermore, the Package Explorer provides the current context for other operations. The Team- and Role-Wizards, for example, have a pre-set source folder, package and enclosing class when a team is selected in the Package Explorer.
				</li>
			</ul></dd>
			<dt><strong>The Hierarchy View</strong></dt>
			<dd><ul>
			    <li>Object Teams intruduce a new type hierarchy. Besides the normal ("<code>extends</code>") inheritance, there is an additional "<em>implicit</em>" role inheritance, established by role name equality in a team hierarchy. In conjunction with team nesting roles support a controlled form of multiple inheritance.
			    </li>
			    <li>
			    The new implicit inheritance has been integrated completely into the standard JDT 
			    <em>Hierarchy View</em>.
			    </li>
			</ul></dd>
			<dt><strong>Java Structure Compare</strong></dt>
			<dd><ul>
				<li>When comparing versions of an OT/J file, the Java Structure Compare will correctly render
					Object Teams elements, too.</li>
				<li>When selecting a callin replace binding, an action "Compare With &gt; Bound Base Method" is available via the context menu,
					which easily let's you compare the method implementations of role and base.</li>
			</ul></dd>
			</dl>
			
			
			<h2 id="Search">Search</h2>
			<p></p>
			<dl>
			<dt><strong>Search references</strong></dt>
			<dd><ul><li>The Java Search functionality has been extended to include search results of 
			Object Teams code, that is, callin and callout bindings, and 
			playedBy-relationships.</li></ul></dd>
			<dt><strong>Call hierarchy</strong></dt>
			<dd><ul><li>Also the call hierarchy has been extended for browsing control flows passing
			through method bindings (callin and callout).</li>
			<li>The OTDT introduced support for call hierarchies regarding field accesses (read, write, any) and class instantiations. As of version 3.4 this functionality has been adopted by Eclipse.</li>
			<li>OT/J constructs that may cause role creation due to lifting are considered by the call hierarchy as calling the role's lifting constructor.</li>
			</ul>
			</dd>
			</dl>
			<p></p>
			
			<h2 id="execution">Execution Environment</h2>
			<dl>
			<dt><strong>Aspect weaving</strong></dt><dd>
			<ul><li>
			All aspect oriented languages have some kind of <em>weaving process</em>, where the aspect code is combined with the other (<em>base</em>) code.
			</li>
			<li>
			Object Teams programs perform the weaving at application <em>startup time</em>, i.e. at the moment, the program is launched. In order to do this, there is the so-called <em>Object Teams Runtime Environment (OTRE)</em>, that hooks into the class-loading process.
			</li>
			<li>
			All this is handled transparently using the standard Eclipse "Run" feature.
			Running any main class of an Object Teams project automatically includes
			the OTRE (This feature has been <a href="new_in_1.3.html#launch">changed in the OTDT 1.2.2</a>).
			</li>
			</ul></dd>
			<dt id="weaving_scheme"><strong>Weaving schemes</strong></dt>
			<dd><ul>
			<li>Since version 2.3, the OTDT ships with two distinct weavers with the properties mentioned below.
				Since the OT/J compiler performs some preparation for the respective weaver,
				it has to generate different byte code formats, depending on the targeted weaving scheme.
				As a result, switching from one weaving scheme to the other requires a full recompilation of all OT/J code involved.
				<ul>
				<li><strong>OTRE</strong>: This is the traditional <strong>load-time</strong> weaver.
					This weaver has <strong>matured</strong> over many years,
					but unfortunately, the underlying library <strong>BCEL</strong> is no longer maintained
					and thus cannot handle class files from recent Java versions.
					Up-to Java 7 this could be worked around,
					but Java 8 class files contain several elements that this BCEL-based weaver cannot handle.</li>
				<li><strong>OTDRE</strong>:
					The newer Object Teams Dynamic Runtime Environment has been developed to enable even <strong>runtime weaving</strong>.
				 	To work around limitations of the JVM this weaver has to insert a few general hooks into every weavable class.
				 	This weaver is also interesting for weaving into <strong>Java 8</strong> class files,
				 	as it is based on the library <strong>ASM</strong>, for which a Java-8-enabled version already exists.
					It should be noted, however, that the OTDRE is not as mature as the OTRE, 
					both in terms of complete coverage of all combinations of language features
					as well as in terms of performance measurement (we simply have no large-scale experience with the OTDRE, yet).</li>
				</ul>
				</li>
				</ul></dd>
			<dt><strong>Aspect deployment/activation</strong></dt>
			<dd><ul>
			    <li>A new "Team Activation" tab in the "Run-Configuration" allows to instantiate and activate teams without modifying the program's source code.
			    </li>
			    <li>
			        Teams that cause aspect code to be woven into an application can be added to a program 
			        <ul>
			        <li> by explicit reference within the program source code or</li>
			        <li> by a configuration file which is mentioned as a parameter to the VM or</li>
			        <li> by adding them via the aforementioned "Team Activation" tab.</li>
			        </ul>
			        No such configuration is needed for compilation.
			    </li>
			    </ul>
			</dd>
			<dt><strong>Technology used</strong></dt>
			<dd><ul>
			<li id="JPLIS">Integrating the weaver into the JVM leverages the Java-agent concept of Java 5 
			    (<a href="http://java.sun.com/developer/technicalArticles/releases/j2se15/index.html">JPLIS</a>).
			    (<i>The original implementation using the JMangler framework is no longer maintained</i>).<br/> 
			    </li>
			</ul></dd>
			</dl>
			<p></p>
			
			<h2 id="otequinox">OT/Equinox</h2>
			<p></p>
			Starting with the OTDT version 0.9.9 (2006) it is possible to develop Eclipse plugins using
			OT/J as the implementation language. 
			<ul>
			<li>Using the plugin <code>org.eclipse.objectteams.otequinox</code>, a plugin ("aspect plugin") 
			    may declare that it adapts classes from a specified other plugin ("base plugin").</li>
			<li>By an integration of the Object Teams Runtime Environment with hooks in the 
			    Equinox implementation a <code class="keyword">team</code> class from an <em>aspect plugin</em>
			    can trigger byte-code aspect weaving into its <em>base plugin</em> at load-time.
			    As a result an aspect plugin can indeed adapt the behaviour of another plugin.
			    These bindings are declared using the extension point <code>aspectBindings</code> from
			    the mentioned plugin <code>org.eclipse.objectteams.otequinox</code>.</li>
			<li>The initial client of the OT/Equinox technology is a tiny plugin which extends Eclipse's
			    "about plugins" dialog by additionally displaying which plugins are being adapted by
			    which aspect plugins. This information is found in the version column of the mentioned dialog.
			    This way a user of the OTDT can always check whether a given plugin performs as shipped,
			    or whether it has been adapted by another plugin.</li>
			<li>The OTDT uses the capabilities of OT/Equinox for its own implementation.
			    The technology is mainly used for making the JDT-UI aware of Object Teams without having
			    to copy source code or modifying source code of the JDT-UI in place.</li>
			<li>A new project nature <img class="inline" alt="" src="images/otdt/newpprj_wiz.gif"/>     
				<code>Object Teams Plugin Project</code> is provided, supporting the
			    development of plugins written in OT/J.</li>
			<li>Support for OT/Equinox is added to the run/debug dialogs for all Equinox related launches.</li>
			<li>If desired the load-time weaver can be disabled by adding the following
			    line to the file <code>eclipse.ini</code> after a <code>-vmargs</code> line:
			    <div class="ttindent">-Dot.equinox=false</div>.</li>
			</ul>
			<p></p>
			
			<h2 id="debugging">Debugging</h2>
			<p></p>
			The debugger has been enhanced to support debugging of OT/J programs at the
			source code level. It is possible to set breakpoints and step through Object Teams code.
			
			<dl>
			<dt><b>Stepping through Code</b></dt>
			<dd>The following language features produce byte codes for which a standard Java debugger
			    is not able to display appropriate source locations:
			    <ul>
			    <li>Role files (<a href="http://www.objectteams.org/def/stable/s1.html#s1.2.5" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>)</li>
			    <li>Implicit inheritance (<a href="http://www.objectteams.org/def/stable/s1.html#s1.3.1" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 1.3.1</a>)</li>
			    <li>Callout bindings (<a href="http://www.objectteams.org/def/stable/s3.html" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 3</a>) 
			    	(including callout override (<a href="http://www.objectteams.org/def/stable/s3.html#s3.1.e" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 3.1(e)</a>))</li>
			    <li>Callin bindings (<a href="http://www.objectteams.org/def/stable/s4.html" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 4</a>)</li>
			    </ul>
			    The OTDT-Debugger re-maps the byte codes produced by all this constructs to the
			    appropriate source locations.
			    As a result stepping through these sections of a program completely hides
			    the internal translations from the user.<p></p>
			    The following features are not yet fully supported by the debugger:
			    <ul>
			    <li>Role constructors (see <a href="http://www.objectteams.org/def/stable/s2.html#s2.4" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 2.4</a>)</li>
			    <li>Parameters with declared lifting (<a href="http://www.objectteams.org/def/stable/s2.html#s2.3.2" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> 
			    	OTJLD &sect; 2.3.2</a> &mdash; code for lifting is not filtered out yet)</li>
			    </ul></dd>
			<dt><b>Setting Breakpoints</b></dt>
			<dd>Use double click on ruler or context menu <code>Toggle Breakpoint</code> to set 
				breakpoints in OT/J-Code. Setting breakpoint in role files is supported, too.</dd>
			<dt id="team_monitor"><b>New View: "Team Monitor"</b></dt>
			<dd>The team monitor (<img src="images/otdt/tm.gif" alt="" class="inline"/>)
				 view helps to debug issues related to team activation 
				 (<a href="http://www.objectteams.org/def/stable/s5.html#s5" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 5</a>). 
				 For this purpose it displays all known team instances and shows their activation status as one of
				<ul>
				<li>inactive <img src="images/otdt/team_inact.gif" alt="" class="inline"/>,</li>
				<li>active <img src="images/otdt/team_act.gif" alt="" class="inline"/> 
				    (either globally or for the thread selected in the debug view), or</li>
				<li>implicitly active
				     <img src="images/otdt/team_act_implicit.gif" alt="" class="inline"/> 
				    (temporarily active because the team or one of its roles is currently executing code).
				</li></ul>
				Also, a selected team can be (de)activated interactively via the context menu.</dd>
			<dt id="variables_filter"><b>Filtering variables</b></dt>
			<dd>The OT/J compiler and the loadtime weaver both add some internal variables to the code.
				By default such internal variables are hidden within the Team Monitor as well 
				as in the standard variables view. Both views can be configured to also show these internal
				variables if so desired.</dd>
			<dt><b>Known Issues and Limitations</b></dt>
			<dd><ul>
			    <li>Dynamic code evaluation is not supported yet, 
			    make sure to clear the Expression view.</li>
			  </ul></dd>
			</dl>
			
			<h2 id="help">Help and additional Information</h2>
			<p></p>
			The following sources for help and for further information are bundled with the release:
			<ul>
			<li>A Tutorial (available via the welcome page) guiding through the first steps of using the OTDT.</li>
			<li>Example programs demonstrating key features of Object Teams (also via the welcome page).</li>
			<li>A detailed <a href="http://help.eclipse.org/topic/org.eclipse.objectteams.otdt.doc/ot.html">guide</a> on using the OTDT via the Help Index, including a link to the
			    language definition (which is also bundled).</li>
			<li>Problems that are listed in the problem view are linked (when possible) to a corresponding explanatory entry in the language definition.
			(Context menu -&gt; <img alt="" src="images/otdt/ot_paragraph.png"/><code>&nbsp;Go&nbsp;to&nbsp;Language&nbsp;Definition</code>).</li>
			</ul>
		</div> <!-- parent for absolute-positioned contentbox -->
</div> <!-- witecolumn -->

EOHTML;
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>