1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
//! //! the mark up text with color program. //! //! ```text //! Usage: //! aki-mcolor [options] //! //! mark up text with color //! //! Options: //! -r, --red <exp> regular expression, mark color is red //! -g, --green <exp> regular expression, mark color is green //! -b, --blue <exp> regular expression, mark color is blue //! -c, --cyan <exp> regular expression, mark color is cyan //! -m, --magenda <exp> regular expression, mark color is magenda //! -y, --yellow <exp> regular expression, mark color is yellow //! -u, --unmark <exp> regular expression, unmark color //! //! -H, --help display this help and exit //! -V, --version display version information and exit //! //! Env: //! AKI_MCOLOR_RED_ST red start sequence //! AKI_MCOLOR_GREEN_ST greep start sequence //! AKI_MCOLOR_BLUE_ST blue start sequence //! AKI_MCOLOR_CYAN_ST cyan start sequence //! AKI_MCOLOR_MAGENDA_ST magenda start sequence //! AKI_MCOLOR_YELLOW_ST yellow start sequence //! AKI_MCOLOR_ED color end sequence //! ``` //! //! # Examples //! //! ### Command line example 1 //! //! Makes "`ca`" **red** and "`b`" **green** in standard input text. //! //! ```text //! echo "abcabca" | aki-mcolor -r "ca" -g "b" //! ``` //! //! result output : //! //! ![out abcabca image] //! //! [out abcabca image]: https://raw.githubusercontent.com/aki-akaguma/aki-mcolor/main/img/out-abcabca-1.png //! //! //! ### Command line example 2 //! //! Extract "`arm`" from the rustup target list and make "`musl`" **green** and "`android`" **cyan**. //! //! ```text //! rustup target list | aki-mline -e arm | aki-mcolor -g "musl" -c "android" //! ``` //! //! result output : //! //! ![out rustup image] //! //! [out rustup image]: https://raw.githubusercontent.com/aki-akaguma/aki-mcolor/main/img/out-rustup-1.png //! //! - [aki-mline](https://crates.io/crates/aki-mline): extract match line command like grep. //! //! ### Library example //! //! See [`fn execute()`] for this library examples. //! //! [`fn execute()`]: crate::execute //! #[macro_use] extern crate anyhow; mod conf; mod run; mod util; use flood_tide::HelpVersion; use runnel::*; use std::io::Write; const TRY_HELP_MSG: &str = "Try --help for help."; /// /// execute mcolor /// /// params: /// - sioe: stream in/out/err /// - program: program name. etc. "mcolor" /// - args: parameter arguments. /// /// return: /// - ok: () /// - err: anyhow /// /// example: /// /// ``` /// use runnel::RunnelIoeBuilder; /// /// let r = libaki_mcolor::execute(&RunnelIoeBuilder::new().build(), /// "mcolor", &["-r", "Error", "-g", "Warn"]); /// ``` /// pub fn execute(sioe: &RunnelIoe, prog_name: &str, args: &[&str]) -> anyhow::Result<()> { let conf = match conf::parse_cmdopts(prog_name, args) { Ok(conf) => conf, Err(errs) => { for err in errs.iter().take(1) { if err.is_help() || err.is_version() { let _r = sioe.pout().lock().write_fmt(format_args!("{}\n", err)); return Ok(()); } } return Err(anyhow!("{}\n{}", errs, TRY_HELP_MSG)); } }; run::run(sioe, &conf) }