Re: [eigen] (Web Developer needed) our CSS is crappy

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


here is the current half cooked diff, I'm too lazy to file a bug for that..

Also, I'm not a big fan of the default doxygen style, especially the
blue gradients and the round corners, but the pb is that's really
painful to port such modifications from one doxygen version to the
other. In other words I'm not sure that's worth the effort to adjust
the default settings...


gael


On Fri, Oct 15, 2010 at 6:02 PM, Gael Guennebaud
<gael.guennebaud@xxxxxxxxx> wrote:
> indeed, there are many problems:
>
> 1 - the .css file corresponds to old doxygen version, while it is now
> generated using doxygen 1.7.x
> 2 - the class attribute of many tables was not specified
> 3 - we don't use the <th> tag for headers
> etc.
>
> so on my local copy I fixed many of these issues and you can see some
> screenshots there:
>
> http://dl.dropbox.com/u/260133/eigen/new_style_01.png
> http://dl.dropbox.com/u/260133/eigen/new_style_02.png
> http://dl.dropbox.com/u/260133/eigen/new_style_03.png
>
> Basically I've re-started from scratch with default doxygen 1.7.2 css
> file, defined two table classes:
>
> "example" for example/output tables
>
> "manual" for the default tables of the manual
>
> and added some space + one line for section headers.
>
> This can be improved further but I think that's already a better start.
>
>
> gael
>
> On Fri, Oct 15, 2010 at 3:03 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>> Hi,
>>
>> while updating the Eigen2To3 porting guide I realized that we need
>> someone with more CSS skills AND good taste to have a look at our CSS.
>>
>> Case in point: http://eigen.tuxfamily.org/dox-devel/Eigen2ToEigen3.html#Decompositions
>>
>> there are many problems in this table :
>>
>> 1. it's not even clear at first glance that it's a table. Borders would help.
>>
>> 2. but borders could easily make it feel clumsy and in other tables e.g.
>> http://eigen.tuxfamily.org/dox-devel/Eigen2ToEigen3.html#PartAndExtract
>> borders are not needed because each cell's content has its own border.
>>
>> --> maybe we need a separate table class for this latter case i.e.
>> when all cells have their own rectangle
>>
>> --> but maybe there is something smarter that a real web developer
>> would do. For example, use smart background colors to make the table
>> structure apparent without resorting to borders??
>>
>> 3.  the column headings ("Eigen 2", etc) are not visible enough. Make
>> them bigger? bold?
>>
>> 4. the "#include..." cell on the bottow row is too big, gets too close
>> to the next cell, it's ugly. Is this is place where one needs to
>> adjust cell padding/spacing?
>>
>> Then we have more non-table-specific CSS issues:
>>
>> 5. There is not enough whitespace before a new section, especially
>> after a large table. Makes the document structure hard to see.
>>
>> 6. We use all the horizontal size of the browser window. While that is
>> useful for large tables, this makes paragraphs of text hard to read.
>> Ideally we'd limit the width of the area that we use, except for
>> tables (all tables ? or only certain explicitly specified ones?)
>>
>> Benoit
>>
>>
>>
>
diff --git a/doc/A05_PortingFrom2To3.dox b/doc/A05_PortingFrom2To3.dox
--- a/doc/A05_PortingFrom2To3.dox
+++ b/doc/A05_PortingFrom2To3.dox
@@ -20,36 +20,36 @@ and to help porting an application from 
   - \ref AlignedMap
 
 \section CompatibilitySupport Eigen2 compatibility support
 
 In order to ease the switch from Eigen2 to Eigen3, Eigen3 features a compatibility mode which can be enabled by defining the EIGEN2_SUPPORT preprocessor token \b before including any Eigen header (typically it should be set in your project options).
 
 \section VectorBlocks Vector blocks
 
-<table>
-<tr><td>Eigen 2</td><td>Eigen 3</td></tr>
+<table class="manual">
+<tr><th>Eigen 2</th><th>Eigen 3</th></th>
 <tr><td>\code
 vector.start(length)
 vector.start<length>()
 vector.end(length)
 vector.end<length>()
 \endcode</td><td>\code
 vector.head(length)
 vector.head<length>()
 vector.tail(length)
 vector.tail<length>()
 \endcode</td></tr>
 </table>
 
 
 \section Corners Matrix Corners
 
-<table>
-<tr><td>Eigen 2</td><td>Eigen 3</td></tr>
+<table class="manual">
+<tr><th>Eigen 2</th><th>Eigen 3</th></th>
 <tr><td>\code
 matrix.corner(TopLeft,r,c)
 matrix.corner(TopRight,r,c)
 matrix.corner(BottomLeft,r,c)
 matrix.corner(BottomRight,r,c)
 matrix.corner<r,c>(TopLeft)
 matrix.corner<r,c>(TopRight)
 matrix.corner<r,c>(BottomLeft)
@@ -94,18 +94,18 @@ With Eigen2 you would have written:
 \code
 c = (a.cwise().abs().cwise().pow(3)).cwise() * (b.cwise().abs().cwise().sin());
 \endcode
 
 \section PartAndExtract Triangular and self-adjoint matrices
 
 In Eigen 2 you had to play with the part, extract, and marked functions to deal with triangular and selfadjoint matrices. In Eigen 3, all these functions have been removed in favor of the concept of \em views:
 
-<table>
-<tr><td>Eigen 2</td><td>Eigen 3</td></tr>
+<table class="manual">
+<tr><th>Eigen 2</th><th>Eigen 3</th></tr>
 <tr><td>\code
 A.part<UpperTriangular>();
 A.part<StrictlyLowerTriangular>(); \endcode</td>
 <td>\code
 A.triangularView<Upper>()
 A.triangularView<StrictlyLower>()\endcode</td></tr>
 <tr><td>\code
 A.extract<UpperTriangular>();
@@ -144,82 +144,82 @@ StrictlyLower
 \endcode</td>
 </tr>
 </table>
 
 \sa class TriangularView, class SelfAdjointView
 
 \section TriangularSolveInPlace Triangular in-place solving
 
-<table>
-<tr><td>Eigen 2</td><td>Eigen 3</td></tr>
+<table class="manual">
+<tr><th>Eigen 2</th><th>Eigen 3</th></tr>
 <tr><td>\code A.triangularSolveInPlace<XxxTriangular>(Y);\endcode</td><td>\code A.triangularView<Xxx>().solveInPlace(Y);\endcode</td></tr>
 </table>
 
 
 \section Decompositions Matrix decompositions
 
 Some of Eigen 2's matrix decompositions have been renamed in Eigen 3, while some others have been removed and are replaced by other decompositions in Eigen 3.
 
-<table>
+<table class="manual">
   <tr>
-    <td>Eigen 2</td>
-    <td>Eigen 3</td>
-    <td>Notes</td>
+    <th>Eigen 2</th>
+    <th>Eigen 3</th>
+    <th>Notes</th>
   </tr>
   <tr>
     <td>LU</td>
     <td>FullPivLU</td>
-    <td>See also the new PartialPivLU, it's much faster</td>
+    <td class="alt">See also the new PartialPivLU, it's much faster</td>
   </tr>
   <tr>
     <td>QR</td>
     <td>HouseholderQR</td>
-    <td>See also the new ColPivHouseholderQR, it's more reliable</td>
+    <td class="alt">See also the new ColPivHouseholderQR, it's more reliable</td>
   </tr>
   <tr>
     <td>SVD</td>
     <td>JacobiSVD</td>
-    <td>We currently don't have a bidiagonalizing SVD; of course this is planned.</td>
+    <td class="alt">We currently don't have a bidiagonalizing SVD; of course this is planned.</td>
   </tr>
   <tr>
     <td>EigenSolver and friends</td>
     <td>\code #include<Eigen/Eigenvalues> \endcode </td>
-    <td>Moved to separate module</td>
+    <td class="alt">Moved to separate module</td>
   </tr>
 <tr>
 
 \section LinearSolvers Linear solvers
 
-<table>
-<tr><td>Eigen 2</td><td>Eigen 3</td><td>Notes</td></tr>
+<table class="manual">
+<tr><th>Eigen 2</th><th>Eigen 3</th><th>Notes</th></tr>
 <tr><td>\code A.lu();\endcode</td>
 <td>\code A.fullPivLu();\endcode</td>
-<td>Now A.lu() returns a PartialPivLU</td></tr>
+<td class="alt">Now A.lu() returns a PartialPivLU</td></tr>
 <tr><td>\code A.lu().solve(B,&X);\endcode</td>
 <td>\code X = A.lu().solve(B);
  X = A.fullPivLu().solve(B);\endcode</td>
-<td>The returned by value is fully optimized</td></tr>
+<td class="alt">The returned by value is fully optimized</td></tr>
 <tr><td>\code A.llt().solve(B,&X);\endcode</td>
 <td>\code X = A.llt().solve(B);
  X = A.selfadjointView<Lower>.llt().solve(B);
  X = A.selfadjointView<Upper>.llt().solve(B);\endcode</td>
-<td>The returned by value is fully optimized and \n
+<td class="alt">The returned by value is fully optimized and \n
 the selfadjointView API allows you to select the \n
 triangular part to work on (default is lower part)</td></tr>
 <tr><td>\code A.llt().solveInPlace(B);\endcode</td>
 <td>\code B = A.llt().solve(B);
  B = A.selfadjointView<Lower>.llt().solve(B);
  B = A.selfadjointView<Upper>.llt().solve(B);\endcode</td>
-<td>In place solving</td></tr>
+<td class="alt">In place solving</td></tr>
 <tr><td>\code A.ldlt().solve(B,&X);\endcode</td>
 <td>\code X = A.ldlt().solve(B);
  X = A.selfadjointView<Lower>.ldlt().solve(B);
  X = A.selfadjointView<Upper>.ldlt().solve(B);\endcode</td>
-<td>The returned by value is fully optimized and \n
+<td class="alt">The returned by value is fully optimized and \n
 the selfadjointView API allows you to select the \n
 triangular part to work on</td></tr>
 </table>
 
 \section Using The USING_PART_OF_NAMESPACE_EIGEN macro
 
 The USING_PART_OF_NAMESPACE_EIGEN macro has been removed. In Eigen 3, just do:
 \code
diff --git a/doc/C01_TutorialMatrixClass.dox b/doc/C01_TutorialMatrixClass.dox
--- a/doc/C01_TutorialMatrixClass.dox
+++ b/doc/C01_TutorialMatrixClass.dox
@@ -128,83 +128,85 @@ Vector4d c(5.0, 6.0, 7.0, 8.0);
 \endcode
 
 \section TutorialMatrixCoeffAccessors Coefficient accessors
 
 The primary coefficient accessors and mutators in Eigen are the overloaded parenthesis operators.
 For matrices, the row index is always passed first. For vectors, just pass one index.
 The numbering starts at 0. This example is self-explanatory:
 
-<table class="tutorial_code"><tr><td>
-Example: \include tut_matrix_coefficient_accessors.cpp
+<table class="example">
+<tr><th>Example:</th><th>Output:</th></tr>
+<tr><td>
+\include tut_matrix_coefficient_accessors.cpp
 </td>
 <td>
-Output: \verbinclude tut_matrix_coefficient_accessors.out
+\verbinclude tut_matrix_coefficient_accessors.out
 </td></tr></table>
 
 Note that the syntax <tt> m(index) </tt>
 is not restricted to vectors, it is also available for general matrices, meaning index-based access
 in the array of coefficients. This however depends on the matrix's storage order. All Eigen matrices default to
 column-major storage order, but this can be changed to row-major, see \ref TopicStorageOrders "Storage orders".
 
 The operator[] is also overloaded for index-based access in vectors, but keep in mind that C++ doesn't allow operator[] to
 take more than one argument. We restrict operator[] to vectors, because an awkwardness in the C++ language
 would make matrix[i,j] compile to the same thing as matrix[j] !
 
 \section TutorialMatrixCommaInitializer Comma-initialization
 
 %Matrix and vector coefficients can be conveniently set using the so-called \em comma-initializer syntax.
 For now, it is enough to know this example:
 
-<table class="tutorial_code"><tr><td>
-Example: \include Tutorial_commainit_01.cpp
-</td>
-<td>
-Output: \verbinclude Tutorial_commainit_01.out
-</td></tr></table>
+<table class="example">
+<tr><th>Example:</th><th>Output:</th></tr>
+<tr>
+<td>\include Tutorial_commainit_01.cpp </td>
+<td>\verbinclude Tutorial_commainit_01.out </td>
+</tr></table>
 
 
 The right-hand side can also contain matrix expressions as discussed in \ref TutorialAdvancedInitialization "this page".
 
 \section TutorialMatrixSizesResizing Resizing
 
 The current size of a matrix can be retrieved by \link EigenBase::rows() rows()\endlink, \link EigenBase::cols() cols() \endlink and \link EigenBase::size() size()\endlink. These methods return the number of rows, the number of columns and the number of coefficients, respectively. Resizing a dynamic-size matrix is done by the \link DenseStorageBase::resize(Index,Index) resize() \endlink method.
 
-<table class="tutorial_code"><tr><td>
-Example: \include tut_matrix_resize.cpp
-</td>
-<td>
-Output: \verbinclude tut_matrix_resize.out
-</td></tr></table>
+<table class="example">
+<tr><th>Example:</th><th>Output:</th></tr>
+<tr>
+<td>\include tut_matrix_resize.cpp </td>
+<td>\verbinclude tut_matrix_resize.out </td>
+</tr></table>
 
 The resize() method is a no-operation if the actual matrix size doesn't change; otherwise it is destructive: the values of the coefficients may change.
 If you want a conservative variant of resize() which does not change the coefficients, use \link DenseStorageBase::conservativeResize() conservativeResize()\endlink, see \ref TopicResizing "this page" for more details.
 
 All these methods are still available on fixed-size matrices, for the sake of API uniformity. Of course, you can't actually
 resize a fixed-size matrix. Trying to change a fixed size to an actually different value will trigger an assertion failure;
 but the following code is legal:
 
-<table class="tutorial_code"><tr><td>
-Example: \include tut_matrix_resize_fixed_size.cpp
-</td>
-<td>
-Output: \verbinclude tut_matrix_resize_fixed_size.out
-</td></tr></table>
+<table class="example">
+<tr><th>Example:</th><th>Output:</th></tr>
+<tr>
+<td>\include tut_matrix_resize_fixed_size.cpp </td>
+<td>\verbinclude tut_matrix_resize_fixed_size.out </td>
+</tr></table>
 
 
 \section TutorialMatrixAssignment Assignment and resizing
 
 Assignment is the action of copying a matrix into another, using \c operator=. Eigen resizes the matrix on the left-hand side automatically so that it matches the size of the matrix on the right-hand size. For example:
 
-<table class="tutorial_code"><tr><td>
-Example: \include tut_matrix_assignment_resizing.cpp
-</td>
-<td>
-Output: \verbinclude tut_matrix_assignment_resizing.out
-</td></tr></table>
+<table class="tutorial_code">
+<tr><th>Example:</th><th>Output:</th></tr>
+<tr>
+<td>\include tut_matrix_assignment_resizing.cpp </td>
+<td>\verbinclude tut_matrix_assignment_resizing.out </td>
+</tr></table>
 
 Of course, if the left-hand side is of fixed size, resizing it is not allowed.
 
 If you do not want this automatic resizing to happen (for example for debugging purposes), you can disable it, see
 \ref TopicResizing "this page".
 
 
 \section TutorialMatrixFixedVsDynamic Fixed vs. Dynamic size
diff --git a/doc/eigendoxy.css b/doc/eigendoxy.css
--- a/doc/eigendoxy.css
+++ b/doc/eigendoxy.css
@@ -1,371 +1,456 @@
-body,h1,h2,h3,h4,h5,h6,p,center,td,th,ul,dl,div {
-  font-family: verdana, arial, helvetica, sans-serif;
-  font-size: 10pt;
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl {
+  font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+  font-size: 12px;
 }
 
+/* @group Heading Levels */
+
 h1 {
-  text-align: center;
   font-size: 150%;
 }
 
 h2 {
   font-size: 120%;
 }
 
 h3 {
   font-size: 100%;
 }
 
-td h2
-{
-  /* we need the margin in order to ensure that in tables
-   * the headings are centered. */
-  margin-top: 12px;
-  margin-bottom: 12px;
+dt {
+  font-weight: bold;
 }
 
-caption {
-  font-weight: bold
+div.multicol {
+  -moz-column-gap: 1em;
+  -webkit-column-gap: 1em;
+  -moz-column-count: 3;
+  -webkit-column-count: 3;
 }
 
-div.center {
-  text-align: center;
-  margin-top: 0px;
-    margin-bottom: 0px;
-    padding: 0px;
+p.startli, p.startdd, p.starttd {
+  margin-top: 2px;
 }
 
-div.center img {
-  border: 0px;
+p.endli {
+  margin-bottom: 0px;
 }
 
-div.qindex {
-  width: 100%;
-  background-color: #e8eef2;
-  border: 1px solid #84b0c7;
+p.enddd {
+  margin-bottom: 4px;
+}
+
+p.endtd {
+  margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+  font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+  background-color: #EBEFF6;
+  border: 1px solid #A3B4D7;
   text-align: center;
   margin: 2px;
   padding: 2px;
-  line-height: 140%;
 }
 
-div.navpath {
+div.qindex, div.navpath {
   width: 100%;
-  background-color: #e8eef2;
-  border: 1px solid #84b0c7;
-  text-align: center;
-  margin: 2px;
-  padding: 2px;
   line-height: 140%;
 }
 
 div.navtab {
-  background-color: #e8eef2;
-  border: 1px solid #84b0c7;
-  text-align: center;
-  margin: 2px;
   margin-right: 15px;
-  padding: 2px;
 }
 
-td.navtab {
-       font-size: 100%;
+/* @group Link Styling */
+
+a {
+  color: #3D578C;
+  font-weight: normal;
+  text-decoration: none;
+}
+
+.contents a:visited {
+  color: #4665A2;
+}
+
+a:hover {
+  text-decoration: underline;
 }
 
 a.qindex {
-       text-decoration: none;
-       font-weight: bold;
-       color: #1a419d;
+  font-weight: bold;
 }
 
-a.qindex:visited {
-       text-decoration: none;
-       font-weight: bold;
-       color: #1a419d
+a.qindexHL {
+  font-weight: bold;
+  background-color: #9CAFD4;
+  color: #ffffff;
+  border: 1px double #869DCA;
 }
 
-a.qindex:hover {
-  text-decoration: none;
-  background-color: #ddddff;
-}
-
-a.qindexhl {
-  text-decoration: none;
-  font-weight: bold;
-  background-color: #6666cc;
-  color: #ffffff;
-  border: 1px double #9295c2;
-}
-
-a.qindexhl:hover {
-  text-decoration: none;
-  background-color: #6666cc;
-  color: #ffffff;
-}
-
-a.qindexhl:visited {
-  text-decoration: none;
-  background-color: #6666cc;
-  color: #ffffff
+.contents a.qindexHL:visited {
+        color: #ffffff;
 }
 
 a.el {
-  text-decoration: none;
-  font-weight: bold
+  font-weight: bold;
 }
 
-a.elref {
-  font-weight: bold
+a.elRef {
 }
 
-a.code:link {
-  text-decoration: none;
-  font-weight: normal;
-  color: #0000ff
+a.code {
+  color: #4665A2;
 }
 
-a.code:visited {
-  text-decoration: none;
-  font-weight: normal;
-  color: #0000ff
+a.codeRef {
+  color: #4665A2;
 }
 
-a.coderef:link {
-  font-weight: normal;
-  color: #0000ff
+/* @end */
+
+dl.el {
+  margin-left: -1cm;
 }
 
-a.coderef:visited {
-  font-weight: normal;
-  color: #0000ff
+.fragment {
+  font-family: monospace, fixed;
+  font-size: 105%;
 }
 
-a:hover {
-  text-decoration: none;
-  background-color: #f2f2ff
-}
-
-dl.el {
-  margin-left: -1cm
+pre.fragment {
+  border: 1px solid #C4CFE5;
+  background-color: #FBFCFD;
+  padding: 4px 6px;
+  margin: 4px 8px 4px 2px;
+  overflow: auto;
+  word-wrap: break-word;
+  font-size:  9pt;
+  line-height: 125%;
 }
 
 div.ah {
   background-color: black;
   font-weight: bold;
   color: #ffffff;
   margin-bottom: 3px;
-  margin-top: 3px
+  margin-top: 3px;
+  padding: 0.2em;
+  border: solid thin #333;
+  border-radius: 0.5em;
+  -webkit-border-radius: .5em;
+  -moz-border-radius: .5em;
+  box-shadow: 2px 2px 3px #999;
+  -webkit-box-shadow: 2px 2px 3px #999;
+  -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+  background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
 }
 
-div.groupheader {
-       margin-left: 16px;
-       margin-top: 12px;
-       margin-bottom: 6px;
-       font-weight: bold;
+div.groupHeader {
+  margin-left: 16px;
+  margin-top: 12px;
+  font-weight: bold;
 }
 
-div.grouptext {
+div.groupText {
   margin-left: 16px;
   font-style: italic;
-  font-size: 95%
 }
 
 body {
   background: white;
   color: black;
-  margin-right: 20px;
-  margin-left: 20px;
+        margin: 0;
+}
+
+div.contents {
+  margin-top: 10px;
+  margin-left: 10px;
+  margin-right: 10px;
 }
 
 td.indexkey {
-  background-color: #e8eef2;
+  background-color: #EBEFF6;
   font-weight: bold;
-  padding-right  : 10px;
-  padding-top    : 2px;
-  padding-left   : 10px;
-  padding-bottom : 2px;
-  margin-left    : 0px;
-  margin-right   : 0px;
-  margin-top     : 2px;
-  margin-bottom  : 2px;
-  border: 1px solid #cccccc;
+  border: 1px solid #C4CFE5;
+  margin: 2px 0px 2px 0;
+  padding: 2px 10px;
 }
 
 td.indexvalue {
-  background-color: #e8eef2;
-  font-style: italic;
-  padding-right  : 10px;
-  padding-top    : 2px;
-  padding-left   : 10px;
-  padding-bottom : 2px;
-  margin-left    : 0px;
-  margin-right   : 0px;
-  margin-top     : 2px;
-  margin-bottom  : 2px;
-  border: 1px solid #cccccc;
+  background-color: #EBEFF6;
+  border: 1px solid #C4CFE5;
+  padding: 2px 10px;
+  margin: 2px 0px;
 }
 
 tr.memlist {
-  background-color: #f0f0f0;
+  background-color: #EEF1F7;
 }
 
-p.formuladsp {
+p.formulaDsp {
   text-align: center;
 }
 
-img.formuladsp {
+img.formulaDsp {
+  
 }
 
-img.formulainl {
+img.formulaInl {
   vertical-align: middle;
 }
 
-span.keyword       { color: #008000 }
-span.keywordtype   { color: #604020 }
-span.keywordflow   { color: #e08000 }
-span.comment       { color: #800000 }
-span.preprocessor  { color: #806020 }
-span.stringliteral { color: #002080 }
-span.charliteral   { color: #008080 }
-span.vhdldigit     { color: #ff00ff }
-span.vhdlchar      { color: #000000 }
-span.vhdlkeyword   { color: #700070 }
-span.vhdllogic     { color: #ff0000 }
-
-/* @group member descriptions */
-
-.mdescleft, .mdescright,
-.memitemleft, .memitemright,
-.memtemplitemleft, .memtemplitemright, .memtemplparams {
-  background-color: #fafafa;
-  border: none;
-  margin: 4px;
-  padding: 1px 0 0 8px;
+div.center {
+  text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
 }
 
-.mdescleft, .mdescright {
-  padding: 0px 8px 4px 8px;
-  color: #555;
+div.center img {
+  border: 0px;
 }
 
-.memitemleft, .memitemright, .memtemplparams {
-  border-top: 1px solid #ccc;
+address.footer {
+  text-align: right;
+  padding-right: 12px;
 }
 
-.memitemleft, .memtemplitemleft {
-        white-space: nowrap;
+img.footer {
+  border: 0px;
+  vertical-align: middle;
 }
 
-.memtemplparams {
-  color: #606060;
-        white-space: nowrap;
+/* @group Code Colorization */
+
+span.keyword {
+  color: #008000
 }
 
+span.keywordtype {
+  color: #604020
+}
+
+span.keywordflow {
+  color: #e08000
+}
+
+span.comment {
+  color: #800000
+}
+
+span.preprocessor {
+  color: #806020
+}
+
+span.stringliteral {
+  color: #002080
+}
+
+span.charliteral {
+  color: #008080
+}
+
+span.vhdldigit { 
+  color: #ff00ff 
+}
+
+span.vhdlchar { 
+  color: #000000 
+}
+
+span.vhdlkeyword { 
+  color: #700070 
+}
+
+span.vhdllogic { 
+  color: #ff0000 
+}
+
+/* @end */
+
+/*
 .search {
   color: #003399;
   font-weight: bold;
 }
 
 form.search {
   margin-bottom: 0px;
   margin-top: 0px;
 }
 
 input.search {
-  font-size: 90%;
+  font-size: 75%;
   color: #000080;
   font-weight: normal;
   background-color: #e8eef2;
 }
+*/
 
 td.tiny {
-  font-size: 85%;
-}
-
-a {
-  color: #1a41a8;
-}
-
-a:visited {
-  color: #2a3798;
+  font-size: 75%;
 }
 
 .dirtab {
   padding: 4px;
   border-collapse: collapse;
-  border: 1px solid #84b0c7;
+  border: 1px solid #A3B4D7;
 }
 
 th.dirtab {
-  background: #e8eef2;
+  background: #EBEFF6;
   font-weight: bold;
 }
 
 hr {
-  height: 0;
+  height: 0px;
   border: none;
-  border-top: 1px solid #666;
+  border-top: 1px solid #4A6AAA;
 }
 
-/* styles for detailed member documentation */
+hr.footer {
+  height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+  border-spacing: 0px;
+  padding: 0px;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+  background-color: #F9FAFC;
+  border: none;
+  margin: 4px;
+  padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+  padding: 0px 8px 4px 8px;
+  color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+  border-top: 1px solid #C4CFE5;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memTemplParams {
+  color: #4665A2;
+        white-space: nowrap;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
 
 .memtemplate {
   font-size: 80%;
-  color: #606060;
+  color: #4665A2;
   font-weight: normal;
-  margin-left: 3px;
+  margin-left: 9px;
 }
 
 .memnav {
-  background-color: #e8eef2;
-  border: 1px solid #84b0c7;
+  background-color: #EBEFF6;
+  border: 1px solid #A3B4D7;
   text-align: center;
   margin: 2px;
   margin-right: 15px;
   padding: 2px;
 }
 
 .memitem {
   padding: 0;
   margin-bottom: 10px;
 }
 
 .memname {
-  white-space: nowrap;
-  font-weight: bold;
-}
-
-.memproto, .memdoc {
-  border: 1px solid #84b0c7;  
+        white-space: nowrap;
+        font-weight: bold;
+        margin-left: 6px;
 }
 
 .memproto {
-  padding: 2;
-  background-color: #d5e1e8;
-  font-weight: bold;
-  -webkit-border-top-left-radius: 8px;
-  -webkit-border-top-right-radius: 8px;
-  -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-  -moz-border-radius-topleft: 8px;
-  -moz-border-radius-topright: 8px;
-  -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 8px;
+        border-top-left-radius: 8px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 8px;
+        -moz-border-radius-topleft: 8px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 8px;
+        -webkit-border-top-left-radius: 8px;
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+
 }
 
 .memdoc {
-  padding: 2px 5px;
-  background-color: #eef3f5;
-  border-top-width: 0;
-  -webkit-border-bottom-left-radius: 8px;
-  -webkit-border-bottom-right-radius: 8px;
-  -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-  -moz-border-radius-bottomleft: 8px;
-  -moz-border-radius-bottomright: 8px;
-  -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 2px 5px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        /* opera specific markup */
+        border-bottom-left-radius: 8px;
+        border-bottom-right-radius: 8px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 8px;
+        -moz-border-radius-bottomright: 8px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 8px;
+        -webkit-border-bottom-right-radius: 8px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
 }
 
 .paramkey {
   text-align: right;
 }
 
 .paramtype {
   white-space: nowrap;
@@ -374,35 +459,81 @@ hr {
 .paramname {
   color: #602020;
   white-space: nowrap;
 }
 .paramname em {
   font-style: normal;
 }
 
-/* end styling for detailed member documentation */
+.params, .retval, .exception, .tparams {
+        border-spacing: 6px 2px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+
+
+
+/* @end */
+
+/* @group Directory (tree) */
 
 /* for the tree view */
+
 .ftvtree {
   font-family: sans-serif;
-  margin:0.5em;
+  margin: 0px;
 }
 
+/* these are for tree view when used as main index */
+
 .directory {
   font-size: 9pt;
   font-weight: bold;
+  margin: 5px;
 }
 
 .directory h3 {
   margin: 0px;
   margin-top: 1em;
   font-size: 11pt;
 }
 
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice.  Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+  height: 61px;
+  background-repeat: no-repeat;
+  background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+  display: none;
+}
+*/
+
 .directory > h3 {
   margin-top: 0;
 }
 
 .directory p {
   margin: 0px;
   white-space: nowrap;
 }
@@ -411,94 +542,292 @@ hr {
   display: none;
   margin: 0px;
 }
 
 .directory img {
   vertical-align: -30%;
 }
 
-h2 a {
-  font-size: 13pt;margin:10px 0 1em 1em;display:block;
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+  font-size: 100%;
+  font-weight: bold;
 }
 
-a.top  {
+.directory-alt h3 {
+  margin: 0px;
+  margin-top: 1em;
   font-size: 11pt;
-  display:block;
-  color: #666666;
-  position:absolute;
-  right:20pt;
-  margin:12pt 0 0 0;
-  text-decoration : none;
 }
 
-a.top:hover, a.logo:hover {
-  background-color: transparent;
-  font-weight : bolder;
+.directory-alt > h3 {
+  margin-top: 0;
 }
 
-div.navigation {
-  min-height    : 64px;
-  padding-left  : 80px;
-  padding-top   : 5px;
+.directory-alt p {
+  margin: 0px;
+  white-space: nowrap;
 }
 
+.directory-alt div {
+  display: none;
+  margin: 0px;
+}
+
+.directory-alt img {
+  vertical-align: -30%;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+}
+
+address {
+  font-style: normal;
+  color: #2A3D61;
+}
+
+table.doxtable {
+  border-collapse:collapse;
+}
+
+table.doxtable td, table.doxtable th {
+  border: 1px solid #2D4068;
+  padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+  background-color: #374F7F;
+  color: #FFFFFF;
+  font-size: 110%;
+  padding-bottom: 4px;
+  padding-top: 5px;
+  text-align:left;
+}
+
+.tabsearch {
+  top: 0px;
+  left: 10px;
+  height: 36px;
+  background-image: url('tab_b.png');
+  z-index: 101;
+  overflow: hidden;
+  font-size: 13px;
+}
+
+.navpath ul
+{
+  font-size: 11px;
+  background-image:url('tab_b.png');
+  background-repeat:repeat-x;
+  height:30px;
+  line-height:30px;
+  color:#8AA0CC;
+  border:solid 1px #C2CDE4;
+  overflow:hidden;
+  margin:0px;
+  padding:0px;
+}
+
+.navpath li
+{
+  list-style-type:none;
+  float:left;
+  padding-left:10px;
+  padding-right: 15px;
+  background-image:url('bc_s.png');
+  background-repeat:no-repeat;
+  background-position:right;
+  color:#364D7C;
+}
+
+.navpath a
+{
+  height:32px;
+  display:block;
+  text-decoration: none;
+  outline: none;
+}
+
+.navpath a:hover
+{
+  color:#6884BD;
+}
+
+div.summary
+{
+  float: right;
+  font-size: 8pt;
+  padding-right: 5px;
+  width: 50%;
+  text-align: right;
+}       
+
+div.summary a
+{
+  white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+  background-color: #F9FAFC;
+  margin:  0px;
+  border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+  padding: 5px 5px 5px 10px;
+}
+
+
+
+/******** Eigen specific CSS code ************/
+
+
 img {
     border: 0;
 }
 
-table {
+/* class for exemple / output tables */
+
+table.example {
     border-collapse: collapse;
-    border-style: none;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #cccccc;
     font-size: 1em;
+    
+    box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+    -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
 }
 
+table.example th {
+  padding: 0.5em 0.5em 0.5em 0.5em;
+  text-align: left;
+  padding-right: 1em;
+  background-color: #F2F1DC;
+  
+  background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.3,#FFFFFF), color-stop(0.30,#FFFFFF), color-stop(0.98,#F4F4E5), to(#ECECDE));
+  background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 30%, #F4F4E5 98%, #ECECDE);
+}
+
+table.example td {
+  padding: 0.5em 0.5em 0.5em 0.5em;
+  vertical-align:top;
+}
+
+
+/* standard class for the manual */
+
+table.manual {
+    border-collapse: collapse;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #cccccc;
+    font-size: 1em;
+    
+    padding: 0.2em 0em 0.5em 0em;
+    
+    box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+    -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+table.manual th {
+  padding: 0.5em 0.5em 0.5em 0.5em;
+  margin: 0em 0em 0.3em 0em;
+  text-align: left;
+  color: #555555;
+  padding-right: 1em;
+  background-color: #F4F4E5;
+  
+  background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.3,#FFFFFF), color-stop(0.30,#FFFFFF), color-stop(0.98,#F4F4E5), to(#ECECDE));
+  background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 30%, #F4F4E5 98%, #ECECDE);
+}
+
+table.manual td {
+  padding: 0.3em 0.5em 0.3em 0.5em;
+  vertical-align:top;
+}
+
+table.manual td.alt {
+  padding: 0.3em 0.5em 0.3em 0.5em;
+  vertical-align:top;
+  background-color: #F4F4E5;
+}
+
+
+h2 {
+  margin-top:2em;
+  border-style: none none solid none;
+  border-width: 1px;
+  border-color: #cccccc;
+}
+
+
+/**** old Eigen's styles ****/
+
 th {
-    text-align: left;
-    padding-right: 1em;
+    /*text-align: left;
+    padding-right: 1em;*/
     /* border: #cccccc dashed; */
     /* border-style: dashed; */
     /* border-width: 0 0 3px 0; */
 }
-
+/*
 table.noborder {
   border-collapse: separate;
   border-bottom-style : none;
   border-left-style   : none;
   border-right-style  : none;
   border-top-style : none ;
   border-spacing : 0px 0px;
   margin: 4pt 0 0 0;
   padding: 0 0 0 0;
+  
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+    -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
 }
 
 table.noborder td {
   border-bottom-style : none;
   border-left-style   : none;
   border-right-style  : none;
   border-top-style : none;
   border-spacing : 0px 0px;
   margin: 0 0 0 0;
   vertical-align: top;
 }
 
 table.tutorial_code {
   width: 90%;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+    -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
 }
 
 table.tutorial_code tr {
   border: 1px dashed #888888;
 }
+*/
 
 table.tutorial_code td {
   border-color: transparent; /* required for Firefox */
   padding: 3pt 5pt 3pt 5pt;
   vertical-align: top;
 }
 
+
 /* Whenever doxygen meets a '\n' or a '<BR/>', it will put 
  * the text containing the characted into a <p class="starttd">.
  * This little hack togehter with table.tutorial_code td.note
  * aims at fixing this issue. */
 table.tutorial_code td.note p.starttd {
   margin: 0px;
   border: none;
   padding: 0px;
diff --git a/doc/eigendoxy_footer.html.in b/doc/eigendoxy_footer.html.in
--- a/doc/eigendoxy_footer.html.in
+++ b/doc/eigendoxy_footer.html.in
@@ -1,5 +1,5 @@
-<hr size="1"><address style="text-align: right;"><small>Generated on Sun Aug 24 23:40:21 2008 for Eigen by&nbsp;
-<a href="http://www.doxygen.org/index.html";>
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+
+<hr class="footer"/><address class="footer"><small>
+<a href="http://www.doxygen.org/index.html";><img class="footer" src="$relpath$doxygen.png" alt="doxygen"/></a></small></address>
 </body>
 </html>
\ No newline at end of file
diff --git a/doc/eigendoxy_header.html.in b/doc/eigendoxy_header.html.in
--- a/doc/eigendoxy_header.html.in
+++ b/doc/eigendoxy_header.html.in
@@ -1,10 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html xmlns="http://www.w3.org/1999/xhtml";>
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <title>$title</title>
-<link href="eigendoxy.css" rel="stylesheet" type="text/css">
-<link href="eigendoxy_tabs.css" rel="stylesheet" type="text/css">
-</head><body>
+<link href="$relpath$eigendoxy_tabs.css" rel="stylesheet" type="text/css">
+<link href="$relpath$search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javaScript" src="$relpath$search/search.js"></script>
+<link href="$relpath$eigendoxy.css" rel="stylesheet" type="text/css">
+</head>
+<body onload='searchBox.OnSelectItem(0);'>
 <a name="top"></a>
 <a class="logo" href="http://eigen.tuxfamily.org/";>
 <img src="Eigen_Silly_Professor_64x64.png" width=64 height=64 alt="Eigen's silly professor"
-     style="position:absolute; border:none" /></a>
\ No newline at end of file
+     style="position:absolute; border:none; right:10px; top:10px" /></a>
diff --git a/doc/eigendoxy_tabs.css b/doc/eigendoxy_tabs.css
--- a/doc/eigendoxy_tabs.css
+++ b/doc/eigendoxy_tabs.css
@@ -1,101 +1,59 @@
-/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
-
-DIV.tabs
-{
-  float: left;
-  width:100%;
-  background       : url("tab_b.gif") repeat-x bottom;
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
 }
 
-DIV.tabs UL
-{
-   margin           : 0px;
-   padding-left     : 10px;
-   list-style       : none;
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
 }
 
-DIV.tabs LI, DIV.tabs FORM
-{
-   display          : inline;
-   margin           : 0px;
-   padding          : 0px;
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
 }
 
-DIV.tabs FORM
-{
-   float            : right;
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
 }
 
-DIV.tabs A
-{
-   float            : left;
-   background       : url("tab_r.gif") no-repeat right top;
-   border-bottom    : 1px solid #84B0C7;
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #283A5D;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
 }
 
-DIV.tabs A:hover
-{
-   background-position: 100% -150px;
+.tabs3 .tablist a {
+    padding: 0 10px;
 }
 
-DIV.tabs A:link, DIV.tabs A:visited,
-DIV.tabs A:active, DIV.tabs A:hover
-{
-       color: #1A419D;
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
 }
 
-DIV.tabs SPAN
-{
-   float            : left;
-   display          : block;
-   background       : url("tab_l.gif") no-repeat left top;
-   padding          : 5px 9px;
-   white-space      : nowrap;
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
 }
-
-DIV.tabs INPUT
-{
-   float            : right;
-   display          : inline;
-   font-size        : 1em;
-}
-
-DIV.tabs TD
-{
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-
-
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-DIV.tabs SPAN {float : none;}
-/* End IE5-Mac hack */
-
-DIV.tabs A:hover SPAN
-{
-   background-position: 0% -150px;
-}
-
-DIV.tabs LI.current A
-{
-   background-position: 100% -150px;
-   border-width     : 0px;
-}
-
-DIV.tabs LI.current SPAN
-{
-   background-position: 0% -150px;
-   padding-bottom   : 6px;
-}
-
-DIV.navpath
-{
-   background       : none;
-   border           : none;
-   border-bottom    : 1px solid #84B0C7;
-}


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/