1"""reStructuredText Exporter class"""
2
3# Copyright (c) Jupyter Development Team.
4# Distributed under the terms of the Modified BSD License.
5
6from traitlets import default
7from traitlets.config import Config
8
9from ..filters import DataTypeFilter
10from .templateexporter import TemplateExporter
11
12
13class RSTExporter(TemplateExporter):
14 """
15 Exports reStructuredText documents.
16 """
17
18 @default("file_extension")
19 def _file_extension_default(self):
20 return ".rst"
21
22 @default("template_name")
23 def _template_name_default(self):
24 return "rst"
25
26 @default("raw_mimetypes")
27 def _raw_mimetypes_default(self):
28 # Up to summer 2024, nbconvert had a mistaken output_mimetype.
29 # Listing that as an extra option here maintains compatibility for
30 # notebooks with raw cells marked as that mimetype.
31 return [self.output_mimetype, "text/restructuredtext", ""]
32
33 output_mimetype = "text/x-rst"
34 export_from_notebook = "reST"
35
36 def default_filters(self):
37 """Override filter_data_type to use native rst outputs"""
38 dtf = DataTypeFilter()
39 dtf.display_data_priority = [self.output_mimetype, *dtf.display_data_priority]
40 filters = dict(super().default_filters())
41 filters["filter_data_type"] = dtf
42 return filters.items()
43
44 @property
45 def default_config(self):
46 c = Config(
47 {
48 "CoalesceStreamsPreprocessor": {"enabled": True},
49 "ExtractOutputPreprocessor": {"enabled": True},
50 "HighlightMagicsPreprocessor": {"enabled": True},
51 }
52 )
53 if super().default_config:
54 c2 = super().default_config.copy()
55 c2.merge(c)
56 c = c2
57 return c