summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Bahling <sbahling@mudgum.net>2013-03-23 17:29:45 +0100
committerScott Bahling <sbahling@mudgum.net>2013-03-23 17:29:45 +0100
commitb517bd162198c9c2ef0f645e1722af84475be2ce (patch)
treebd3ac6809d0477880074ca5de088ef79e37cc05d
parent0426fce3b39ebedf6b92bfe6b18aa08987b11ea2 (diff)
downloadpanfry-b517bd162198c9c2ef0f645e1722af84475be2ce.tar.gz
panfry-b517bd162198c9c2ef0f645e1722af84475be2ce.tar.xz
panfry-b517bd162198c9c2ef0f645e1722af84475be2ce.zip
Add panfry serve command and pandoc-options
-rwxr-xr-xpanfry/cli.py23
-rwxr-xr-xpanfry/document.py12
-rwxr-xr-xpanfry/main.py50
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()