Start adding website features to asciidoc2html.

This commit is contained in:
Florian Bruhin 2015-10-20 18:13:31 +02:00
parent 71a150af22
commit e03068ed84

View File

@ -25,6 +25,8 @@ import os.path
import sys
import subprocess
import glob
import shutil
import tempfile
import argparse
sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir))
@ -46,10 +48,24 @@ class AsciiDoc:
def __init__(self, args):
self._cmd = None
self._args = args
self._homedir = None
self._themedir = None
self._tempdir = None
def prepare(self):
"""Get the asciidoc command and create the homedir to use."""
self._cmd = self._get_asciidoc_cmd()
self._homedir = tempfile.mkdtemp()
self._themedir = os.path.join(
self._homedir, '.asciidoc', 'themes', 'qute')
self._tempdir = os.path.join(self._homedir, 'tmp')
os.makedirs(self._tempdir)
os.makedirs(self._themedir)
def cleanup(self):
"""Clean up the temporary home directory for asciidoc."""
if self._homedir is not None:
shutil.rmtree(self._homedir)
def build(self):
if self._args.website:
@ -67,21 +83,39 @@ class AsciiDoc:
self.call(src, dst)
def _build_website(self):
theme_file = os.path.abspath(os.path.join('www', 'qute.css'))
shutil.copy(theme_file, self._themedir)
outdir = self._args.website[0]
for root, _dirs, files in os.walk(os.getcwd()):
for filename in files:
if os.path.splitext(filename)[1] != '.asciidoc':
continue
src = os.path.join(root, filename)
parts = [self._args.all[0]]
src_basename = os.path.basename(src)
parts = [outdir]
dirname = os.path.dirname(src)
if dirname:
parts.append(os.path.relpath(os.path.dirname(src)))
parts.append(
os.extsep.join((os.path.splitext(os.path.basename(src))[0],
os.extsep.join((os.path.splitext(src_basename)[0],
'html')))
dst = os.path.join(*parts)
os.makedirs(os.path.dirname(dst), exist_ok=True)
self.call(src, dst)
modified_src = os.path.join(self._tempdir, src_basename)
shutil.copy('www/header.asciidoc', modified_src)
with open(modified_src, 'a', encoding='utf-8') as outfp:
with open(src, 'r', encoding='utf-8') as infp:
outfp.write(infp.read())
self.call(modified_src, dst, '--theme=qute')
for path in ['icons', 'doc/img']:
shutil.copytree(path, os.path.join(outdir, path))
def _get_asciidoc_cmd(self):
"""Try to find out what commandline to use to invoke asciidoc."""
@ -106,21 +140,22 @@ class AsciiDoc:
raise FileNotFoundError
def call(self, src, dst, theme=None):
def call(self, src, dst, *args):
"""Call asciidoc for the given files.
Args:
src: The source .asciidoc file.
dst: The destination .html file, or None to auto-guess.
theme: The CSS to use as a theme.
*args: Additional arguments passed to asciidoc.
"""
print("Calling asciidoc for {}...".format(os.path.basename(src)))
args = self._cmd[:]
cmdline = self._cmd[:]
if dst is not None:
args += ['--out-file', dst]
args.append(src)
cmdline += ['--out-file', dst]
cmdline += args
cmdline.append(src)
try:
subprocess.check_call(args)
subprocess.check_call(cmdline, env={'HOME': self._homedir})
except (subprocess.CalledProcessError, OSError) as e:
utils.print_col(str(e), 'red')
sys.exit(1)
@ -151,7 +186,11 @@ def main(colors=False):
"the --asciidoc argument to point this script to the "
"correct python/asciidoc.py location!", 'red')
sys.exit(1)
asciidoc.build()
try:
asciidoc.build()
finally:
asciidoc.cleanup()
if __name__ == '__main__':