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
//! Documentation generation system
//!
//! # Command line parser documentation generation
//!
//! [`OptionParser`] implements two methods: [`render_html`](OptionParser::render_html) and
//! [`render_manpage`](OptionParser::render_manpage) that create a documentation in a mix of
//! html/markdown and ROFF formats respectively.
//!
//! To use it you should do something like this
//! ```
//! #[test]
//! fn update_doc() {
//!     # use bpaf::*;
//!     # let options = || short('a').switch().to_options();
//!     let options = options();
//!     let md = options.render_markdown("app_name");
//!     let roff = options.render_manpage("app_name", Section::General, None, None, None);
//!     # drop(md); drop(roff);
//!     // then save those docs into a files
//!     // If you commit those docs into your repo and optionally fail a test if there
//!     // are changes - CI will ensure that documentation is always up to date
//! }
//! ```
//!
//! # Documentation fragments to use inside `--help` messages
//!
//! `bpaf` tries to use semantic approach to documentation generation, instead of describing what
//! color specific string slice should be you need to specify what this string slice supposed to
//! mean.
//!
//! Most of the help related functions take `Into<Doc>` parameters, normally you would pass one of
//! following things:
//!
//! 1. Ready made `Doc` - usually with combinatoric API
//! ```ignore
//! # use bpaf::doc::Doc;
//! let mut doc = Doc::default();
//! doc.emphasis("Usage: ");
//! doc.literal("my_program");
//! // do something with it
//! drop(doc)
//! ```
//! 2. A string slice - `&str` can be converted into a fully plain text `Doc` which is enough
//!    for most applications
//!
//! 3. A slice of style value pairs
#![cfg_attr(not(doctest), doc = include_str!("docs2/help.md"))]
//!
//! 4. A structure from your own crate that can be converted into `Doc`
//!

#[doc(inline)]
pub use crate::buffer::{Doc, MetaInfo, Style};

#[doc(inline)]
#[cfg(feature = "docgen")]
pub use crate::buffer::Section;

#[cfg(doc)]
use crate::*;