-#!/usr/bin/python
+#!/usr/bin/env python
# A little wrapper around pycco, to add Rust support.
-import pycco
+import pycco, pycco_resources
from pygments import lexers, formatters
-import re
-pycco.main.languages[".rs"] = { "name": "rust", "symbol": "//"}
+import sys, re
+
+# helper functions
+def patch_html(source, marker, new_text):
+ '''Find the [marker] in [source], and insert [new_text] after it.'''
+ assert source.count(marker) == 1
+ return source.replace(marker, marker + new_text, 1)
-# need to re-build this stuff...
+# now, monkey-patch pycco for Rust support
+pycco.main.languages[".rs"] = { "name": "rust", "symbol": "//"}
for ext, l in pycco.main.languages.items():
# Does the line begin with a comment?
l["comment_matcher"] = re.compile(r"^\s*" + l["symbol"] + "\s?")
# Get the Pygments Lexer for this language.
l["lexer"] = lexers.get_lexer_by_name(l["name"])
+# and monkey-patch the function generating the output to do some post-processing
+generate_documentation_orig = pycco.main.generate_documentation
+generate_documentation_called = False
+def generate_documentation(*args, **kwargs):
+ global generate_documentation_called
+ generate_documentation_called = True
+ result = generate_documentation_orig(*args, **kwargs)
+ # now patch it
+ result = patch_html(result, '<link rel="stylesheet" href="pycco.css">',
+ '<link rel="stylesheet" href="pycco_custom.css"><meta name="viewport" content="width=device-width">')
+ result = patch_html(result, '<title>', 'Rust-101: ')
+ ## remove empty code blocks
+ result = re.sub('''<div class='code'>
+ *<div class="highlight"><pre>(<span></span>)?</pre></div>
+ *</div>''', '<!-- empty code block -->', result)
+ # done
+ return result
+pycco.main.generate_documentation = generate_documentation
+
+# call pycco
+assert len(sys.argv) == 2
pycco.main.main()
+assert generate_documentation_called