Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 19 additions & 18 deletions mkdocs_exporter/formats/pdf/renderer.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
from __future__ import annotations

import os
import importlib.resources

import os
from urllib.parse import unquote

from mkdocs_exporter.page import Page
from mkdocs_exporter.formats.pdf.resources import js
from mkdocs_exporter.formats.pdf.browser import Browser
from mkdocs_exporter.renderer import Renderer as BaseRenderer
from mkdocs_exporter.formats.pdf.preprocessor import Preprocessor
from mkdocs_exporter.formats.pdf.resources import js
from mkdocs_exporter.page import Page
from mkdocs_exporter.renderer import Renderer as BaseRenderer


class Renderer(BaseRenderer):
"""The renderer."""


def __init__(self, browser: Browser = None, options: dict = None):
"""The constructor."""

Expand All @@ -24,30 +22,29 @@ def __init__(self, browser: Browser = None, options: dict = None):
self.stylesheets: list[str] = []
self.browser = browser or Browser(self.options.get('browser', {}))


def add_stylesheet(self, path: str) -> Renderer:
"""Adds a stylesheet to the renderer."""

self.stylesheets.append(path)

return self


def add_script(self, path: str) -> Renderer:
"""Adds a script to the renderer."""

self.scripts.append(path)

return self


def cover(self, template: str, location: str) -> Renderer:
"""Renders a cover."""

content = template.strip('\n')

return f'<div class="mkdocs-exporter-{location}-cover" data-decompose="true">{content}</div>' + '\n'

return (
f'<div class="mkdocs-exporter-{location}-cover" data-decompose="true">{content}</div>'
+ '\n'
)

def preprocess(self, page: Page, disable: list = []) -> str:
"""Preprocesses a page, returning HTML that can be printed."""
Expand All @@ -63,23 +60,28 @@ def preprocess(self, page: Page, disable: list = []) -> str:
for stylesheet in self.stylesheets:
with open(stylesheet, 'r', encoding='utf-8') as file:
preprocessor.stylesheet(file.read())
for script in self.scripts:
with open(script, 'r', encoding='utf-8') as file:
preprocessor.script(file.read(), path=stylesheet)

if 'teleport' not in disable:
preprocessor.teleport()

preprocessor.script(importlib.resources.files(js).joinpath('pdf.js').read_text(encoding='utf-8'))
preprocessor.script(importlib.resources.files(js).joinpath('pagedjs.min.js').read_text(encoding='utf-8'))
preprocessor.script(
importlib.resources.files(js).joinpath('pdf.js').read_text(encoding='utf-8')
)
preprocessor.script(
importlib.resources.files(js)
.joinpath('pagedjs.min.js')
.read_text(encoding='utf-8')
)
for script in self.scripts:
with open(script, 'r', encoding='utf-8') as file:
preprocessor.script(file.read(), path=script)
preprocessor.update_links(base, root)

if self.options.get('url'):
preprocessor.rewrite_links(page.abs_url, self.options['url'])

return preprocessor.done()


async def render(self, page: str | Page) -> tuple[bytes, int]:
"""Renders a page as a PDF document."""

Expand All @@ -90,7 +92,6 @@ async def render(self, page: str | Page) -> tuple[bytes, int]:

return await self.browser.print(html)


async def dispose(self) -> None:
"""Dispose of the renderer."""

Expand Down