Module: RDocF95::Generator::XHTML::XHTML

Defined in:
lib/rdoc-f95/generator/xhtml/xhtml.rb

Overview

CSS2 RDoc XHTML template (for MathML)

This is a template for RDoc that uses XHTML 1.0 Transitional and dictates a bit more of the appearance of the output to cascading stylesheets than the default. It was designed for clean inline code display, and uses DHTMl to toggle the visbility of each method’s source with each click on the ‘[source]’ link.

This is a copy of html.rb. Then some headers that needed to represent MathML are added.

Authors

Copyright © 2008 GFD Dennou Club some rights reserved.

Constant Summary collapse

FONTS =
"Verdana,Arial,Helvetica,sans-serif"
STYLE =
<<-EOF
body {
    font-family: Verdana,Arial,Helvetica,sans-serif;
    font-size:   90%;
    margin: 0;
    margin-left: 40px;
    padding: 0;
    background: white;
}

h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
/* h1 { font-size: 150%; } */
h2,h3,h4 { margin-top: 1em; }

a { background: #eef; color: #039; text-decoration: none; }
a:hover { background: #039; color: #eef; }

/* Override the base stylesheet's Anchor inside a table cell */
td > a {
  background: transparent;
  color: #039;
  text-decoration: none;
}

/* and inside a section title */
.section-title > a {
  background: transparent;
  color: #eee;
  text-decoration: none;
}

/* === Structural elements =================================== */

div#index {
    margin: 0;
    margin-left: -40px;
    padding: 0;
    font-size: 90%;
}


div#index a {
    margin-left: 0.7em;
}

div#index .section-bar {
   margin-left: 0px;
   padding-left: 0.7em;
   background: #ccc;
   font-size: small;
}


div#classHeader, div#fileHeader {
    width: auto;
    color: white;
    padding: 0.5em 1.5em 0.5em 1.5em;
    margin: 0;
    margin-left: -40px;
    border-bottom: 3px solid #006;
}

div#classHeader a, div#fileHeader a {
    background: inherit;
    color: white;
}

div#classHeader td, div#fileHeader td {
    background: inherit;
    color: white;
}


div#fileHeader {
    background: #057;
}

div#classHeader {
    background: #048;
}


.class-name-in-header {
  font-size:  180%;
  font-weight: bold;
}


div#bodyContent {
    padding: 0 1.5em 0 1.5em;
}

div#description {
    padding: 0.5em 1.5em;
    background: #efefef;
    border: 1px dotted #999;
}

div#description h1,h2,h3,h4,h5,h6 {
    color: #125;;
    background: transparent;
}

div#validator-badges {
    text-align: center;
}
div#validator-badges img { border: 0; }

div#copyright {
    color: #333;
    background: #efefef;
    font: 0.75em sans-serif;
    margin-top: 5em;
    margin-bottom: 0;
    padding: 0.5em 2em;
}


/* === Classes =================================== */

table.header-table {
    color: white;
    font-size: small;
}

.type-note {
    font-size: small;
    color: #DEDEDE;
}

.xxsection-bar {
    background: #eee;
    color: #333;
    padding: 3px;
}

.section-bar {
   color: #333;
   border-bottom: 1px solid #999;
    margin-left: -20px;
}


.section-title {
    background: #79a;
    color: #eee;
    padding: 3px;
    margin-top: 2em;
    margin-left: -30px;
    border: 1px solid #999;
}

.top-aligned-row {  vertical-align: top }
.bottom-aligned-row { vertical-align: bottom }

/* --- Context section classes ----------------------- */

.context-row { }
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
.context-item-value { font-size: small; color: #448; }
.context-item-desc { color: #333; padding-left: 2em; }

/* --- Method classes -------------------------- */
.method-detail {
    background: #efefef;
    padding: 0;
    margin-top: 0.5em;
    margin-bottom: 1em;
    border: 1px dotted #ccc;
}
.method-heading {
  color: black;
  background: #ccc;
  border-bottom: 1px solid #666;
  padding: 0.2em 0.5em 0 0.5em;
}
.method-signature { color: black; background: inherit; }
.method-name { font-weight: bold; }
.method-args { font-style: italic; }
.method-description { padding: 0 0.5em 0 0.5em; }

/* --- Source code sections -------------------- */

a.source-toggle { font-size: 90%; }
div.method-source-code {
    background: #262626;
    color: #ffdead;
    margin: 1em;
    padding: 0.5em;
    border: 1px dashed #999;
    overflow: scroll;
}

div.method-source-code pre {
    color: #ffdead;
    overflow: visible;
}


/* --- Ruby keyword styles --------------------- */

.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }

.ruby-constant  { color: #7fffd4; background: transparent; }
.ruby-keyword { color: #00ffff; background: transparent; }
.ruby-ivar    { color: #eedd82; background: transparent; }
.ruby-operator  { color: #00ffee; background: transparent; }
.ruby-identifier { color: #ffdead; background: transparent; }
.ruby-node    { color: #ffa07a; background: transparent; }
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
.ruby-regexp  { color: #ffa07a; background: transparent; }
.ruby-value   { color: #7fffd4; background: transparent; }

/* --- MathML styles --------------------- */

math {
    font-size:   150%;
}
EOF
XHTML_PREAMBLE =

Notation

Following “<?xml-stylesheet … ?>” line is a special setting for Internet Explorer. If you use Mozilla or Firefox, this line is needless. (Anyway, this line doesn’t harm these browsers). Due to this line, if you use Safari (Mac OS X, standard browser), XHTML is not displayed correctly. (I think Safari can not handle xml-stylesheet correctly). If you use Safari, do not use –mathml option.

Following URLs are references

<<-EOF
<?xml version="1.0" encoding="<%= values["charset"] %>"?>
<?xml-stylesheet type="text/xsl" href="<%= values["mathml_xsl_url"] %>"?>
<!DOCTYPE html
   PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" 
   "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
EOF
HEADER =
XHTML_PREAMBLE + <<-EOF
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title><%= values["title"] %></title>
  <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
  <style type="text/css">
    <!-- Make codeblocks hidden by default -->
    div.method-source-code { display: none }
  </style>
  <script type="text/javascript">
  // <![CDATA[

  function popupCode( url ) {
    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
  }

  function toggleCode( id ) {
    if ( document.getElementById )
      elem = document.getElementById( id );
    else if ( document.all )
      elem = eval( "document.all." + id );
    else
      return false;

    elemStyle = elem.style;

    if ( elemStyle.display != "block" ) {
      elemStyle.display = "block"
    } else {
      elemStyle.display = "none"
    }

    return true;
  }

  // ]]>
  </script>

</head>
<body>
EOF
CONTEXT_CONTENT =

C O N T E X T C O N T E N T T E M P L A T E

%{
}
<<-EOF
<div id="validator-badges">
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
</div>

</body>
</html>
EOF
FILE_PAGE =

F I L E P A G E H E A D E R T E M P L A T E

<<-EOF
<div id="fileHeader">
  <h1><%= values["short_name"] %></h1>
  <table class="header-table">
  <tr class="top-aligned-row">
    <td><strong>Path:</strong></td>
    <td><%= values["full_path"] %>
<% if values["cvsurl"] then %>
      &nbsp;(<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
    </td>
  </tr>
  <tr class="top-aligned-row">
    <td><strong>Last Update:</strong></td>
    <td><%= values["dtm_modified"] %></td>
  </tr>
  </table>
</div>
EOF
CLASS_PAGE =

C L A S S P A G E H E A D E R T E M P L A T E

<<-EOF
  <div id="classHeader">
      <table class="header-table">
      <tr class="top-aligned-row">
        <td><strong><%= values["classmod"] %></strong></td>
        <td class="class-name-in-header"><%= values["full_name"] %></td>
      </tr>
      <tr class="top-aligned-row">
          <td><strong>In:</strong></td>
          <td>
<% values["infiles"].each do |infiles| %>
<% if infiles["full_path_url"] then %>
              <a href="<%= infiles["full_path_url"] %>">
<% end %>
              <%= infiles["full_path"] %>
<% if infiles["full_path_url"] then %>
              </a>
<% end %>
<% if infiles["cvsurl"] then %>
      &nbsp;(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
      <br />
<% end # values["infiles"] %>
          </td>
      </tr>

<% if values["parent"] then %>
      <tr class="top-aligned-row">
          <td><strong>Parent:</strong></td>
          <td>
<% if values["par_url"] then %>
              <a href="<%= values["par_url"] %>">
<% end %>
              <%= values["parent"] %>
<% if values["par_url"] then %>
             </a>
<% end %>
          </td>
      </tr>
<% end %>
      </table>
  </div>
EOF
METHOD_LIST =

M E T H O D L I S T T E M P L A T E

<<-EOF

<div id="contextContent">
<% if values["diagram"] then %>
  <div id="diagram">
    <%= values["diagram"] %>
  </div>
<% end %>

<% if values["description"] then %>
  <div id="description">
    <%= values["description"] %>
  </div>
<% end %>

<% if values["requires"] then %>
  <div id="requires-list">
    <h3 class="section-bar">Required files</h3>

    <div class="name-list">
<% values["requires"].each do |requires| %>
      <%= href requires["aref"], requires["name"] %>&nbsp;&nbsp;
<% end # values["requires"] %>
    </div>
  </div>
<% end %>

<% if values["toc"] then %>
  <div id="contents-list">
    <h3 class="section-bar">Contents</h3>
    <ul>
<% values["toc"].each do |toc| %>
    <li><a href="#<%= values["href"] %>"><%= values["secname"] %></a></li>
<% end # values["toc"] %>
   </ul>
<% end %>
 </div>

<% if values["methods"] then %>
  <div id="method-list">
    <h3 class="section-bar">Methods</h3>

    <div class="name-list">
<% values["methods"].each do |methods| %>
      <%= href methods["aref"], methods["name"] %>&nbsp;&nbsp;
<% end # values["methods"] %>
    </div>
  </div>
<% end %>

</div>


  <!-- if includes -->
<% if values["includes"] then %>
  <div id="includes">
    <h3 class="section-bar">Included Modules</h3>

    <div id="includes-list">
<% values["includes"].each do |includes| %>
      <span class="include-name"><%= href includes["aref"], includes["name"] %></span>
<% end # values["includes"] %>
    </div>
  </div>
<% end %>

<% values["sections"].each do |sections| %>
  <div id="section">
<% if sections["sectitle"] then %>
    <h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
<% if sections["seccomment"] then %>
    <div class="section-comment">
      <%= sections["seccomment"] %>
    </div>
<% end %>
<% end %>

<% if values["classlist"] then %>
  <div id="class-list">
    <h3 class="section-bar">Classes and Modules</h3>

    <%= values["classlist"] %>
  </div>
<% end %>

<% if values["constants"] then %>
  <div id="constants-list">
    <h3 class="section-bar">Constants</h3>

    <div class="name-list">
      <table summary="Constants">
<% values["constants"].each do |constants| %>
      <tr class="top-aligned-row context-row">
        <td class="context-item-name"><%= constants["name"] %></td>
        <td>=</td>
        <td class="context-item-value"><%= constants["value"] %></td>
<% if values["desc"] then %>
        <td width="3em">&nbsp;</td>
        <td class="context-item-desc"><%= constants["desc"] %></td>
<% end %>
      </tr>
<% end # values["constants"] %>
      </table>
    </div>
  </div>
<% end %>

<% if values["aliases"] then %>
  <div id="aliases-list">
    <h3 class="section-bar">External Aliases</h3>

    <div class="name-list">
                      <table summary="aliases">
<% values["aliases"].each do |aliases| $stderr.puts({ :aliases => aliases }.inspect) %>
      <tr class="top-aligned-row context-row">
        <td class="context-item-name"><%= values["old_name"] %></td>
        <td>-&gt;</td>
        <td class="context-item-value"><%= values["new_name"] %></td>
      </tr>
<% if values["desc"] then %>
    <tr class="top-aligned-row context-row">
      <td>&nbsp;</td>
      <td colspan="2" class="context-item-desc"><%= values["desc"] %></td>
    </tr>
<% end %>
<% end # values["aliases"] %>
      </table>
    </div>
  </div>
<% end %>


<% if values["attributes"] then %>
  <div id="attribute-list">
    <h3 class="section-bar">Attributes</h3>

    <div class="name-list">
      <table>
<% values["attributes"].each do |attributes| $stderr.puts({ :attributes => attributes }.inspect) %>
      <tr class="top-aligned-row context-row">
        <td class="context-item-name"><%= values["name"] %></td>
<% if values["rw"] then %>
        <td class="context-item-value">&nbsp;[<%= values["rw"] %>]&nbsp;</td>
<% end %>
<% unless values["rw"] then %>
        <td class="context-item-value">&nbsp;&nbsp;</td>
<% end %>
        <td class="context-item-desc"><%= values["a_desc"] %></td>
      </tr>
<% end # values["attributes"] %>
      </table>
    </div>
  </div>
<% end %>
    


  <!-- if method_list -->
<% if sections["method_list"] then %>
  <div id="methods">
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
    <h3 class="section-bar"><%= method_list["type"] %> <%= method_list["category"] %> methods</h3>

<% method_list["methods"].each do |methods| %>
    <div id="method-<%= methods["aref"] %>" class="method-detail">
      <a name="<%= methods["aref"] %>"></a>

      <div class="method-heading">
<% if methods["codeurl"] then %>
        <a href="<%= methods["codeurl"] %>" target="Code" class="method-signature"
          onclick="popupCode('<%= methods["codeurl"] %>');return false;">
<% end %>
<% if methods["sourcecode"] then %>
        <a href="#<%= methods["aref"] %>" class="method-signature">
<% end %>
<% if methods["callseq"] then %>
        <span class="method-name"><%= methods["callseq"] %></span>
<% end %>
<% unless methods["callseq"] then %>
        <span class="method-name"><%= methods["name"] %></span><span class="method-args"><%= methods["params"] %></span>
<% end %>
<% if methods["codeurl"] then %>
        </a>
<% end %>
<% if methods["sourcecode"] then %>
        </a>
<% end %>
      </div>

      <div class="method-description">
<% if methods["m_desc"] then %>
        <%= methods["m_desc"] %>
<% end %>
<% if methods["sourcecode"] then %>
        <p><a class="source-toggle" href="#"
          onclick="toggleCode('<%= methods["aref"] %>-source');return false;">[Source]</a></p>
        <div class="method-source-code" id="<%= methods["aref"] %>-source">
<pre>
<%= methods["sourcecode"] %>
</pre>
        </div>
<% end %>
      </div>
    </div>

<% end # method_list["methods"] %>
<% end %>
<% end # sections["method_list"] %>

  </div>
<% end %>
<% end # values["sections"] %>
EOF
BODY =

B O D Y T E M P L A T E

HEADER + %{

<%= template_include %>  <!-- banner header -->

  <div id="bodyContent">

} +  METHOD_LIST + %{

  </div>

} + FOOTER
SRC_PAGE =

S O U R C E C O D E T E M P L A T E

XHTML_PREAMBLE + <<-EOF
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
</head>
<body class="standalone-code">
<pre><%= values["code"] %></pre>
</body>
</html>
EOF
FR_INDEX_BODY =

I N D E X F I L E T E M P L A T E S

%{
<%= template_include %>
}
FILE_INDEX =
XHTML_PREAMBLE + <<-EOF
<!--

  <%= values["list_title"] %>

-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><%= values["list_title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" />
<base target="docwin" />
</head>
<body>
<div id="index">
<h1 class="section-bar"><%= values["list_title"] %></h1>
<div id="index-entries">
<% values["entries"].each do |entries| %>
  <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
<% end # values["entries"] %>
</div>
</div>
</body>
</html>
EOF
CLASS_INDEX =
FILE_INDEX
METHOD_INDEX =
FILE_INDEX
INDEX =
<<-EOF
<?xml version="1.0" encoding="<%= values["charset"] %>"?>
<!DOCTYPE html
   PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!--

  <%= values["title"] %>

-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
</head>
<frameset rows="20%, 80%">
  <frameset cols="25%,35%,45%">
      <frame src="fr_file_index.html"   title="Files" name="Files" />
      <frame src="fr_class_index.html"  name="Classes" />
      <frame src="fr_method_index.html" name="Methods" />
  </frameset>
  <frame src="<%= values["initial_page"] %>" name="docwin" />
</frameset>
</html>
EOF