summaryrefslogtreecommitdiffstats
path: root/vendor/mdbook/src/preprocess/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/mdbook/src/preprocess/mod.rs')
-rw-r--r--vendor/mdbook/src/preprocess/mod.rs70
1 files changed, 70 insertions, 0 deletions
diff --git a/vendor/mdbook/src/preprocess/mod.rs b/vendor/mdbook/src/preprocess/mod.rs
new file mode 100644
index 000000000..894e20035
--- /dev/null
+++ b/vendor/mdbook/src/preprocess/mod.rs
@@ -0,0 +1,70 @@
+//! Book preprocessing.
+
+pub use self::cmd::CmdPreprocessor;
+pub use self::index::IndexPreprocessor;
+pub use self::links::LinkPreprocessor;
+
+mod cmd;
+mod index;
+mod links;
+
+use crate::book::Book;
+use crate::config::Config;
+use crate::errors::*;
+
+use std::cell::RefCell;
+use std::collections::HashMap;
+use std::path::PathBuf;
+
+use serde::{Deserialize, Serialize};
+
+/// Extra information for a `Preprocessor` to give them more context when
+/// processing a book.
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct PreprocessorContext {
+ /// The location of the book directory on disk.
+ pub root: PathBuf,
+ /// The book configuration (`book.toml`).
+ pub config: Config,
+ /// The `Renderer` this preprocessor is being used with.
+ pub renderer: String,
+ /// The calling `mdbook` version.
+ pub mdbook_version: String,
+ #[serde(skip)]
+ pub(crate) chapter_titles: RefCell<HashMap<PathBuf, String>>,
+ #[serde(skip)]
+ __non_exhaustive: (),
+}
+
+impl PreprocessorContext {
+ /// Create a new `PreprocessorContext`.
+ pub(crate) fn new(root: PathBuf, config: Config, renderer: String) -> Self {
+ PreprocessorContext {
+ root,
+ config,
+ renderer,
+ mdbook_version: crate::MDBOOK_VERSION.to_string(),
+ chapter_titles: RefCell::new(HashMap::new()),
+ __non_exhaustive: (),
+ }
+ }
+}
+
+/// An operation which is run immediately after loading a book into memory and
+/// before it gets rendered.
+pub trait Preprocessor {
+ /// Get the `Preprocessor`'s name.
+ fn name(&self) -> &str;
+
+ /// Run this `Preprocessor`, allowing it to update the book before it is
+ /// given to a renderer.
+ fn run(&self, ctx: &PreprocessorContext, book: Book) -> Result<Book>;
+
+ /// A hint to `MDBook` whether this preprocessor is compatible with a
+ /// particular renderer.
+ ///
+ /// By default, always returns `true`.
+ fn supports_renderer(&self, _renderer: &str) -> bool {
+ true
+ }
+}