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
//!
//! the mark up text with cycling color program.
//!
//! ```text
//! Usage:
//! aki-mcycle [options]
//!
//! mark up text with cycling color.
//!
//! Options:
//! -e, --exp <exp> regular expression (default: ' ([0-9A-Z]{3,}):')
//!
//! -H, --help display this help and exit
//! -V, --version display version information and exit
//!
//! Env:
//! AKI_MCYCLE_COLOR_RED_ST red start sequence
//! AKI_MCYCLE_COLOR_GREEN_ST green start sequence
//! AKI_MCYCLE_COLOR_BLUE_ST blue start sequence
//! AKI_MCYCLE_COLOR_CYAN_ST cyan start sequence
//! AKI_MCYCLE_COLOR_MAGENDA_ST magenda start sequence
//! AKI_MCYCLE_COLOR_YELLOW_ST yellow start sequence
//! AKI_MCYCLE_COLOR_ED color end sequence
//! ```
//!
//!
//! # Examples
//!
//! ### Command line example 1
//!
//! Extract "`arm`" from the rustup target list and make "`linux-[^ ]+`" **color**.
//!
//! - 1st match: makes '`linux-musl`' **red**
//! - 2nd match: makes '`linux-musleabi`' **green**
//! - 3rd match: makes '`linux-musleabihf`' **blue**
//! - 4th match: makes '`linux-muslabi64`' **cyan**
//!
//! ```text
//! rustup target list | aki-mline -e arm | aki-mcycle -e "linux-[^ ]+"
//! ```
//!
//! result output :
//!
//! ![out rustup image]
//!
//! [out rustup image]: https://raw.githubusercontent.com/aki-akaguma/aki-mcycle/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
//!
extern crate anyhow;
use HelpVersion;
use *;
use Write;
const TRY_HELP_MSG: &str = "Try --help for help.";
///
/// execute mcycle
///
/// params:
/// - sioe: stream in/out/err
/// - program: program name. etc. "mcycle"
/// - args: parameter arguments.
///
/// return:
/// - ok: ()
/// - err: anyhow
///
/// example:
///
/// ```
/// use runnel::RunnelIoeBuilder;
///
/// let r = libaki_mcycle::execute(&RunnelIoeBuilder::new().build(),
/// "mcycle", &["-e", "Message: *[^ ]+"]);
/// ```
///