<?php
/**
 * Copyright (c) 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation) - Initial implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");

$App = new App();
$Theme = $App->getThemeClass();

include ($App->getProjectCommon());

$pageTitle = "Eclipse Foundation Specification License";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("legal, Eclipse Foundation Specification License");
$Theme->setPageAuthor("Eclipse Foundation");

ob_start();
?>
<h1><?php print $pageTitle; ?></h1>

<p><strong>Do not modify the text of this license.</strong></p>

<p>Specification project committers: include this text <em>verbatim</em> in your specification document.</p>

<p>An AsciiDoc version of this file is available <a href="adoc/efsl-1.1.adoc">here</a>. Plain HTML is <a href="content/en_efsl.php">here</a>.</p>

<p>The Eclipse Foundation TCK License is <a href="tck.php">here</a>.

<p>&darr; The actual licence text starts below this line. &darr;</p>
<hr/>
<?php 
include ("content/en_efsl.php");

$html = ob_get_clean();

$Theme->setHtml($html);
$Theme->setNav($Nav);
$Theme->generatePage();
