diff options
| author | Scott Bahling <sbahling@mudgum.net> | 2013-03-23 17:29:45 +0100 |
|---|---|---|
| committer | Scott Bahling <sbahling@mudgum.net> | 2013-03-23 17:29:45 +0100 |
| commit | b517bd162198c9c2ef0f645e1722af84475be2ce (patch) | |
| tree | bd3ac6809d0477880074ca5de088ef79e37cc05d | |
| parent | 0426fce3b39ebedf6b92bfe6b18aa08987b11ea2 (diff) | |
| download | panfry-b517bd162198c9c2ef0f645e1722af84475be2ce.tar.gz panfry-b517bd162198c9c2ef0f645e1722af84475be2ce.tar.xz panfry-b517bd162198c9c2ef0f645e1722af84475be2ce.zip | |
Add panfry serve command and pandoc-options
| -rwxr-xr-x | panfry/cli.py | 23 | ||||
| -rwxr-xr-x | panfry/document.py | 12 | ||||
| -rwxr-xr-x | panfry/main.py | 50 |
3 files changed, 73 insertions, 12 deletions
diff --git a/panfry/cli.py b/panfry/cli.py index 3ec6151..6949474 100755 --- a/panfry/cli.py +++ b/panfry/cli.py @@ -97,6 +97,22 @@ Args: default: False help: 'Remove pub path and all contents before generating' + pandoc_options: + flags: [-O, --pandoc-options] + default: '' + help: | + Space delimited list of options to pass to Pandoc. + Options must be in the long format without the leading + double dash. + + Example --pandoc-options="smart base-header-level=2" + + port: + flags: [-P, --port] + default: 8080 + help: 'HTTP port' + + Parser: help: @@ -116,6 +132,13 @@ Subparsers: - assets - clean - css + - pandoc_options + + serve: + help: start simple http server in current directory + args: + - port + - pub_path """ config = yaml.load(cli_config) diff --git a/panfry/document.py b/panfry/document.py index edf1cf8..d95d447 100755 --- a/panfry/document.py +++ b/panfry/document.py @@ -18,11 +18,15 @@ class Document: self.css_file = 'css/style.css' self.assets_dir = 'assets' + self.pandoc_options = [] @property def set_simple_toc(self): self.full_toc = False + def set_pandoc_options(self, options): + self.pandoc_options = options + @property def set_full_toc(self): self.full_toc = True @@ -178,6 +182,8 @@ class Document: pandoc.set_cwd(os.path.abspath(self.src_path)) doc.add_argument('latex-engine=xelatex') + for option in self.pandoc_options: + doc.add_argument(option) doc.to_file(pdf_path) pandoc.set_cwd(None) @@ -194,6 +200,8 @@ class Document: print("epub_path: %s" % epub_path) pandoc.set_cwd(os.path.abspath(self.src_path)) + for option in self.pandoc_options: + doc.add_argument(option) doc.to_file(epub_path) pandoc.set_cwd(None) @@ -222,7 +230,9 @@ class Document: doc.add_argument('toc') doc.add_argument('template=%s' % template_file.name) doc.add_argument('css=%s' % self.css_file) - doc.markdown = '%s\n%s' % (self.header.source, + for option in self.pandoc_options: + doc.add_argument(option) + doc.markdown = '%s\n%s' % (self.header.source, self.expand_int_links(page.markdown)) content = doc.html write_file(os.path.join(pub_path, page.htmlfile), diff --git a/panfry/main.py b/panfry/main.py index 100ca74..0713a8f 100755 --- a/panfry/main.py +++ b/panfry/main.py @@ -3,6 +3,9 @@ from __future__ import print_function import os import shutil +import shlex +import SimpleHTTPServer +import SocketServer import panfry.cli from panfry.templater import Templater from panfry.document import Document @@ -10,26 +13,31 @@ from panfry.document import Document def get_env(): env = panfry.cli.init_argparser().parse_args() - if not os.path.isdir(env.doc_path): - print("%s directory not found. Aborting..." % env.doc_path) - exit(1) - env.pub_path = os.path.abspath(env.pub_path) + + if env.cmd in ['gen']: + if not os.path.isdir(env.doc_path): + print("%s directory not found. Aborting..." % env.doc_path) + exit(1) + - if not env.templates_path: - env.templates_path = os.path.join(env.doc_path, 'templates') + if not env.templates_path: + env.templates_path = os.path.join(env.doc_path, 'templates') - if not os.path.isdir(env.templates_path): - print("No templates path found. Aborting...") - exit(1) + if not os.path.isdir(env.templates_path): + print("No templates path found. Aborting...") + exit(1) + + if env.pandoc_options: + env.pandoc_options = list(shlex.split(env.pandoc_options)) return env -def main(): - env = get_env() +def gen(env): document = Document(env.doc_path) document.set_templater(Templater(env.templates_path)) + document.set_pandoc_options(env.pandoc_options) if env.simple_toc: document.set_simple_toc @@ -45,6 +53,11 @@ def main(): print("done.") exit(0) + print("\nUsing pandoc options:") + for opt in env.pandoc_options: + print(" --%s" % opt) + + print() ###### Create PDF pdffile = document.publish_pdf(env.pub_path) @@ -59,5 +72,20 @@ def main(): exit(0) + +def serve(env): + os.chdir(env.pub_path) + Handler = SimpleHTTPServer.SimpleHTTPRequestHandler + + httpd = SocketServer.TCPServer(("", int(env.port)), Handler) + print("serving at port: %s" % int(env.port)) + httpd.serve_forever() + + +def main(): + CMD = dict(gen=gen, serve=serve) + env = get_env() + CMD[env.cmd](env) + if __name__ == "__main__": main() |
