diff --git a/md_pdf/build/__init__.py b/md_pdf/build/__init__.py index ab4ffd6..3a34605 100644 --- a/md_pdf/build/__init__.py +++ b/md_pdf/build/__init__.py @@ -3,6 +3,7 @@ from md_pdf.build.pandoc import build_document, output_html from md_pdf.build.cover import render_cover from md_pdf.build.css import render_css from md_pdf.build.pdf import export_pdf +from md_pdf.build.template import parse_template import os import logging @@ -13,9 +14,10 @@ def build(config): logger.debug("Starting Build...") data = read_files(os.path.abspath(config['input'])) doc = build_document(data, config.get('bibliography'), config.get('context')) + parsed_template = parse_template(doc, config) if 'html' in config['output_formats']: - output_html(doc, os.path.abspath(config['output_dir'])) + output_html(parsed_template, os.path.abspath(config['output_dir'])) if 'pdf' in config['output_formats']: render_cover(config) render_css() - export_pdf(doc, config) + export_pdf(parsed_template, config) diff --git a/md_pdf/build/pandoc.py b/md_pdf/build/pandoc.py index 984a631..7bd86a2 100644 --- a/md_pdf/build/pandoc.py +++ b/md_pdf/build/pandoc.py @@ -1,36 +1,17 @@ import pypandoc -from bs4 import BeautifulSoup import os from md_pdf.consts import CSL_DIR -from jinja2 import Template import logging logger = logging.getLogger(__file__) -def fix_references_title(content): - logger.debug("Adding Reference Title...") - soup = BeautifulSoup(content, 'html.parser') - reference_element = soup.find('div', class_='references') - if reference_element is not None: - title = soup.new_tag('h1') - title.string = "References" - reference_element.insert_before(title) - return soup.prettify() - - def output_html(html, out_dir): logger.info("Outputting HTML...") with open(os.path.join(out_dir, 'output.html'), 'w') as f: f.write(html) -def parse_template(html, context): - logger.debug("Rendering Template...") - template = Template(html) - return template.render(context) - - def build_document(files_content, bibliography, context): args = [ '-s', @@ -43,12 +24,10 @@ def build_document(files_content, bibliography, context): ] filters.append('pandoc-citeproc') logger.info("Rendering Document...") - html = fix_references_title(pypandoc.convert_text( + return pypandoc.convert_text( files_content, 'html', format='md', extra_args=args, filters=filters - )) - - return parse_template(html, context) + ) diff --git a/md_pdf/build/template.py b/md_pdf/build/template.py new file mode 100644 index 0000000..c50d7b9 --- /dev/null +++ b/md_pdf/build/template.py @@ -0,0 +1,38 @@ +from jinja2 import Template +from bs4 import BeautifulSoup +import os +import logging + +logger = logging.getLogger(__file__) + +def fix_references_title(content): + logger.debug("Adding Reference Title...") + soup = BeautifulSoup(content, 'html.parser') + reference_element = soup.find('div', class_='references') + if reference_element is not None: + title = soup.new_tag('h1') + title.string = "References" + reference_element.insert_before(title) + return soup.prettify() + + +def add_base_tag(doc, config): + logger.debug("Adding Base Tag...") + soup = BeautifulSoup(doc, 'html.parser') + base_tag = soup.new_tag('base', href=os.path.abspath(config['output_dir'])) + soup.head.insert(0, base_tag) + return soup.prettify() + + +def render_template(html, config): + logger.debug("Rendering Template...") + template = Template(html) + return template.render(config) + + +def parse_template(doc, config): + doc = fix_references_title(doc) + doc = add_base_tag(doc, config) + return render_template(doc, config) + + diff --git a/test-files/test-image.png b/test-files/test-image.png new file mode 100644 index 0000000..a91d8ec Binary files /dev/null and b/test-files/test-image.png differ diff --git a/test-files/test.md b/test-files/test.md index 043968d..cfded26 100644 --- a/test-files/test.md +++ b/test-files/test.md @@ -1 +1,4 @@ # Test content + + +![title](./test-image.png)