diff options
author | Trey Hunner <treyhunner@gmail.com> | 2011-10-07 13:12:01 -0700 |
---|---|---|
committer | Trey Hunner <treyhunner@gmail.com> | 2011-10-07 13:12:01 -0700 |
commit | 88adf7c32eb64428dee3751a935ca5fa577f083b (patch) | |
tree | fb0db9902105970855ba64ca06f31735d43a6de9 | |
parent | 2e14d0a70a398fcf91b7c79b6bf9d166cc42ddac (diff) | |
download | pycco-88adf7c32eb64428dee3751a935ca5fa577f083b.tar.gz |
Regenerate documentation
-rw-r--r-- | index.html | 586 |
1 files changed, 422 insertions, 164 deletions
@@ -22,36 +22,36 @@ <div class="octowrap"> <a class="octothorpe" href="#section-0">#</a> </div> - - </td> - <td class=code> - <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> - </td> - </tr><tr id='section-1'> - <td class=docs> - <div class="octowrap"> - <a class="octothorpe" href="#section-1">#</a> - </div> - <p><strong>Pycco</strong> is a Python port of <a href="http://jashkenas.github.com/docco/">Docco</a>: + <p>"<strong>Pycco</strong>" is a Python port of <a href="http://jashkenas.github.com/docco/">Docco</a>: the original quick-and-dirty, hundred-line-long, literate-programming-style documentation generator. It produces HTML that displays your comments alongside your code. Comments are passed through -<a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a>, and code is -passed through <a href="http://pygments.org/">Pygments</a> syntax highlighting. This -page is the result of running Pycco against its own source file.</p> +<a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a> and +<a href="http://daringfireball.net/projects/smartypants">SmartyPants</a>, while code is +passed through <a href="http://pygments.org/">Pygments</a> for syntax highlighting. +This page is the result of running Pycco against its own source file.</p> <p>If you install Pycco, you can run it from the command-line:</p> -<pre><code>pycco src/*.py -</code></pre> +<p>pycco src/*.py</p> <p>This will generate linked HTML documentation for the named source files, saving it into a <code>docs</code> folder by default.</p> +<p>The <a href="https://github.com/fitzgen/pycco">source for Pycco</a> is available on GitHub, +and released under the MIT license.</p> <p>To install Pycco, simply</p> -<pre><code>pip install pycco -</code></pre> +<p>pip install pycco</p> <p>Or, to install the latest source</p> -<pre><code>git clone git://github.com/fitzgen/pycco.git +<p>git clone git://github.com/fitzgen/pycco.git cd pycco -python setup.py install -</code></pre> +python setup.py install</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> + </td> + </tr><tr id='section-1'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-1">#</a> + </div> + </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> @@ -71,38 +71,55 @@ python setup.py install <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> - <p>Generate the documentation for a source file by reading it in, splitting it up -into comment/code sections, highlighting them for the appropriate language, -and merging them into an HTML template.</p> + <p>Generate the documentation for a source file by reading it in, splitting it +up into comment/code sections, highlighting them for the appropriate +language, and merging them into an HTML template.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">generate_documentation</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">generate_documentation</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-4'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-4">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument."</span><span class="p">)</span> <span class="n">fh</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="s">"r"</span><span class="p">)</span> <span class="n">sections</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">fh</span><span class="o">.</span><span class="n">read</span><span class="p">())</span> <span class="n">highlight</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sections</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="n">preserve_paths</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">)</span> <span class="k">return</span> <span class="n">generate_html</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sections</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="n">preserve_paths</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-4'> + </tr><tr id='section-5'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-4">#</a> + <a class="octothorpe" href="#section-5">#</a> </div> <p>Given a string of source code, parse out each comment and the code that follows it, and create an individual <strong>section</strong> for it. Sections take the form:</p> -<pre><code>{ "docs_text": ..., - "docs_html": ..., - "code_text": ..., - "code_html": ..., - "num": ... +<pre>{ "docs_text": ..., +"docs_html": ..., +"code_text": ..., +"code_html": ..., +"num": ... } -</code></pre> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span> - <span class="n">lines</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-6'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-6">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">lines</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> <span class="n">sections</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">language</span> <span class="o">=</span> <span class="n">get_language</span><span class="p">(</span><span class="n">source</span><span class="p">)</span> <span class="n">has_code</span> <span class="o">=</span> <span class="n">docs_text</span> <span class="o">=</span> <span class="n">code_text</span> <span class="o">=</span> <span class="s">""</span> @@ -116,60 +133,66 @@ Sections take the form:</p> <span class="n">lines</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">linenum</span><span class="p">)</span> <span class="k">break</span></pre></div></pre></div> </td> - </tr><tr id='section-5'> + </tr><tr id='section-7'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-5">#</a> + <a class="octothorpe" href="#section-7">#</a> </div> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="n">docs</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span> - <span class="n">sections</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> - <span class="s">"docs_text"</span><span class="p">:</span> <span class="n">docs</span><span class="p">,</span> - <span class="s">"code_text"</span><span class="p">:</span> <span class="n">code</span> - <span class="p">})</span></pre></div></pre></div> + <span class="k">if</span> <span class="n">docs</span> <span class="ow">or</span> <span class="n">code</span><span class="p">:</span> + <span class="n">sections</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> + <span class="s">"docs_text"</span><span class="p">:</span> <span class="n">docs</span><span class="p">,</span> + <span class="s">"code_text"</span><span class="p">:</span> <span class="n">code</span> + <span class="p">})</span></pre></div></pre></div> </td> - </tr><tr id='section-6'> + </tr><tr id='section-8'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-6">#</a> + <a class="octothorpe" href="#section-8">#</a> </div> <p>Setup the variables to get ready to check for multiline comments</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="n">preformatted</span> <span class="o">=</span> <span class="n">multi_line</span> <span class="o">=</span> <span class="bp">False</span> <span class="n">last_scope</span> <span class="o">=</span> <span class="mi">0</span> - <span class="n">multi_line_delimeters</span> <span class="o">=</span> <span class="p">[</span><span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"multistart"</span><span class="p">),</span> <span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"multiend"</span><span class="p">)]</span> + <span class="n">multi_line_delimiters</span> <span class="o">=</span> <span class="p">[</span><span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"multistart"</span><span class="p">),</span> <span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"multiend"</span><span class="p">)]</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span></pre></div></pre></div> </td> - </tr><tr id='section-7'> + </tr><tr id='section-9'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-7">#</a> + <a class="octothorpe" href="#section-9">#</a> </div> - <p>Only go into multiline comments section when one of the delimeters is + <p>Only go into multiline comments section when one of the delimiters is found to be at the start of a line</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">multi_line_delimeters</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">([</span><span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">delim</span><span class="p">)</span> <span class="k">for</span> <span class="n">delim</span> <span class="ow">in</span> <span class="n">multi_line_delimeters</span><span class="p">]):</span> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">multi_line_delimiters</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">([</span><span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">delim</span><span class="p">)</span> <span class="k">for</span> <span class="n">delim</span> <span class="ow">in</span> <span class="n">multi_line_delimiters</span><span class="p">]):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">multi_line</span><span class="p">:</span> <span class="n">multi_line</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">else</span><span class="p">:</span> + <span class="n">multi_line</span> <span class="o">=</span> <span class="bp">False</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">multi_line</span> + <span class="ow">and</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"multiend"</span><span class="p">))</span> + <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"multiend"</span><span class="p">))):</span> <span class="n">multi_line</span> <span class="o">=</span> <span class="bp">False</span></pre></div></pre></div> </td> - </tr><tr id='section-8'> + </tr><tr id='section-10'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-8">#</a> + <a class="octothorpe" href="#section-10">#</a> </div> - <p>Get rid of the delimeters so that they aren't in the final docs</p> + <p>Get rid of the delimiters so that they aren't in the final docs</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre> <span class="n">line</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"multistart"</span><span class="p">],</span><span class="s">''</span><span class="p">,</span><span class="n">line</span><span class="p">)</span> - <span class="n">line</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"multiend"</span><span class="p">],</span><span class="s">''</span><span class="p">,</span><span class="n">line</span><span class="p">)</span> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">line</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"multistart"</span><span class="p">]),</span><span class="s">''</span><span class="p">,</span><span class="n">line</span><span class="p">)</span> + <span class="n">line</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"multiend"</span><span class="p">]),</span><span class="s">''</span><span class="p">,</span><span class="n">line</span><span class="p">)</span> <span class="n">docs_text</span> <span class="o">+=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">+</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> <span class="k">if</span> <span class="n">has_code</span> <span class="ow">and</span> <span class="n">docs_text</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> @@ -182,10 +205,10 @@ found to be at the start of a line</p> <span class="n">line_striped</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span> <span class="n">current_scope</span> <span class="o">=</span> <span class="n">line_striped</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">" "</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-9'> + </tr><tr id='section-11'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-9">#</a> + <a class="octothorpe" href="#section-11">#</a> </div> <p>This section will parse if the line is indented at least four places, and if so know to have the final text treat it as a @@ -202,10 +225,10 @@ preformatted text block.</p> <span class="n">preformatted</span> <span class="o">=</span> <span class="bp">False</span> <span class="n">docs_text</span> <span class="o">+=</span> <span class="s">"</pre>"</span></pre></div></pre></div> </td> - </tr><tr id='section-10'> + </tr><tr id='section-12'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-10">#</a> + <a class="octothorpe" href="#section-12">#</a> </div> <p>Keep a tracker var to see if the scope increases, that way later the code can decided if a section is indented more than 4 spaces @@ -222,47 +245,58 @@ from the leading code.</p> <span class="n">docs_text</span> <span class="o">+=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"comment_matcher"</span><span class="p">],</span> <span class="s">""</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="o">+</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span> <span class="k">else</span><span class="p">:</span> - <span class="k">if</span> <span class="n">code_text</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">([</span><span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'class '</span><span class="p">,</span> <span class="s">'def '</span><span class="p">]]):</span> - <span class="n">save</span><span class="p">(</span><span class="n">docs_text</span><span class="p">,</span> <span class="n">code_text</span><span class="p">)</span> - <span class="n">code_text</span> <span class="o">=</span> <span class="n">has_code</span> <span class="o">=</span> <span class="n">docs_text</span> <span class="o">=</span> <span class="s">''</span> + <span class="k">if</span> <span class="n">code_text</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">([</span><span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'class '</span><span class="p">,</span> <span class="s">'def '</span><span class="p">,</span> <span class="s">'@'</span><span class="p">]]):</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">code_text</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">"@"</span><span class="p">):</span> + <span class="n">save</span><span class="p">(</span><span class="n">docs_text</span><span class="p">,</span> <span class="n">code_text</span><span class="p">)</span> + <span class="n">code_text</span> <span class="o">=</span> <span class="n">has_code</span> <span class="o">=</span> <span class="n">docs_text</span> <span class="o">=</span> <span class="s">''</span> <span class="n">has_code</span> <span class="o">=</span> <span class="bp">True</span> <span class="n">code_text</span> <span class="o">+=</span> <span class="n">line</span> <span class="o">+</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> <span class="n">save</span><span class="p">(</span><span class="n">docs_text</span><span class="p">,</span> <span class="n">code_text</span><span class="p">)</span> + <span class="k">return</span> <span class="n">sections</span></pre></div></pre></div> </td> - </tr><tr id='section-11'> + </tr><tr id='section-13'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-11">#</a> + <a class="octothorpe" href="#section-13">#</a> </div> <h3><span id="preprocessing-the-comments" href="preprocessing-the-comments"> Preprocessing the comments </span></h3> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> </td> - </tr><tr id='section-12'> + </tr><tr id='section-14'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-12">#</a> + <a class="octothorpe" href="#section-14">#</a> </div> - <p>Add cross-references before having the text processed by markdown. It's + <p></pre>Add cross-references before having the text processed by markdown. It's possible to reference another file, like this : <code>[[main.py]]</code> which renders <a href="main.html">main.py</a>. You can also reference a specific section of another file, like this: <code>[[main.py#highlighting-the-source-code]]</code> which renders as <a href="main.html#highlighting-the-source-code">main.py</a>. Sections have to be manually declared; they are written on a single line, and surrounded by equals signs: <code>=== like this ===</code></p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="n">comment</span><span class="p">,</span> <span class="n">section_nr</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="n">comment</span><span class="p">,</span> <span class="n">section_nr</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-15'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-15">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument."</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-13'> + </tr><tr id='section-16'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-13">#</a> + <a class="octothorpe" href="#section-16">#</a> </div> </td> @@ -270,20 +304,20 @@ declared; they are written on a single line, and surrounded by equals signs: <div class='highlight'><pre><div class="highlight"><pre> <span class="k">def</span> <span class="nf">sanitize_section_name</span><span class="p">(</span><span class="n">name</span><span class="p">):</span> <span class="k">return</span> <span class="s">"-"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">" "</span><span class="p">))</span></pre></div></pre></div> </td> - </tr><tr id='section-14'> + </tr><tr id='section-17'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-14">#</a> + <a class="octothorpe" href="#section-17">#</a> </div> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="k">def</span> <span class="nf">replace_crossref</span><span class="p">(</span><span class="n">match</span><span class="p">):</span></pre></div></pre></div> </td> - </tr><tr id='section-15'> + </tr><tr id='section-18'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-15">#</a> + <a class="octothorpe" href="#section-18">#</a> </div> <p>Check if the match contains an anchor</p> </td> @@ -302,53 +336,63 @@ declared; they are written on a single line, and surrounded by equals signs: <span class="n">preserve_paths</span><span class="o">=</span><span class="n">preserve_paths</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">)))</span></pre></div></pre></div> </td> - </tr><tr id='section-16'> + </tr><tr id='section-19'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-16">#</a> + <a class="octothorpe" href="#section-19">#</a> </div> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="k">def</span> <span class="nf">replace_section_name</span><span class="p">(</span><span class="n">match</span><span class="p">):</span> - <span class="k">return</span> <span class="s">'### <span id="</span><span class="si">%(id)s</span><span class="s">" href="</span><span class="si">%(id)s</span><span class="s">"></span><span class="si">%(name)s</span><span class="s"></span>'</span> <span class="o">%</span> <span class="p">{</span> - <span class="s">"id"</span> <span class="p">:</span> <span class="n">sanitize_section_name</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> - <span class="s">"name"</span> <span class="p">:</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="k">return</span> <span class="s">'</span><span class="si">%(lvl)s</span><span class="s"> <span id="</span><span class="si">%(id)s</span><span class="s">" href="</span><span class="si">%(id)s</span><span class="s">"></span><span class="si">%(name)s</span><span class="s"></span>'</span> <span class="o">%</span> <span class="p">{</span> + <span class="s">"lvl"</span> <span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">'='</span><span class="p">,</span> <span class="s">'#'</span><span class="p">,</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span> + <span class="s">"id"</span> <span class="p">:</span> <span class="n">sanitize_section_name</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span> + <span class="s">"name"</span> <span class="p">:</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="p">}</span> - <span class="n">comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">'^===(.+)===</span><span class="se">\\</span><span class="s">n'</span><span class="p">,</span> <span class="n">replace_section_name</span><span class="p">,</span> <span class="n">comment</span><span class="p">)</span> + <span class="n">comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">'^([=]+)([^=]+)[=]*\s*$'</span><span class="p">,</span> <span class="n">replace_section_name</span><span class="p">,</span> <span class="n">comment</span><span class="p">)</span> <span class="n">comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">'[^`]\[\[(.+)\]\]'</span><span class="p">,</span> <span class="n">replace_crossref</span><span class="p">,</span> <span class="n">comment</span><span class="p">)</span> <span class="k">return</span> <span class="n">comment</span></pre></div></pre></div> </td> - </tr><tr id='section-17'> + </tr><tr id='section-20'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-17">#</a> + <a class="octothorpe" href="#section-20">#</a> </div> <h3><span id="highlighting-the-source-code" href="highlighting-the-source-code"> Highlighting the source code </span></h3> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> </td> - </tr><tr id='section-18'> + </tr><tr id='section-21'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-18">#</a> + <a class="octothorpe" href="#section-21">#</a> </div> - <p>Highlights a single chunk of code using the <strong>Pygments</strong> module, and runs the -text of its corresponding comment through <strong>Markdown</strong>.</p> + <p>Highlights a single chunk of code using the <strong>Pygments</strong> module, and runs +the text of its corresponding comment through <strong>Markdown</strong>.</p> <p>We process the entire file in a single call to Pygments by inserting little marker comments between each section and then splitting the result string wherever our markers occur.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">highlight</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sections</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">highlight</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sections</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-22'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-22">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument."</span><span class="p">)</span> <span class="n">language</span> <span class="o">=</span> <span class="n">get_language</span><span class="p">(</span><span class="n">source</span><span class="p">)</span> - <span class="n">output</span> <span class="o">=</span> <span class="n">pygments</span><span class="o">.</span><span class="n">highlight</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"divider_text"</span><span class="p">]</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">section</span><span class="p">[</span><span class="s">"code_text"</span><span class="p">]</span> <span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="n">sections</span><span class="p">),</span> + <span class="n">output</span> <span class="o">=</span> <span class="n">pygments</span><span class="o">.</span><span class="n">highlight</span><span class="p">(</span><span class="n">language</span><span class="p">[</span><span class="s">"divider_text"</span><span class="p">]</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">section</span><span class="p">[</span><span class="s">"code_text"</span><span class="p">]</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span> <span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="n">sections</span><span class="p">),</span> <span class="n">language</span><span class="p">[</span><span class="s">"lexer"</span><span class="p">],</span> <span class="n">formatters</span><span class="o">.</span><span class="n">get_formatter_by_name</span><span class="p">(</span><span class="s">"html"</span><span class="p">))</span> @@ -366,43 +410,52 @@ wherever our markers occur.</p> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">))</span> <span class="n">section</span><span class="p">[</span><span class="s">"num"</span><span class="p">]</span> <span class="o">=</span> <span class="n">i</span></pre></div></pre></div> </td> - </tr><tr id='section-19'> + </tr><tr id='section-23'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-19">#</a> + <a class="octothorpe" href="#section-23">#</a> </div> <h3><span id="html-code-generation" href="html-code-generation"> HTML Code generation </span></h3> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> </td> - </tr><tr id='section-20'> + </tr><tr id='section-24'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-20">#</a> + <a class="octothorpe" href="#section-24">#</a> </div> <p>Once all of the code is finished highlighting, we can generate the HTML file -and write out the documentation. Pass the completed sections into the template -found in <code>resources/pycco.html</code>.</p> +and write out the documentation. Pass the completed sections into the +template found in <code>resources/pycco.html</code>.</p> <p>Pystache will attempt to recursively render context variables, so we must replace any occurences of <code>{{</code>, which is valid in some languages, with a "unique enough" identifier before rendering, and then post-process the rendered template and change the identifier back to <code>{{</code>.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">generate_html</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sections</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">generate_html</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sections</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-25'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-25">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument"</span><span class="p">)</span> <span class="n">title</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">destination</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="n">preserve_paths</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">)</span> + <span class="n">csspath</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="s">"pycco.css"</span><span class="p">),</span> <span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">dest</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> <span class="k">for</span> <span class="n">sect</span> <span class="ow">in</span> <span class="n">sections</span><span class="p">:</span> <span class="n">sect</span><span class="p">[</span><span class="s">"code_html"</span><span class="p">]</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">r"\{\{"</span><span class="p">,</span> <span class="s">r"{{"</span><span class="p">,</span> <span class="n">sect</span><span class="p">[</span><span class="s">"code_html"</span><span class="p">])</span> <span class="n">rendered</span> <span class="o">=</span> <span class="n">pycco_template</span><span class="p">({</span> <span class="s">"title"</span> <span class="p">:</span> <span class="n">title</span><span class="p">,</span> - <span class="s">"stylesheet"</span> <span class="p">:</span> <span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="s">"pycco.css"</span><span class="p">),</span> - <span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">dest</span><span class="p">)[</span><span class="mi">0</span><span class="p">]),</span> + <span class="s">"stylesheet"</span> <span class="p">:</span> <span class="n">csspath</span><span class="p">,</span> <span class="s">"sections"</span> <span class="p">:</span> <span class="n">sections</span><span class="p">,</span> <span class="s">"source"</span> <span class="p">:</span> <span class="n">source</span><span class="p">,</span> <span class="s">"path"</span> <span class="p">:</span> <span class="n">path</span><span class="p">,</span> @@ -411,30 +464,30 @@ rendered template and change the identifier back to <code>{{</code>.</p> <span class="k">return</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">r"{{"</span><span class="p">,</span> <span class="s">"{{"</span><span class="p">,</span> <span class="n">rendered</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">"utf-8"</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-21'> + </tr><tr id='section-26'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-21">#</a> + <a class="octothorpe" href="#section-26">#</a> </div> <h3><span id="helpers-&-setup" href="helpers-&-setup"> Helpers & Setup </span></h3> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> </td> - </tr><tr id='section-22'> + </tr><tr id='section-27'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-22">#</a> + <a class="octothorpe" href="#section-27">#</a> </div> <p>This module contains all of our static resources.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre><span class="kn">import</span> <span class="nn">pycco_resources</span></pre></div></pre></div> </td> - </tr><tr id='section-23'> + </tr><tr id='section-28'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-23">#</a> + <a class="octothorpe" href="#section-28">#</a> </div> <p>Import our external dependencies.</p> </td> @@ -445,14 +498,15 @@ rendered template and change the identifier back to <code>{{</code>.</p> <span class="kn">import</span> <span class="nn">pystache</span> <span class="kn">import</span> <span class="nn">re</span> <span class="kn">import</span> <span class="nn">sys</span> +<span class="kn">import</span> <span class="nn">time</span> <span class="kn">from</span> <span class="nn">markdown</span> <span class="kn">import</span> <span class="n">markdown</span> <span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span> <span class="kn">from</span> <span class="nn">pygments</span> <span class="kn">import</span> <span class="n">lexers</span><span class="p">,</span> <span class="n">formatters</span></pre></div></pre></div> </td> - </tr><tr id='section-24'> + </tr><tr id='section-29'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-24">#</a> + <a class="octothorpe" href="#section-29">#</a> </div> <p>A list of the languages that Pycco supports, mapping the file extension to the name of the Pygments lexer and the symbol that indicates a comment. To @@ -483,35 +537,35 @@ add another language to Pycco's repertoire, add it here.</p> <span class="s">"multistart"</span><span class="p">:</span> <span class="s">"#|"</span><span class="p">,</span> <span class="s">"multiend"</span><span class="p">:</span> <span class="s">"|#"</span><span class="p">},</span> <span class="s">".lua"</span><span class="p">:</span> <span class="p">{</span> <span class="s">"name"</span><span class="p">:</span> <span class="s">"lua"</span><span class="p">,</span> <span class="s">"symbol"</span><span class="p">:</span> <span class="s">"--"</span><span class="p">,</span> - <span class="s">"multistart"</span><span class="p">:</span> <span class="s">"--[["</span><span class="p">,</span> <span class="s">"mutliend"</span><span class="p">:</span> <span class="s">"--]]"</span><span class="p">},</span> + <span class="s">"multistart"</span><span class="p">:</span> <span class="s">"--[["</span><span class="p">,</span> <span class="s">"multiend"</span><span class="p">:</span> <span class="s">"--]]"</span><span class="p">},</span> <span class="s">".erl"</span><span class="p">:</span> <span class="p">{</span> <span class="s">"name"</span><span class="p">:</span> <span class="s">"erlang"</span><span class="p">,</span> <span class="s">"symbol"</span><span class="p">:</span> <span class="s">"</span><span class="si">%%</span><span class="s">"</span> <span class="p">},</span> <span class="p">}</span></pre></div></pre></div> </td> - </tr><tr id='section-25'> + </tr><tr id='section-30'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-25">#</a> + <a class="octothorpe" href="#section-30">#</a> </div> <p>Build out the appropriate matchers and delimiters for each language.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre><span class="k">for</span> <span class="n">ext</span><span class="p">,</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">languages</span><span class="o">.</span><span class="n">items</span><span class="p">():</span></pre></div></pre></div> </td> - </tr><tr id='section-26'> + </tr><tr id='section-31'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-26">#</a> + <a class="octothorpe" href="#section-31">#</a> </div> <p>Does the line begin with a comment?</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="n">l</span><span class="p">[</span><span class="s">"comment_matcher"</span><span class="p">]</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">r"^\s*"</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="s">"symbol"</span><span class="p">]</span> <span class="o">+</span> <span class="s">"\s?"</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-27'> + </tr><tr id='section-32'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-27">#</a> + <a class="octothorpe" href="#section-32">#</a> </div> <p>The dividing token we feed into Pygments, to delimit the boundaries between sections.</p> @@ -519,10 +573,10 @@ sections.</p> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="n">l</span><span class="p">[</span><span class="s">"divider_text"</span><span class="p">]</span> <span class="o">=</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="s">"symbol"</span><span class="p">]</span> <span class="o">+</span> <span class="s">"DIVIDER</span><span class="se">\n</span><span class="s">"</span></pre></div></pre></div> </td> - </tr><tr id='section-28'> + </tr><tr id='section-33'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-28">#</a> + <a class="octothorpe" href="#section-33">#</a> </div> <p>The mirror of <code>divider_text</code> that we expect Pygments to return. We can split on this to recover the original sections.</p> @@ -530,26 +584,35 @@ on this to recover the original sections.</p> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="n">l</span><span class="p">[</span><span class="s">"divider_html"</span><span class="p">]</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">r'\n*<span class="c[1]?">'</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="s">"symbol"</span><span class="p">]</span> <span class="o">+</span> <span class="s">'DIVIDER</span></span><span class="se">\n</span><span class="s">*'</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-29'> + </tr><tr id='section-34'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-29">#</a> + <a class="octothorpe" href="#section-34">#</a> </div> <p>Get the Pygments Lexer for this language.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre> <span class="n">l</span><span class="p">[</span><span class="s">"lexer"</span><span class="p">]</span> <span class="o">=</span> <span class="n">lexers</span><span class="o">.</span><span class="n">get_lexer_by_name</span><span class="p">(</span><span class="n">l</span><span class="p">[</span><span class="s">"name"</span><span class="p">])</span></pre></div></pre></div> </td> - </tr><tr id='section-30'> + </tr><tr id='section-35'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-30">#</a> + <a class="octothorpe" href="#section-35">#</a> </div> <p>Get the current language we're documenting, based on the extension.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">get_language</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> - <span class="k">try</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">get_language</span><span class="p">(</span><span class="n">source</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-36'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-36">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="n">languages</span><span class="p">[</span> <span class="n">source</span><span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="s">"."</span><span class="p">):]</span> <span class="p">]</span> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> <span class="n">source</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="s">"r"</span><span class="p">)</span> @@ -562,17 +625,26 @@ on this to recover the original sections.</p> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"Can't figure out the language!"</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-31'> + </tr><tr id='section-37'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-31">#</a> + <a class="octothorpe" href="#section-37">#</a> </div> - <p>Compute the destination HTML path for an input source file path. If the source -is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</code></p> + <p>Compute the destination HTML path for an input source file path. If the +source is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</code></p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">destination</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">destination</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-38'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-38">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument."</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">name</span> <span class="o">=</span> <span class="n">filepath</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">filepath</span><span class="p">[</span> <span class="n">filepath</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="s">"."</span><span class="p">):</span> <span class="p">],</span> <span class="s">""</span><span class="p">)</span> @@ -582,37 +654,55 @@ is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</cod <span class="n">name</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">return</span> <span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="s">"</span><span class="si">%s</span><span class="s">.html"</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-32'> + </tr><tr id='section-39'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-32">#</a> + <a class="octothorpe" href="#section-39">#</a> </div> <p>Shift items off the front of the <code>list</code> until it is empty, then return <code>default</code>.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">shift</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">default</span><span class="p">):</span> - <span class="k">try</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">shift</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">default</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-40'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-40">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="nb">list</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="k">return</span> <span class="n">default</span></pre></div></pre></div> </td> - </tr><tr id='section-33'> + </tr><tr id='section-41'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-33">#</a> + <a class="octothorpe" href="#section-41">#</a> </div> <p>Ensure that the destination directory exists.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">ensure_directory</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">ensure_directory</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-42'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-42">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span> <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-34'> + </tr><tr id='section-43'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-34">#</a> + <a class="octothorpe" href="#section-43">#</a> </div> </td> @@ -620,69 +710,96 @@ is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</cod <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">template</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> <span class="k">return</span> <span class="k">lambda</span> <span class="n">context</span><span class="p">:</span> <span class="n">pystache</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-35'> + </tr><tr id='section-44'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-35">#</a> + <a class="octothorpe" href="#section-44">#</a> </div> <p>Create the template that we will use to generate the Pycco HTML page.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre><span class="n">pycco_template</span> <span class="o">=</span> <span class="n">template</span><span class="p">(</span><span class="n">pycco_resources</span><span class="o">.</span><span class="n">html</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-36'> + </tr><tr id='section-45'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-36">#</a> + <a class="octothorpe" href="#section-45">#</a> </div> <p>The CSS styles we'd like to apply to the documentation.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre><span class="n">pycco_styles</span> <span class="o">=</span> <span class="n">pycco_resources</span><span class="o">.</span><span class="n">css</span></pre></div></pre></div> </td> - </tr><tr id='section-37'> + </tr><tr id='section-46'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-37">#</a> + <a class="octothorpe" href="#section-46">#</a> </div> <p>The start of each Pygments highlight block.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre><span class="n">highlight_start</span> <span class="o">=</span> <span class="s">"<div class=</span><span class="se">\"</span><span class="s">highlight</span><span class="se">\"</span><span class="s">><pre>"</span></pre></div></pre></div> </td> - </tr><tr id='section-38'> + </tr><tr id='section-47'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-38">#</a> + <a class="octothorpe" href="#section-47">#</a> </div> <p>The end of each Pygments highlight block.</p> </td> <td class=code> <div class='highlight'><pre><div class="highlight"><pre><span class="n">highlight_end</span> <span class="o">=</span> <span class="s">"</pre></div>"</span></pre></div></pre></div> </td> - </tr><tr id='section-39'> + </tr><tr id='section-48'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-39">#</a> + <a class="octothorpe" href="#section-48">#</a> </div> - <p>For each source file passed in as an argument, generate the documentation.</p> + <p>For each source file passed as argument, generate the documentation.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> - <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument."</span><span class="p">)</span> - - <span class="n">sources</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> - <span class="k">if</span> <span class="n">sources</span><span class="p">:</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-49'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-49">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">outdir</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Missing the required 'outdir' keyword argument."</span><span class="p">)</span></pre></div></pre></div> + </td> + </tr><tr id='section-50'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-50">#</a> + </div> + <p>Make a copy of sources given on the command line. <code>main()</code> needs the +original list when monitoring for changed files.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">sources</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span></pre></div></pre></div> + </td> + </tr><tr id='section-51'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-51">#</a> + </div> + <p>Proceed to generating the documentation.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="n">sources</span><span class="p">:</span> <span class="n">ensure_directory</span><span class="p">(</span><span class="n">outdir</span><span class="p">)</span> <span class="n">css</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="s">"pycco.css"</span><span class="p">),</span> <span class="s">"w"</span><span class="p">)</span> <span class="n">css</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pycco_styles</span><span class="p">)</span> <span class="n">css</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></pre></div></pre></div> </td> - </tr><tr id='section-40'> + </tr><tr id='section-52'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-40">#</a> + <a class="octothorpe" href="#section-52">#</a> </div> </td> @@ -697,7 +814,7 @@ is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</cod <span class="k">pass</span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">destination</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="n">preserve_paths</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">),</span> <span class="s">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> - <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">generate_documentation</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">))</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">generate_documentation</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="n">preserve_paths</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">))</span> <span class="k">print</span> <span class="s">"pycco = </span><span class="si">%s</span><span class="s"> -> </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">dest</span><span class="p">)</span> @@ -707,16 +824,135 @@ is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</cod <span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s">"process"</span><span class="p">,</span> <span class="s">"generate_documentation"</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-41'> + </tr><tr id='section-53'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-41">#</a> + <a class="octothorpe" href="#section-53">#</a> + </div> + <p>Monitor each source file and re-generate documentation on change.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">monitor</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">opts</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-54'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-54">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre></pre></div></pre></div> + </td> + </tr><tr id='section-55'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-55">#</a> + </div> + <p>The watchdog modules are imported in <code>main()</code> but we need to re-import +here to bring them into the local namespace.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="kn">import</span> <span class="nn">watchdog.events</span> + <span class="kn">import</span> <span class="nn">watchdog.observers</span></pre></div></pre></div> + </td> + </tr><tr id='section-56'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-56">#</a> + </div> + <p>Watchdog operates on absolute paths, so map those to original paths +as specified on the command line.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">absolute_sources</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">source</span><span class="p">),</span> <span class="n">source</span><span class="p">)</span> + <span class="k">for</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">)</span></pre></div></pre></div> + </td> + </tr><tr id='section-57'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-57">#</a> + </div> + <p>A handler for recompiling files which triggered watchdog events</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">class</span> <span class="nc">RegenerateHandler</span><span class="p">(</span><span class="n">watchdog</span><span class="o">.</span><span class="n">events</span><span class="o">.</span><span class="n">FileSystemEventHandler</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-58'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-58">#</a> + </div> + <p>Regenerate documentation for a file which triggered an event</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">def</span> <span class="nf">on_modified</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span></pre></div></pre></div> + </td> + </tr><tr id='section-59'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-59">#</a> + </div> + <p>Re-generate documentation from a source file if it was listed on +the command line. Watchdog monitors whole directories, so other +files may cause notifications as well.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">src_path</span> <span class="ow">in</span> <span class="n">absolute_sources</span><span class="p">:</span> + <span class="n">process</span><span class="p">([</span><span class="n">absolute_sources</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">src_path</span><span class="p">]],</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">preserve_paths</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">paths</span><span class="p">)</span></pre></div></pre></div> + </td> + </tr><tr id='section-60'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-60">#</a> + </div> + <p>Set up an observer which monitors all directories for files given on +the command line and notifies the handler defined above.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">event_handler</span> <span class="o">=</span> <span class="n">RegenerateHandler</span><span class="p">()</span> + <span class="n">observer</span> <span class="o">=</span> <span class="n">watchdog</span><span class="o">.</span><span class="n">observers</span><span class="o">.</span><span class="n">Observer</span><span class="p">()</span> + <span class="n">directories</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">source</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">)</span> + <span class="k">for</span> <span class="n">directory</span> <span class="ow">in</span> <span class="n">directories</span><span class="p">:</span> + <span class="n">observer</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">event_handler</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">directory</span><span class="p">)</span></pre></div></pre></div> + </td> + </tr><tr id='section-61'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-61">#</a> + </div> + <p>Run the file change monitoring loop until the user hits Ctrl-C.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">observer</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">while</span> <span class="bp">True</span><span class="p">:</span> + <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> + <span class="n">observer</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> + <span class="n">observer</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></pre></div></pre></div> + </td> + </tr><tr id='section-62'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-62">#</a> </div> <p>Hook spot for the console script.</p> </td> <td class=code> - <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> - <span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">()</span> + <div class='highlight'><pre><div class="highlight"><pre><span class="k">def</span> <span class="nf">main</span><span class="p">():</span></pre></div></pre></div> + </td> + </tr><tr id='section-63'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-63">#</a> + </div> + + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">()</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">'-p'</span><span class="p">,</span> <span class="s">'--paths'</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">'store_true'</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">'Preserve path structure of original files'</span><span class="p">)</span> @@ -724,13 +960,35 @@ is <code>lib/example.py</code>, the HTML will be at <code>docs/example.html</cod <span class="n">dest</span><span class="o">=</span><span class="s">'outdir'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">'docs'</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">'The output directory that the rendered files should go to.'</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">'-w'</span><span class="p">,</span> <span class="s">'--watch'</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">'store_true'</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">'Watch original files and re-generate documentation on changes'</span><span class="p">)</span> <span class="n">opts</span><span class="p">,</span> <span class="n">sources</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + <span class="n">process</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> <span class="n">preserve_paths</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">paths</span><span class="p">)</span></pre></div></pre></div> </td> - </tr><tr id='section-42'> + </tr><tr id='section-64'> <td class=docs> <div class="octowrap"> - <a class="octothorpe" href="#section-42">#</a> + <a class="octothorpe" href="#section-64">#</a> + </div> + <p>If the -w / --watch option was present, monitor the source directories +for changes and re-generate documentation for source files whenever they +are modified.</p> + </td> + <td class=code> + <div class='highlight'><pre><div class="highlight"><pre> <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">watch</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="kn">import</span> <span class="nn">watchdog.events</span> + <span class="kn">import</span> <span class="nn">watchdog.observers</span> + <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s">'The -w/--watch option requires the watchdog package.'</span><span class="p">)</span> + + <span class="n">monitor</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span></pre></div></pre></div> + </td> + </tr><tr id='section-65'> + <td class=docs> + <div class="octowrap"> + <a class="octothorpe" href="#section-65">#</a> </div> <p>Run the script.</p> </td> |