<?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'

    $pageTitle       = "Photran - An Integrated Development Environment and Refactoring Tool for Fortran";
    $pageKeywords    = "photran, fortran, ide, eclipse";
    $pageAuthor      = "Jeffrey Overbey";
    
    # Paste your HTML content between the EOHTML markers!    
    $html = <<<EOHTML

<div id="maincontent">
  <div id="midcolumn">
    <h1>$pageTitle</h1>
    
<img align="right" hspace="20" vspace="20" style="width: 382px; height: 300px;"
  alt="Screenshot of Photran 3.1 Beta 2"
  src="images/screenshot.png">
Photran is an IDE and refactoring tool for Fortran based on <a href="http://www.eclipse.org/"
 target="_blank">Eclipse</a> and
the <a href="http://www.eclipse.org/cdt/" target="_blank">CDT</a>.
<a href="download.php">Photran 8.2</a> was released with Eclipse 4.4 (Luna) on June 25, 2014.

<p>
      Photran 8.2 supports Fortran 77-2008.  It includes 39 refactorings
      (including Rename, Extract Procedure, and loop transformations), as
      well as the following IDE features:<br>
            <ul>
              <li>Syntax-highlighting editor</li>
              <li>Outline view</li>
              <li>Content assist*</li>
              <li>Open declaration*</li>
              <li>Declaration view and hover tips*</li>
              <li>Fortran language-based searching*</li>
              <li>Support for CVS &amp; other VCS's**</li>
              <li>Interactive debugger (<span style="font-style: italic;">gdb</span> GUI)</li>
              <li>Makefile-based compilation</li>
              <li>Optional Makefile generation</li>
              <li>Recognition of error messages from most popular Fortran compilers</li>
            </ul>

            <p><small><small><i>* A project must explicitly have analysis support
            enabled for these features to work.  See the Photran documentation for
            more information.</i></small></small></p>
            
            <p><small><small><i>** CVS is supported in most Eclipse installations.
            Subversion, Git, and other version control systems are supported via
            third-party Eclipse plug-ins.</i></small></small></p>
            
            <p>Photran is a component of the
            <a target="_blank" href="http://www.eclipse.org/ptp">Eclipse Parallel Tools Platform (PTP)</a>.
  </div>
 </div>
</div>    
EOHTML;

    # Generate the web page
    #require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
    #$projectInfo = new ProjectInfo("technology.photran");
    #$projectInfo->generate_common_nav( $Nav );

    $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
