@@ -196,21 +196,26 @@ impl MDBook {
196
196
Ok ( ( ) )
197
197
}
198
198
199
- /// Run the entire build process for a particular [`Renderer`].
200
- pub fn execute_build_process ( & self , renderer : & dyn Renderer ) -> Result < ( ) > {
201
- let mut preprocessed_book = self . book . clone ( ) ;
199
+ /// Run preprocessors and return the final book.
200
+ pub fn preprocess_book ( & self , renderer : & dyn Renderer ) -> Result < ( Book , PreprocessorContext ) > {
202
201
let preprocess_ctx = PreprocessorContext :: new (
203
202
self . root . clone ( ) ,
204
203
self . config . clone ( ) ,
205
204
renderer. name ( ) . to_string ( ) ,
206
205
) ;
207
-
206
+ let mut preprocessed_book = self . book . clone ( ) ;
208
207
for preprocessor in & self . preprocessors {
209
208
if preprocessor_should_run ( & * * preprocessor, renderer, & self . config ) {
210
209
debug ! ( "Running the {} preprocessor." , preprocessor. name( ) ) ;
211
210
preprocessed_book = preprocessor. run ( & preprocess_ctx, preprocessed_book) ?;
212
211
}
213
212
}
213
+ Ok ( ( preprocessed_book, preprocess_ctx) )
214
+ }
215
+
216
+ /// Run the entire build process for a particular [`Renderer`].
217
+ pub fn execute_build_process ( & self , renderer : & dyn Renderer ) -> Result < ( ) > {
218
+ let ( preprocessed_book, preprocess_ctx) = self . preprocess_book ( renderer) ?;
214
219
215
220
let name = renderer. name ( ) ;
216
221
let build_dir = self . build_dir_for ( name) ;
@@ -264,13 +269,25 @@ impl MDBook {
264
269
265
270
let mut chapter_found = false ;
266
271
267
- // FIXME: Is "test" the proper renderer name to use here?
268
- let preprocess_context =
269
- PreprocessorContext :: new ( self . root . clone ( ) , self . config . clone ( ) , "test" . to_string ( ) ) ;
272
+ struct TestRenderer ;
273
+ impl Renderer for TestRenderer {
274
+ // FIXME: Is "test" the proper renderer name to use here?
275
+ fn name ( & self ) -> & str {
276
+ "test"
277
+ }
270
278
271
- let book = LinkPreprocessor :: new ( ) . run ( & preprocess_context, self . book . clone ( ) ) ?;
272
- // Index Preprocessor is disabled so that chapter paths continue to point to the
273
- // actual markdown files.
279
+ fn render ( & self , _: & RenderContext ) -> Result < ( ) > {
280
+ Ok ( ( ) )
281
+ }
282
+ }
283
+
284
+ // Index Preprocessor is disabled so that chapter paths
285
+ // continue to point to the actual markdown files.
286
+ self . preprocessors = determine_preprocessors ( & self . config ) ?
287
+ . into_iter ( )
288
+ . filter ( |pre| pre. name ( ) != IndexPreprocessor :: NAME )
289
+ . collect ( ) ;
290
+ let ( book, _) = self . preprocess_book ( & TestRenderer ) ?;
274
291
275
292
let mut failed = false ;
276
293
for item in book. iter ( ) {
0 commit comments