summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrey Hunner <treyhunner@gmail.com>2011-10-07 13:12:01 -0700
committerTrey Hunner <treyhunner@gmail.com>2011-10-07 13:12:01 -0700
commit88adf7c32eb64428dee3751a935ca5fa577f083b (patch)
treefb0db9902105970855ba64ca06f31735d43a6de9
parent2e14d0a70a398fcf91b7c79b6bf9d166cc42ddac (diff)
downloadpycco-88adf7c32eb64428dee3751a935ca5fa577f083b.tar.gz
Regenerate documentation
-rw-r--r--index.html586
1 files changed, 422 insertions, 164 deletions
diff --git a/index.html b/index.html
index 1752f56..52f5423 100644
--- a/index.html
+++ b/index.html
@@ -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">&quot;Missing the required &#39;outdir&#39; keyword argument.&quot;</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">&quot;r&quot;</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">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">&quot;&quot;</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">&quot;docs_text&quot;</span><span class="p">:</span> <span class="n">docs</span><span class="p">,</span>
- <span class="s">&quot;code_text&quot;</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">&quot;docs_text&quot;</span><span class="p">:</span> <span class="n">docs</span><span class="p">,</span>
+ <span class="s">&quot;code_text&quot;</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">&quot;multistart&quot;</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">&quot;multiend&quot;</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">&quot;multistart&quot;</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">&quot;multiend&quot;</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">&quot;multiend&quot;</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">&gt;</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">&quot;multiend&quot;</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">&quot;multistart&quot;</span><span class="p">],</span><span class="s">&#39;&#39;</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">&quot;multiend&quot;</span><span class="p">],</span><span class="s">&#39;&#39;</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">&quot;multistart&quot;</span><span class="p">]),</span><span class="s">&#39;&#39;</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">&quot;multiend&quot;</span><span class="p">]),</span><span class="s">&#39;&#39;</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">&#39;</span><span class="se">\n</span><span class="s">&#39;</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">&quot; &quot;</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">&quot;&lt;/pre&gt;&quot;</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">&quot;comment_matcher&quot;</span><span class="p">],</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">&#39;class &#39;</span><span class="p">,</span> <span class="s">&#39;def &#39;</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">&#39;&#39;</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">&#39;class &#39;</span><span class="p">,</span> <span class="s">&#39;def &#39;</span><span class="p">,</span> <span class="s">&#39;@&#39;</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">&quot;@&quot;</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">&#39;&#39;</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">&#39;</span><span class="se">\n</span><span class="s">&#39;</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">&quot;Missing the required &#39;outdir&#39; keyword argument.&quot;</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">&quot;-&quot;</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">&quot; &quot;</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">&#39;### &lt;span id=&quot;</span><span class="si">%(id)s</span><span class="s">&quot; href=&quot;</span><span class="si">%(id)s</span><span class="s">&quot;&gt;</span><span class="si">%(name)s</span><span class="s">&lt;/span&gt;&#39;</span> <span class="o">%</span> <span class="p">{</span>
- <span class="s">&quot;id&quot;</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">&quot;name&quot;</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">&#39;</span><span class="si">%(lvl)s</span><span class="s"> &lt;span id=&quot;</span><span class="si">%(id)s</span><span class="s">&quot; href=&quot;</span><span class="si">%(id)s</span><span class="s">&quot;&gt;</span><span class="si">%(name)s</span><span class="s">&lt;/span&gt;&#39;</span> <span class="o">%</span> <span class="p">{</span>
+ <span class="s">&quot;lvl&quot;</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">&#39;=&#39;</span><span class="p">,</span> <span class="s">&#39;#&#39;</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">&quot;id&quot;</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">&quot;name&quot;</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">&#39;^===(.+)===</span><span class="se">\\</span><span class="s">n&#39;</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">&#39;^([=]+)([^=]+)[=]*\s*$&#39;</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">&#39;[^`]\[\[(.+)\]\]&#39;</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">&quot;Missing the required &#39;outdir&#39; keyword argument.&quot;</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">&quot;divider_text&quot;</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">&quot;code_text&quot;</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">&quot;divider_text&quot;</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">&quot;code_text&quot;</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">&quot;lexer&quot;</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">&quot;html&quot;</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">&quot;num&quot;</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">&quot;Missing the required &#39;outdir&#39; keyword argument&quot;</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">&quot;pycco.css&quot;</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">&quot;code_html&quot;</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&quot;\{\{&quot;</span><span class="p">,</span> <span class="s">r&quot;{{&quot;</span><span class="p">,</span> <span class="n">sect</span><span class="p">[</span><span class="s">&quot;code_html&quot;</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">&quot;title&quot;</span> <span class="p">:</span> <span class="n">title</span><span class="p">,</span>
- <span class="s">&quot;stylesheet&quot;</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">&quot;pycco.css&quot;</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">&quot;stylesheet&quot;</span> <span class="p">:</span> <span class="n">csspath</span><span class="p">,</span>
<span class="s">&quot;sections&quot;</span> <span class="p">:</span> <span class="n">sections</span><span class="p">,</span>
<span class="s">&quot;source&quot;</span> <span class="p">:</span> <span class="n">source</span><span class="p">,</span>
<span class="s">&quot;path&quot;</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&quot;{{&quot;</span><span class="p">,</span> <span class="s">&quot;{{&quot;</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">&quot;utf-8&quot;</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 &amp; 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">&quot;multistart&quot;</span><span class="p">:</span> <span class="s">&quot;#|&quot;</span><span class="p">,</span> <span class="s">&quot;multiend&quot;</span><span class="p">:</span> <span class="s">&quot;|#&quot;</span><span class="p">},</span>
<span class="s">&quot;.lua&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="s">&quot;lua&quot;</span><span class="p">,</span> <span class="s">&quot;symbol&quot;</span><span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
- <span class="s">&quot;multistart&quot;</span><span class="p">:</span> <span class="s">&quot;--[[&quot;</span><span class="p">,</span> <span class="s">&quot;mutliend&quot;</span><span class="p">:</span> <span class="s">&quot;--]]&quot;</span><span class="p">},</span>
+ <span class="s">&quot;multistart&quot;</span><span class="p">:</span> <span class="s">&quot;--[[&quot;</span><span class="p">,</span> <span class="s">&quot;multiend&quot;</span><span class="p">:</span> <span class="s">&quot;--]]&quot;</span><span class="p">},</span>
<span class="s">&quot;.erl&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="s">&quot;erlang&quot;</span><span class="p">,</span> <span class="s">&quot;symbol&quot;</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%%</span><span class="s">&quot;</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">&quot;comment_matcher&quot;</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&quot;^\s*&quot;</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="s">&quot;symbol&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;\s?&quot;</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">&quot;divider_text&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="s">&quot;symbol&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;DIVIDER</span><span class="se">\n</span><span class="s">&quot;</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">&quot;divider_html&quot;</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&#39;\n*&lt;span class=&quot;c[1]?&quot;&gt;&#39;</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="s">&quot;symbol&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;DIVIDER&lt;/span&gt;</span><span class="se">\n</span><span class="s">*&#39;</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">&quot;lexer&quot;</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">&quot;name&quot;</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">&quot;.&quot;</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">&quot;r&quot;</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">&quot;Can&#39;t figure out the language!&quot;</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">&quot;Missing the required &#39;outdir&#39; keyword argument.&quot;</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">&quot;.&quot;</span><span class="p">):</span> <span class="p">],</span> <span class="s">&quot;&quot;</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">&quot;</span><span class="si">%s</span><span class="s">.html&quot;</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">&quot;&lt;div class=</span><span class="se">\&quot;</span><span class="s">highlight</span><span class="se">\&quot;</span><span class="s">&gt;&lt;pre&gt;&quot;</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">&quot;&lt;/pre&gt;&lt;/div&gt;&quot;</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">&quot;Missing the required &#39;outdir&#39; keyword argument.&quot;</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">&quot;Missing the required &#39;outdir&#39; keyword argument.&quot;</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">&quot;pycco.css&quot;</span><span class="p">),</span> <span class="s">&quot;w&quot;</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">&quot;w&quot;</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">&quot;pycco = </span><span class="si">%s</span><span class="s"> -&gt; </span><span class="si">%s</span><span class="s">&quot;</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">&quot;process&quot;</span><span class="p">,</span> <span class="s">&quot;generate_documentation&quot;</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">&#39;-p&#39;</span><span class="p">,</span> <span class="s">&#39;--paths&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&#39;store_true&#39;</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">&#39;Preserve path structure of original files&#39;</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">&#39;outdir&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">&#39;docs&#39;</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">&#39;The output directory that the rendered files should go to.&#39;</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">&#39;-w&#39;</span><span class="p">,</span> <span class="s">&#39;--watch&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&#39;store_true&#39;</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s">&#39;Watch original files and re-generate documentation on changes&#39;</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">&#39;The -w/--watch option requires the watchdog package.&#39;</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>