|
| 1 | +#![allow(missing_docs)] |
| 2 | +use clap::{Arg, Command}; |
| 3 | +use env_logger::Builder; |
| 4 | +use log::LevelFilter; |
| 5 | +use mdbook::preprocess::{CmdPreprocessor, Preprocessor}; |
| 6 | +use mdbook_lad_preprocessor::LADPreprocessor; |
| 7 | +use std::{env, fs::File, io, process::exit}; |
| 8 | + |
| 9 | +// use mdbook_lad_preprocessor::LADPreprocessor; |
| 10 | + |
| 11 | +fn init_logger() { |
| 12 | + let mut builder = Builder::new(); |
| 13 | + |
| 14 | + if let Ok(var) = env::var("RUST_LOG") { |
| 15 | + builder.parse_filters(&var); |
| 16 | + } else { |
| 17 | + builder.filter(None, LevelFilter::Info); |
| 18 | + } |
| 19 | + |
| 20 | + // target lad.log file in current directory |
| 21 | + // print pwd |
| 22 | + if let Ok(file) = File::create("./lad.log") { |
| 23 | + let target = Box::new(file); |
| 24 | + builder.target(env_logger::Target::Pipe(target)); |
| 25 | + } |
| 26 | + |
| 27 | + builder.init(); |
| 28 | + |
| 29 | + log::debug!("Debug logging enabled"); |
| 30 | +} |
| 31 | + |
| 32 | +pub fn make_app() -> Command { |
| 33 | + Command::new("nop-preprocessor") |
| 34 | + .about("A mdbook preprocessor which does precisely nothing") |
| 35 | + .subcommand( |
| 36 | + Command::new("supports") |
| 37 | + .arg(Arg::new("renderer").required(true)) |
| 38 | + .about("Check whether a renderer is supported by this preprocessor"), |
| 39 | + ) |
| 40 | +} |
| 41 | + |
| 42 | +fn main() -> Result<(), Box<dyn std::error::Error>> { |
| 43 | + init_logger(); |
| 44 | + let matches = make_app().get_matches(); |
| 45 | + if let Some(sub_args) = matches.subcommand_matches("supports") { |
| 46 | + let renderer = match sub_args.get_one::<String>("renderer") { |
| 47 | + Some(r) => r, |
| 48 | + None => { |
| 49 | + log::error!("No renderer specified"); |
| 50 | + exit(1) |
| 51 | + } |
| 52 | + }; |
| 53 | + |
| 54 | + if LADPreprocessor.supports_renderer(renderer) { |
| 55 | + exit(0) |
| 56 | + } else { |
| 57 | + exit(1) |
| 58 | + } |
| 59 | + } else { |
| 60 | + let (ctx, book) = CmdPreprocessor::parse_input(io::stdin())?; |
| 61 | + let processed_book = LADPreprocessor.run(&ctx, book)?; |
| 62 | + serde_json::to_writer(io::stdout(), &processed_book)?; |
| 63 | + exit(0) |
| 64 | + } |
| 65 | +} |
0 commit comments