2323 from docutils .parsers import Parser
2424 from docutils .transforms import Transform
2525
26- from sphinx .application import Sphinx
2726 from sphinx .environment import BuildEnvironment
28- from sphinx .registry import SphinxComponentRegistry
2927
3028
3129logger = logging .getLogger (__name__ )
@@ -70,8 +68,8 @@ def new_document(self) -> nodes.document:
7068class SphinxStandaloneReader (SphinxBaseReader ):
7169 """A basic document reader for Sphinx."""
7270
73- def _setup_transforms (self , * , registry : SphinxComponentRegistry ) -> None :
74- self .transforms = self .transforms + registry . get_transforms ()
71+ def _setup_transforms (self , transforms : list [ type [ Transform ]], / ) -> None :
72+ self .transforms = self .transforms + transforms
7573
7674 def read (self , source : Input , parser : Parser , settings : Values ) -> nodes .document : # type: ignore[type-arg]
7775 self .source = source
@@ -114,21 +112,11 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
114112 super ().__init__ (* args , ** kwargs )
115113
116114
117- def create_publisher (app : Sphinx , filetype : str ) -> Publisher :
115+ def _create_publisher (
116+ * , env : BuildEnvironment , parser : Parser , transforms : list [type [Transform ]]
117+ ) -> Publisher :
118118 reader = SphinxStandaloneReader ()
119- reader ._setup_transforms (registry = app .registry )
120-
121- parser = app .registry .create_source_parser (filetype , config = app .config , env = app .env )
122- if parser .__class__ .__name__ == 'CommonMarkParser' and parser .settings_spec == ():
123- # a workaround for recommonmark
124- # If recommonmark.AutoStrictify is enabled, the parser invokes reST parser
125- # internally. But recommonmark-0.4.0 does not provide settings_spec for reST
126- # parser. As a workaround, this copies settings_spec for RSTParser to the
127- # CommonMarkParser.
128- from docutils .parsers .rst import Parser as RSTParser
129-
130- parser .settings_spec = RSTParser .settings_spec # type: ignore[misc]
131-
119+ reader ._setup_transforms (transforms )
132120 pub = Publisher (
133121 reader = reader ,
134122 parser = parser ,
@@ -137,7 +125,7 @@ def create_publisher(app: Sphinx, filetype: str) -> Publisher:
137125 destination = NullOutput (),
138126 )
139127 # Propagate exceptions by default when used programmatically:
140- defaults = {'traceback' : True , ** app . env .settings }
128+ defaults = {'traceback' : True , ** env .settings }
141129 # Set default settings
142130 pub .get_settings (** defaults )
143131 return pub
0 commit comments