<?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 7.0</a> was released with Eclipse 3.7 (Indigo) on June 22, 2011.

<p>
      Photran 7.0 supports Fortran 77-2008.  It includes 31 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);
?>
