Index: tools/md_browser/md_browser.py |
diff --git a/tools/md_browser/md_browser.py b/tools/md_browser/md_browser.py |
deleted file mode 100644 |
index 7fb51eb2e8e0de5e19298e5016162d99303048db..0000000000000000000000000000000000000000 |
--- a/tools/md_browser/md_browser.py |
+++ /dev/null |
@@ -1,102 +0,0 @@ |
-# Copyright 2015 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Simple Markdown browser for a Git checkout.""" |
-from __future__ import print_function |
- |
-import SimpleHTTPServer |
-import SocketServer |
-import argparse |
-import codecs |
-import os |
-import socket |
-import sys |
- |
- |
-THIS_DIR = os.path.abspath(os.path.dirname(__file__)) |
-SRC_DIR = os.path.dirname(os.path.dirname(THIS_DIR)) |
-sys.path.append(os.path.join(SRC_DIR, 'third_party', 'Python-Markdown')) |
-import markdown |
- |
- |
-def main(argv): |
- parser = argparse.ArgumentParser(prog='md_browser') |
- parser.add_argument('-p', '--port', type=int, default=8080, |
- help='port to run on (default = %(default)s)') |
- args = parser.parse_args(argv) |
- |
- try: |
- s = Server(args.port, SRC_DIR) |
- print("Listening on http://localhost:%s/" % args.port) |
- s.serve_forever() |
- s.shutdown() |
- return 0 |
- except KeyboardInterrupt: |
- return 130 |
- |
- |
-class Server(SocketServer.TCPServer): |
- def __init__(self, port, top_level): |
- SocketServer.TCPServer.__init__(self, ('0.0.0.0', port), Handler) |
- self.port = port |
- self.top_level = top_level |
- |
- def server_bind(self): |
- self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
- self.socket.bind(self.server_address) |
- |
- |
-class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): |
- def do_GET(self): |
- full_path = os.path.abspath(os.path.join(self.server.top_level, |
- self.path[1:])) |
- if not full_path.startswith(SRC_DIR): |
- self._DoUnknown() |
- elif self.path == '/doc.css': |
- self._WriteTemplate('doc.css') |
- elif not os.path.exists(full_path): |
- self._DoNotFound() |
- elif self.path.lower().endswith('.md'): |
- self._DoMD() |
- else: |
- self._DoUnknown() |
- |
- def _DoMD(self): |
- extensions = [ |
- 'markdown.extensions.fenced_code', |
- 'markdown.extensions.tables', |
- 'markdown.extensions.toc', |
- ] |
- |
- contents = self._Read(self.path[1:]) |
- md_fragment = markdown.markdown(contents, |
- extensions=extensions, |
- output_format='html4').encode('utf-8') |
- try: |
- self._WriteTemplate('header.html') |
- self.wfile.write(md_fragment) |
- self._WriteTemplate('footer.html') |
- except: |
- raise |
- |
- def _DoNotFound(self): |
- self.wfile.write('<html><body>%s not found</body></html>' % self.path) |
- |
- def _DoUnknown(self): |
- self.wfile.write('<html><body>I do not know how to serve %s.</body>' |
- '</html>' % self.path) |
- |
- def _Read(self, relpath): |
- assert not relpath.startswith(os.sep) |
- path = os.path.join(self.server.top_level, relpath) |
- with codecs.open(path, encoding='utf-8') as fp: |
- return fp.read() |
- |
- def _WriteTemplate(self, template): |
- contents = self._Read(os.path.join('tools', 'md_browser', template)) |
- self.wfile.write(contents.encode('utf-8')) |
- |
- |
-if __name__ == '__main__': |
- sys.exit(main(sys.argv[1:])) |