1beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<?xml version="1.0" encoding="ascii"?>
2beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          "DTD/xhtml1-transitional.dtd">
4beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<head>
6beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <title>rjsmin</title>
7beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <link rel="stylesheet" href="epydoc.css" type="text/css" />
8beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <script type="text/javascript" src="epydoc.js"></script>
9beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</head>
10beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
11beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<body bgcolor="white" text="black" link="blue" vlink="#204080"
12beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      alink="#204080">
13beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<!-- ==================== NAVIGATION BAR ==================== -->
14beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<table class="navbar" border="0" width="100%" cellpadding="0"
15beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik       bgcolor="#a0c0ff" cellspacing="0">
16beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <tr valign="middle">
17beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Home link -->
18beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th bgcolor="#70b0f0" class="navbar-select"
19beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
20beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
21beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Tree link -->
22beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th>&nbsp;&nbsp;&nbsp;<a
23beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
24beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
25beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Index link -->
26beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th>&nbsp;&nbsp;&nbsp;<a
27beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
28beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
29beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Help link -->
30beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th>&nbsp;&nbsp;&nbsp;<a
31beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
32beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
33beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Project homepage -->
34beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th class="navbar" align="right" width="100%">
35beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <table border="0" cellpadding="0" cellspacing="0">
36beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          <tr><th class="navbar" align="center"
37beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
38beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          </tr></table></th>
39beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </tr>
40beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</table>
41beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<table width="100%" cellpadding="0" cellspacing="0">
42beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <tr valign="top">
43beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <td width="100%">
44beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <span class="breadcrumbs">
45beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        Module&nbsp;rjsmin
46beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </span>
47beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    </td>
48beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <td>
49beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <table cellpadding="0" cellspacing="0">
50beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <!-- hide/show private -->
51beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </table>
52beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    </td>
53beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </tr>
54beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</table>
55beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<!-- ==================== MODULE DESCRIPTION ==================== -->
56beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<h1 class="epydoc">Module rjsmin</h1><p class="nomargin-top"><span class="codelink"><a href="rjsmin-pysrc.html">source&nbsp;code</a></span></p>
57beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>rJSmin is a javascript minifier written in python.</p>
58beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>The minifier is based on the semantics of <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</p>
59beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>The module is a re-implementation aiming for speed, so it can be used at
60beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikruntime (rather than during a preprocessing step). Usually it produces the
61beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craiksame results as the original <tt class="rst-docutils literal">jsmin.c</tt>. It differs in the following ways:</p>
62beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<ul class="rst-simple">
63beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>there is no error detection: unterminated string, regex and comment
64beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikliterals are treated as regular javascript code and minified as such.</li>
65beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>Control characters inside string and regex literals are left untouched; they
66beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikare not converted to spaces (nor to n)</li>
67beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>Newline characters are not allowed inside string and regex literals, except
68beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfor line continuations in string literals (ECMA-5).</li>
69beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>&quot;return /regex/&quot; is recognized correctly.</li>
70beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>&quot;+ +&quot; and &quot;- -&quot; sequences are not collapsed to '++' or '--'</li>
71beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>Newlines before ! operators are removed more sensibly</li>
72beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>Comments starting with an exclamation mark (<tt class="rst-docutils literal">!</tt>) can be kept optionally</li>
73beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>rJSmin does not handle streams, but only complete strings. (However, the
74beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikmodule provides a &quot;streamy&quot; interface).</li>
75beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</ul>
76beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>Since most parts of the logic are handled by the regex engine it's way faster
77beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikthan the original python port of <tt class="rst-docutils literal">jsmin.c</tt> by Baruch Even. The speed factor
78beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikvaries between about 6 and 55 depending on input and python version (it gets
79beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfaster the more compressed the input already is). Compared to the
80beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikspeed-refactored python port by Dave St.Germain the performance gain is less
81beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikdramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS
82beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfile for details.</p>
83beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.</p>
84beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>Both python 2 and python 3 are supported.</p>
85beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
86beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<hr />
87beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<div class="fields">      <p><strong>Copyright:</strong>
88beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        Copyright 2011 - 2014
89beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikAndr&#233; Malo or his licensors, as applicable
90beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </p>
91beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <p><strong>License:</strong>
92beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <p>Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
93beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikyou may not use this file except in compliance with the License.
94beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikYou may obtain a copy of the License at</p>
95beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<blockquote>
96beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<a class="rst-reference external" href="http://www.apache.org/licenses/LICENSE-2.0" target="_top">http://www.apache.org/licenses/LICENSE-2.0</a></blockquote>
97beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>Unless required by applicable law or agreed to in writing, software
98beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikdistributed under the License is distributed on an &quot;AS IS&quot; BASIS,
99beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
100beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikSee the License for the specific language governing permissions and
101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craiklimitations under the License.</p>
102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </p>
103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <p><strong>Version:</strong>
104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        1.0.10
105beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </p>
106beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <p><strong>Author:</strong>
107beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        Andr&#233; Malo
108beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </p>
109beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</div><!-- ==================== FUNCTIONS ==================== -->
110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<a name="section-Functions"></a>
111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<table class="summary" border="1" cellpadding="3"
112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik       cellspacing="0" width="100%" bgcolor="white">
113beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<tr bgcolor="#70b0f0" class="table-header">
114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <td align="left" colspan="2" class="table-header">
115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <span class="table-header">Functions</span></td>
116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</tr>
117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<tr>
118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <td width="15%" align="right" valign="top" class="summary">
119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <span class="summary-type"><tt class="rst-docutils literal">str</tt></span>
120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    </td><td class="summary">
121beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <table width="100%" cellpadding="0" cellspacing="0" border="0">
122beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <tr>
123beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          <td><span class="summary-sig"><a href="rjsmin-module.html#jsmin" class="summary-sig-name">jsmin</a>(<span class="summary-sig-arg">script</span>,
124beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <span class="summary-sig-arg">keep_bang_comments</span>=<span class="summary-sig-default">False</span>)</span><br />
125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      Minify javascript based on <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</td>
126beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          <td align="right" valign="top">
127beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik            
128beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik            
129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          </td>
130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        </tr>
131beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </table>
132beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      
133beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    </td>
134beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </tr>
135beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</table>
136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<!-- ==================== FUNCTION DETAILS ==================== -->
137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<a name="section-FunctionDetails"></a>
138beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<table class="details" border="1" cellpadding="3"
139beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik       cellspacing="0" width="100%" bgcolor="white">
140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<tr bgcolor="#70b0f0" class="table-header">
141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <td align="left" colspan="2" class="table-header">
142beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <span class="table-header">Function Details</span></td>
143beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</tr>
144beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</table>
145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<a name="jsmin"></a>
146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<div>
147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<table class="details" border="1" cellpadding="3"
148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik       cellspacing="0" width="100%" bgcolor="white">
149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<tr><td>
150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <table width="100%" cellpadding="0" cellspacing="0" border="0">
151beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <tr valign="top"><td>
152beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <h3 class="epydoc"><span class="sig"><span class="sig-name">jsmin</span>(<span class="sig-arg">script</span>,
153beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <span class="sig-arg">keep_bang_comments</span>=<span class="sig-default">False</span>)</span>
154beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </h3>
155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </td><td align="right" valign="top"
156beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    >&nbsp;
157beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    </td>
158beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </tr></table>
159beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  
160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <p>Minify javascript based on <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</p>
161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<p>Instead of parsing the stream char by char, it uses a regular
162beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikexpression approach which minifies the whole script with one big
163beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craiksubstitution regex.</p>
164beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <dl class="fields">
165beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <dt>Parameters:</dt>
166beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <dd><ul class="nomargin-top">
167beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <li><strong class="pname"><code>script</code></strong> (<tt class="rst-docutils literal">str</tt>) - Script to minify</li>
168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <li><strong class="pname"><code>keep_bang_comments</code></strong> (<tt class="rst-docutils literal">bool</tt>) - Keep comments starting with an exclamation mark? (<tt class="rst-docutils literal"><span class="pre">/*!...*/</span></tt>)</li>
169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    </ul></dd>
170beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik    <dt>Returns: <tt class="rst-docutils literal">str</tt></dt>
171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <dd>Minified script</dd>
172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </dl>
173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<div class="fields">      <p><strong>Note:</strong>
174beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        This is a hand crafted C implementation built on the regex
175beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craiksemantics.
176beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      </p>
177beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</div></td></tr></table>
178beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</div>
179beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<br />
180beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<!-- ==================== NAVIGATION BAR ==================== -->
181beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<table class="navbar" border="0" width="100%" cellpadding="0"
182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik       bgcolor="#a0c0ff" cellspacing="0">
183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <tr valign="middle">
184beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Home link -->
185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th bgcolor="#70b0f0" class="navbar-select"
186beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Tree link -->
189beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th>&nbsp;&nbsp;&nbsp;<a
190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
192beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Index link -->
193beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th>&nbsp;&nbsp;&nbsp;<a
194beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
195beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Help link -->
197beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th>&nbsp;&nbsp;&nbsp;<a
198beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
199beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
200beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!-- Project homepage -->
201beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik      <th class="navbar" align="right" width="100%">
202beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik        <table border="0" cellpadding="0" cellspacing="0">
203beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          <tr><th class="navbar" align="center"
204beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
205beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik          </tr></table></th>
206beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  </tr>
207beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</table>
208beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik
209beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<script type="text/javascript">
210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  <!--
211beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  // Private objects are initially displayed (because if
212beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  // javascript is turned off then we want them to be
213beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  // visible); but by default, we want to hide them.  So hide
214beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  // them unless we have a cookie that says to show them.
215beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  checkCookie();
216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik  // -->
217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</script>
218beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</body>
219beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik</html>
220