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 > Home </th> 20beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 21beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <!-- Tree link --> 22beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <th> <a 23beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik href="module-tree.html">Trees</a> </th> 24beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 25beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <!-- Index link --> 26beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <th> <a 27beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik href="identifier-index.html">Indices</a> </th> 28beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 29beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <!-- Help link --> 30beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <th> <a 31beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik href="help.html">Help</a> </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 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 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>"return /regex/" is recognized correctly.</li> 70beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik<li>"+ +" and "- -" 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 "streamy" 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é 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 "License"); 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 "AS IS" 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é 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 > 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 > Home </th> 187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <!-- Tree link --> 189beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <th> <a 190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik href="module-tree.html">Trees</a> </th> 191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 192beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <!-- Index link --> 193beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <th> <a 194beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik href="identifier-index.html">Indices</a> </th> 195beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <!-- Help link --> 197beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik <th> <a 198beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik href="help.html">Help</a> </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