<?xml version="1.0" encoding="ISO-8859-1"?><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  <title>HTML Format with ISE's Stylesheet</title>
 </head>
 <body bgcolor="#FFFFFF">
  <table border="0" width="100%">
   <tr>
    <td><font size="6"><strong>HTML Format with ISE's Stylesheet</strong></font></td>
    <td align="right"><a href="pretty_printer.html"><img src="image/previous.gif" alt="Previous" border="0" /></a><a href="descendants.html"><img src="image/next.gif" alt="Next" border="0" /></a></td>
   </tr>
  </table>
  <hr size="1" />
  <p>
   With <i>gedoc</i>, it is possible to generate HTML documentation out of 
   an Eiffel project, using the same stylesheet used by the HTML documentation generated by
   ISE EiffelStudio. See <a href="https://www.eiffel.org/doc/eiffelstudio/Producing%20and%20Exporting%20Documentation">
    Producing and Exporting Documentation</a> for more details about the documentation
   format <font color="#800000"><i><tt>html-stylesheet</tt></i></font> from ISE EiffelStudio.
   
  </p>
  <div>
   <h2>Generating Documentation for an Eiffel Project</h2>
   
   <p>
    In order to generate HTML documentation which is very similar to the
    one produced by the following command-line (with 
    <a href="https://www.eiffel.org/doc/eiffelstudio/EiffelStudio%3A%20Using%20command%20line%20options#Commands_for_generating_documentation">
     ISE toolbox</a>):
    
    <blockquote>
     	<font color="#800000"><i><tt>ec -filter html-stylesheet -all -config project.ecf</tt></i></font>
     
    </blockquote>
    you should use the following command-line:
    
    <blockquote>
     	<font color="#800000"><i><tt>gedoc --format=html_ise_stylesheet --library-prefix --output=some_output_directory project.ecf</tt></i></font>
     
    </blockquote>
    where <font color="#800000"><i><tt>project.ecf</tt></i></font> is the ECF file describing the Eiffel project,
    and <font color="#800000"><i><tt>some_output_directory</tt></i></font> is the directory where the HTML files
    will be generated. The command-line option <font color="#800000"><i><tt>--library-prefix</tt></i></font> 
    tells <i>gedoc</i> that HTML class files should be generated
    in a subfolder of the output directory whose name is the name of the Eiffel library
    containing these Eiffel classes (one subfolder per library). The command-line option
    <font color="#800000"><i><tt>--force</tt></i></font> can be used when you run this command several times to 
    update the documentation after some modifications in the Eiffel class. It will tell
    <i>gedoc</i> to overwrite the files which already exist. Without
    this option, files will not be overwritten and <i>gedoc</i> will
    emit an error message. Alternatively, the command-line option <font color="#800000"><i><tt>--interactive</tt></i></font>
    can be used. It will ask confirmation to the user before overwriting files. Finally, if
    you want to generate HTML documentation only for a subset of the classes in your Eiffel
    project, you can use the command-line option <font color="#800000"><i><tt>--class</tt></i></font> with some 
    wildcards.
    
   </p>
   
  </div>
  <div>
   <h2>Generated Files</h2>
   
   <p>
    For each Eiffel class <font color="#008080"><i><tt>FOO</tt></i></font>, <i>gedoc</i>
    generates three HTML file: <font color="#800000"><i><tt>foo.html</tt></i></font>, <font color="#800000"><i><tt>foo_chart.html</tt></i></font>
    and <font color="#800000"><i><tt>foo_links.html</tt></i></font>. The file <font color="#800000"><i><tt>foo.html</tt></i></font>
    contains a pretty-printed, colorized and hyper-linked version of the class text.
    The file <font color="#800000"><i><tt>foo_chart.html</tt></i></font> contains general information about the
    class, the list of its parent classes, and the list of exported features (both
    declared in the class text and inherited from ancestors). Note that in order to
    comply with the original <font color="#800000"><i><tt>html-sytlesheet</tt></i></font> format from ISE
    EiffelStudio, features declared in class <font color="#008080"><i><tt>ANY</tt></i></font> are not listed
    here, unless redefined in a descendant. And finally the file <font color="#800000"><i><tt>foo_links.html</tt></i></font>
    lists the parent classes of the class, its heirs (other classes having this
    class as parent), its direct client classes and supplier classes.
    
   </p>
   
   <p>
    Each HTML file has a natigation bar at the top and bottom of the page. The button
    <font color="#800000"><i><tt>Classes</tt></i></font> lists all classes in the Eiffel project, with the
    "description" text of their "note" clause (formerly known as "indexing" clause).
    The button <font color="#800000"><i><tt>Groups</tt></i></font> lists all Eiffel libraries used in the
    project, and the button <font color="#800000"><i><tt>Group hierarchy</tt></i></font> also lists their
    clusters. Clicking on the name of an Eiffel library will then display the list
    of classes in this library. The button <font color="#800000"><i><tt>Chart</tt></i></font> shows the
    file <font color="#800000"><i><tt>foo_chart.html</tt></i></font> (already mentioned above) for the class 
    <font color="#008080"><i><tt>FOO</tt></i></font> currently displayed. The button <font color="#800000"><i><tt>Relations</tt></i></font>
    shows the file <font color="#800000"><i><tt>foo_links.html</tt></i></font>. The button <font color="#800000"><i><tt>Text</tt></i></font>
    shows the file <font color="#800000"><i><tt>foo.html</tt></i></font>. Finally, in the text field 
    <font color="#800000"><i><tt>Go to:</tt></i></font> you can type the name of a class, then type "Enter"
    to jump to that class.
    
   </p>
   
  </div>
  <div>
   <h2>Why yet another HTML Documentation Generator?</h2>
   
   <p>
    At work, as part of our DevOps effort, we have a Continuous Integration cycle
    and Continuous Delivery cycle which have to process 20,000 classes. During
    these phases, we generate HTML documentation out of these Eiffel classes.
    Here is the performance that we get when using ISE original 
    <font color="#800000"><i><tt>html-stylesheet</tt></i></font> format:
    <pre>
	<font color="#800000"><i><tt>ecb.exe -config integration.ecf -filter html-stylesheet -all</tt></i></font>
		44 minutes
		RAM: 3.9 GB
		EIFGEN: 3.0 GB
</pre>
    This is way too slow within a Continuous Integration cycle and Continuous 
    Delivery cycle. Knowing that <i>gelint</i> is super fast
    to analyze huge Eiffel systems (here, more than 20,000 classes), we tried to
    use the same code as <i>gelint</i> as a front-end of
    <i>gedoc</i> to generate similar HTML files. The results
    were up to our expectations:
    <pre>
	<font color="#800000"><i><tt>gedoc.exe --format=html_ise_stylesheet --force --library-prefix --output=some_output_directory integration.ecf</tt></i></font>
		2 minutes 48 seconds
		RAM: 3.0 GB
		No disk usage
</pre>
    This is when <i>gedoc</i> has been compiled with the Gobo 
    Eiffel Compiler (aka <i>gec</i>) with no garbage collection.
    Here is what we get when <i>gedoc</i> is compiled with 
    <i>gec</i> using the Boehm GC:
    <pre>
	<font color="#800000"><i><tt>gedoc.exe --format=html_ise_stylesheet --force --library-prefix --output=some_output_directory integration.ecf</tt></i></font>
		2 minutes 56 seconds
		RAM: 2.7 GB
		No disk usage
</pre>
    Starting with <i>Gobo Eiffel</i> 4.2, 
    <i>gedoc</i> can now take advantage of multi-threading. 
    Following are the results on a 4-CPU machine with no garbage collection:
    <pre>
	<font color="#800000"><i><tt>gedoc.exe --format=html_ise_stylesheet --thread=4 --force --library-prefix --output=some_output_directory integration.ecf</tt></i></font>
		1 minute 1 second
		RAM: 3.0 GB
		No disk usage
</pre>
    and when using the Boehm GC :
    <pre>
	<font color="#800000"><i><tt>gedoc.exe --format=html_ise_stylesheet --thread=4 --force --library-prefix --output=some_output_directory integration.ecf</tt></i></font>
		1 minute 4 seconds
		RAM: 2.7 GB
		No disk usage
</pre>
    This is still acceptable as part of a Continuous Integration cycle and 
    Continuous Delivery cycle.
    </p>
   
  </div>
  <hr size="1" />
  <table border="0" width="100%">
   <tr>
    <td>
     <address><font size="2"><b>Copyright © 2017-2019, Eric Bezault</b><br /><b>mailto:</b><a href="mailto:ericb@gobosoft.com">ericb@gobosoft.com</a><br /><b>http://</b><a href="http://www.gobosoft.com">www.gobosoft.com</a><br /><b>Last Updated: </b>15 March 2019</font></address>
    </td>
    <td align="right" valign="top"><a href="http://www.gobosoft.com"><img src="image/home.gif" alt="Home" border="0" /></a><a href="index.html"><img src="image/toc.gif" alt="Toc" border="0" /></a><a href="pretty_printer.html"><img src="image/previous.gif" alt="Previous" border="0" /></a><a href="descendants.html"><img src="image/next.gif" alt="Next" border="0" /></a></td>
   </tr>
  </table>
 </body>
</html>