annotate docs.html @ 26:c4181cc0771d

Fixed a bug whereby pydermonkey.Object instances couldn't be passed from python-space into JS-space. I think.
author Atul Varma <varmaa@toolness.com>
date Sun, 21 Mar 2010 22:11:51 -0700
parents 351819baecd1
children d28100e071a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
1 <?xml version="1.0" encoding="utf-8" ?>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4 <head>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
22
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
7 <title>Pydertron</title>
21
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 <link rel="stylesheet" href="docs.css" type="text/css" />
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 </head>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 <body>
22
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
11 <div class="document" id="pydertron">
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
12 <h1 class="title">Pydertron</h1>
25
351819baecd1 Updated docs.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
13 <p>Pydertron is an experimental high-level wrapper for <a class="reference" href="http://code.google.com/p/pydermonkey">Pydermonkey</a>
351819baecd1 Updated docs.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
14 that provides convenient, secure object wrapping between JS and Python
21
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
15 space.</p>
24
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
16 <p>Note that Pydertron is just one example of a high-level interface
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
17 between Python and JavaScript: it assumes, for instance, that the JS
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
18 code it executes isn't trusted, which affects the nature of the
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
19 inter-language interaction.</p>
25
351819baecd1 Updated docs.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
20 <p>Pydertron is currently hosted at
351819baecd1 Updated docs.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
21 <a class="reference" href="http://hg.toolness.com/pydertron">http://hg.toolness.com/pydertron</a>. Please feel free to send any
351819baecd1 Updated docs.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
22 questions or comments to <a class="reference" href="mailto:atul&#64;mozilla.com">atul&#64;mozilla.com</a>.</p>
24
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
23 <div class="section">
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
24 <h1><a id="the-basics" name="the-basics">The Basics</a></h1>
21
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
25 <p>The <tt class="docutils literal"><span class="pre">JsSandbox</span></tt> class encapsulates a JavaScript runtime, context, global
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
26 object, and a simple <a class="reference" href="http://wiki.commonjs.org/wiki/CommonJS/Modules/SecurableModules">SecurableModule</a> implementation that complies
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
27 with the <a class="reference" href="http://wiki.commonjs.org/wiki/CommonJS">CommonJS</a> standard. It also provides a high-level bridge between
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
28 Python and JavaScript so that you don't need to deal with any of the
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
29 low-level details of the Pydermonkey API.</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
30 <p>For instance, here we'll create a <tt class="docutils literal"><span class="pre">JsSandbox</span></tt> whose module root
23
7cbbec55aef6 Minor modifications.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
31 points to the <a class="reference" href="http://interoperablejs.googlecode.com/svn/trunk/compliance/monkeys/">monkeys</a> SecurableModule compliance test over HTTP:</p>
21
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
32 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
33 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
34 &gt;&gt;&gt; url = (&quot;http://interoperablejs.googlecode.com/svn/trunk/&quot;
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
35 ... &quot;compliance/monkeys/&quot;)
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
36 &gt;&gt;&gt; sandbox = JsSandbox(HttpFileSystem(url))
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
38 </blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
39 <p>This compliance test requires a global <tt class="docutils literal"><span class="pre">sys</span></tt> object that contains one
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
40 method, <tt class="docutils literal"><span class="pre">print()</span></tt>, that takes two arguments. First, we'll create the
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41 <tt class="docutils literal"><span class="pre">print()</span></tt> function and prepare it for exposure to JS code:</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
42 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
43 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
44 &gt;&gt;&gt; &#64;jsexposed
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
45 ... def jsprint(message, label):
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
46 ... print message, label
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
47 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
48 </blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
49 <p>Note the use of the <tt class="docutils literal"><span class="pre">&#64;jsexposed</span></tt> decorator: all this does is set
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50 the function's <tt class="docutils literal"><span class="pre">__jsexposed__</span></tt> attribute to <tt class="docutils literal"><span class="pre">True</span></tt>. This is
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 done for security purposes: only Python callables satisfying this
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 criteria will be exposed to JavaScript code, to ensure that
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53 untrusted JS can't accidentally gain access to privileged Python
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 functionality.</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55 <p>Creating a JS object can be done like this:</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
57 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
58 &gt;&gt;&gt; system = sandbox.new_object()
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
59 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 </blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 <p>We can now access and set properties on this object via either
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 item or attribute lookup, just like in JavaScript. Because
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63 <tt class="docutils literal"><span class="pre">print</span></tt> is a reserved word in Python, though, we'll use item
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64 lookup to set the property here:</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 &gt;&gt;&gt; system['print'] = jsprint
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69 </blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 <p>Now we tell the sandbox that we want the <tt class="docutils literal"><span class="pre">sys</span></tt> object to be a
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 global:</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74 &gt;&gt;&gt; sandbox.set_globals(sys = system)
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 </blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77 <p>And finally, we execute the compliance test by running a one-line
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 script that imports the 'program' module, like so:</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
79 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
80 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
81 &gt;&gt;&gt; sandbox.run_script(&quot;require('program');&quot;)
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
82 PASS monkeys permitted pass
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
83 DONE info
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
84 0
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
85 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 </blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 <p>Note the <tt class="docutils literal"><span class="pre">0</span></tt> in the last line: this is the return value of
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88 <tt class="docutils literal"><span class="pre">sandbox.run_script()</span></tt>, which returns <tt class="docutils literal"><span class="pre">0</span></tt> on success, and
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89 <tt class="docutils literal"><span class="pre">-1</span></tt> if an exception was raised. For instance, the output of bad
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
90 code looks like this:</p>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
91 <blockquote>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
92 <pre class="doctest-block">
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
93 &gt;&gt;&gt; sandbox.run_script(&quot;(function foo() { bar(); })();&quot;,
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
94 ... stderr=sys.stdout)
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
95 Traceback (most recent call last):
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
96 File &quot;&lt;string&gt;&quot;, line 1, in &lt;module&gt;
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
97 File &quot;&lt;string&gt;&quot;, line 1, in foo
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
98 ReferenceError: bar is not defined
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
99 -1
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
100 </pre>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
101 </blockquote>
24
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
102 <p>Note that the traceback displayed is actually referring to JavaScript
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
103 code: one of Pydertron's aims is to make debugging JS code as much
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
104 like debugging Python code as possible.</p>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
105 </div>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
106 <div class="section">
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
107 <h1><a id="exceptions" name="exceptions">Exceptions</a></h1>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
108 <p>Any exceptions raised by wrapped Python functions need to be of type
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
109 <tt class="docutils literal"><span class="pre">pydermonkey.error</span></tt> to be propagated into calling JavaScript code;
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
110 if they're not, then for security purposes, the entire JavaScript call
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
111 stack is unrolled.</p>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
112 <p>For example, here's a function that's bound to fail:</p>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
113 <blockquote>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
114 <pre class="doctest-block">
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
115 &gt;&gt;&gt; &#64;jsexposed
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
116 ... def fail():
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
117 ... o()
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
118 &gt;&gt;&gt; sandbox.root.fail = fail
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
119 </pre>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
120 </blockquote>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
121 <p>Now, even though the following JS code calls the function in a
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
122 try-catch block, the JS code doesn't catch anything and its execution
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
123 is simply halted:</p>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
124 <blockquote>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
125 <pre class="doctest-block">
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
126 &gt;&gt;&gt; sandbox.run_script(&quot;try { fail(); } catch (e) {}&quot;,
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
127 ... stderr=sys.stdout) #doctest: +ELLIPSIS
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
128 An internal error occurred.
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
129 Traceback (most recent call last):
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
130 ...
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
131 NameError: global name 'o' is not defined
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
132 -1
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
133 </pre>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
134 </blockquote>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
135 <p>Note that a <tt class="docutils literal"><span class="pre">KeyboardInterrupt</span></tt> triggered while JS is executing will
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
136 have similar effect.</p>
c2c369402a2e Added more docs, fixed edge cases.
Atul Varma <varmaa@toolness.com>
parents: 23
diff changeset
137 </div>
22
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
138 </div>
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
139 <div class="footer">
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
140 <hr class="footer" />
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
141 <a class="reference" href="docs.txt">View document source</a>.
915fdf283ac5 Moved docs out to a separate file.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
142
21
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
143 </div>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
144 </body>
cb73bb169b67 Added html docs.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
145 </html>