summaryrefslogtreecommitdiffstats
path: root/sphinx/writers/html.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/writers/html.py')
-rw-r--r--sphinx/writers/html.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
new file mode 100644
index 0000000..99d47c9
--- /dev/null
+++ b/sphinx/writers/html.py
@@ -0,0 +1,44 @@
+"""docutils writers handling Sphinx' custom nodes."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, cast
+
+from docutils.writers.html4css1 import Writer
+
+from sphinx.util import logging
+from sphinx.writers.html5 import HTML5Translator
+
+if TYPE_CHECKING:
+ from sphinx.builders.html import StandaloneHTMLBuilder
+
+
+logger = logging.getLogger(__name__)
+HTMLTranslator = HTML5Translator
+
+# A good overview of the purpose behind these classes can be found here:
+# http://www.arnebrodowski.de/blog/write-your-own-restructuredtext-writer.html
+
+
+class HTMLWriter(Writer):
+
+ # override embed-stylesheet default value to False.
+ settings_default_overrides = {"embed_stylesheet": False}
+
+ def __init__(self, builder: StandaloneHTMLBuilder) -> None:
+ super().__init__()
+ self.builder = builder
+
+ def translate(self) -> None:
+ # sadly, this is mostly copied from parent class
+ visitor = self.builder.create_translator(self.document, self.builder)
+ self.visitor = cast(HTML5Translator, visitor)
+ self.document.walkabout(visitor)
+ self.output = self.visitor.astext()
+ for attr in ('head_prefix', 'stylesheet', 'head', 'body_prefix',
+ 'body_pre_docinfo', 'docinfo', 'body', 'fragment',
+ 'body_suffix', 'meta', 'title', 'subtitle', 'header',
+ 'footer', 'html_prolog', 'html_head', 'html_title',
+ 'html_subtitle', 'html_body'):
+ setattr(self, attr, getattr(visitor, attr, None))
+ self.clean_meta = ''.join(self.visitor.meta[2:])