1use std::io;
6
7mod parse;
8mod term;
9
10#[derive(#[automatically_derived]
impl<'a> ::core::clone::Clone for MdStream<'a> {
#[inline]
fn clone(&self) -> MdStream<'a> {
MdStream(::core::clone::Clone::clone(&self.0))
}
}Clone, #[automatically_derived]
impl<'a> ::core::fmt::Debug for MdStream<'a> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field1_finish(f, "MdStream",
&&self.0)
}
}Debug, #[automatically_derived]
impl<'a> ::core::default::Default for MdStream<'a> {
#[inline]
fn default() -> MdStream<'a> {
MdStream(::core::default::Default::default())
}
}Default, #[automatically_derived]
impl<'a> ::core::cmp::PartialEq for MdStream<'a> {
#[inline]
fn eq(&self, other: &MdStream<'a>) -> bool { self.0 == other.0 }
}PartialEq)]
12pub struct MdStream<'a>(Vec<MdTree<'a>>);
13
14impl<'a> MdStream<'a> {
15 #[must_use]
17 pub fn parse_str(s: &str) -> MdStream<'_> {
18 parse::entrypoint(s)
19 }
20
21 pub fn write_anstream_buf(
24 &self,
25 buf: &mut Vec<u8>,
26 formatter: Option<&(dyn Fn(&str, &mut Vec<u8>) -> io::Result<()> + 'static)>,
27 ) -> io::Result<()> {
28 term::entrypoint(self, buf, formatter)
29 }
30}
31
32pub fn create_stdout_bufwtr() -> anstream::Stdout {
34 anstream::Stdout::always(std::io::stdout())
35}
36
37#[derive(#[automatically_derived]
impl<'a> ::core::clone::Clone for MdTree<'a> {
#[inline]
fn clone(&self) -> MdTree<'a> {
match self {
MdTree::Comment(__self_0) =>
MdTree::Comment(::core::clone::Clone::clone(__self_0)),
MdTree::CodeBlock { txt: __self_0, lang: __self_1 } =>
MdTree::CodeBlock {
txt: ::core::clone::Clone::clone(__self_0),
lang: ::core::clone::Clone::clone(__self_1),
},
MdTree::CodeInline(__self_0) =>
MdTree::CodeInline(::core::clone::Clone::clone(__self_0)),
MdTree::Strong(__self_0) =>
MdTree::Strong(::core::clone::Clone::clone(__self_0)),
MdTree::Emphasis(__self_0) =>
MdTree::Emphasis(::core::clone::Clone::clone(__self_0)),
MdTree::Strikethrough(__self_0) =>
MdTree::Strikethrough(::core::clone::Clone::clone(__self_0)),
MdTree::PlainText(__self_0) =>
MdTree::PlainText(::core::clone::Clone::clone(__self_0)),
MdTree::Link { disp: __self_0, link: __self_1 } =>
MdTree::Link {
disp: ::core::clone::Clone::clone(__self_0),
link: ::core::clone::Clone::clone(__self_1),
},
MdTree::RefLink { disp: __self_0, id: __self_1 } =>
MdTree::RefLink {
disp: ::core::clone::Clone::clone(__self_0),
id: ::core::clone::Clone::clone(__self_1),
},
MdTree::LinkDef { id: __self_0, link: __self_1 } =>
MdTree::LinkDef {
id: ::core::clone::Clone::clone(__self_0),
link: ::core::clone::Clone::clone(__self_1),
},
MdTree::ParagraphBreak => MdTree::ParagraphBreak,
MdTree::LineBreak => MdTree::LineBreak,
MdTree::HorizontalRule => MdTree::HorizontalRule,
MdTree::Heading(__self_0, __self_1) =>
MdTree::Heading(::core::clone::Clone::clone(__self_0),
::core::clone::Clone::clone(__self_1)),
MdTree::OrderedListItem(__self_0, __self_1) =>
MdTree::OrderedListItem(::core::clone::Clone::clone(__self_0),
::core::clone::Clone::clone(__self_1)),
MdTree::UnorderedListItem(__self_0) =>
MdTree::UnorderedListItem(::core::clone::Clone::clone(__self_0)),
}
}
}Clone, #[automatically_derived]
impl<'a> ::core::fmt::Debug for MdTree<'a> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
MdTree::Comment(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Comment", &__self_0),
MdTree::CodeBlock { txt: __self_0, lang: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"CodeBlock", "txt", __self_0, "lang", &__self_1),
MdTree::CodeInline(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"CodeInline", &__self_0),
MdTree::Strong(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Strong",
&__self_0),
MdTree::Emphasis(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Emphasis", &__self_0),
MdTree::Strikethrough(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Strikethrough", &__self_0),
MdTree::PlainText(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"PlainText", &__self_0),
MdTree::Link { disp: __self_0, link: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Link",
"disp", __self_0, "link", &__self_1),
MdTree::RefLink { disp: __self_0, id: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"RefLink", "disp", __self_0, "id", &__self_1),
MdTree::LinkDef { id: __self_0, link: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"LinkDef", "id", __self_0, "link", &__self_1),
MdTree::ParagraphBreak =>
::core::fmt::Formatter::write_str(f, "ParagraphBreak"),
MdTree::LineBreak =>
::core::fmt::Formatter::write_str(f, "LineBreak"),
MdTree::HorizontalRule =>
::core::fmt::Formatter::write_str(f, "HorizontalRule"),
MdTree::Heading(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"Heading", __self_0, &__self_1),
MdTree::OrderedListItem(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"OrderedListItem", __self_0, &__self_1),
MdTree::UnorderedListItem(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"UnorderedListItem", &__self_0),
}
}
}Debug, #[automatically_derived]
impl<'a> ::core::cmp::PartialEq for MdTree<'a> {
#[inline]
fn eq(&self, other: &MdTree<'a>) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(MdTree::Comment(__self_0), MdTree::Comment(__arg1_0)) =>
__self_0 == __arg1_0,
(MdTree::CodeBlock { txt: __self_0, lang: __self_1 },
MdTree::CodeBlock { txt: __arg1_0, lang: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(MdTree::CodeInline(__self_0), MdTree::CodeInline(__arg1_0))
=> __self_0 == __arg1_0,
(MdTree::Strong(__self_0), MdTree::Strong(__arg1_0)) =>
__self_0 == __arg1_0,
(MdTree::Emphasis(__self_0), MdTree::Emphasis(__arg1_0)) =>
__self_0 == __arg1_0,
(MdTree::Strikethrough(__self_0),
MdTree::Strikethrough(__arg1_0)) => __self_0 == __arg1_0,
(MdTree::PlainText(__self_0), MdTree::PlainText(__arg1_0)) =>
__self_0 == __arg1_0,
(MdTree::Link { disp: __self_0, link: __self_1 },
MdTree::Link { disp: __arg1_0, link: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(MdTree::RefLink { disp: __self_0, id: __self_1 },
MdTree::RefLink { disp: __arg1_0, id: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(MdTree::LinkDef { id: __self_0, link: __self_1 },
MdTree::LinkDef { id: __arg1_0, link: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(MdTree::Heading(__self_0, __self_1),
MdTree::Heading(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(MdTree::OrderedListItem(__self_0, __self_1),
MdTree::OrderedListItem(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(MdTree::UnorderedListItem(__self_0),
MdTree::UnorderedListItem(__arg1_0)) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq)]
39pub enum MdTree<'a> {
40 Comment(&'a str),
42 CodeBlock {
43 txt: &'a str,
44 lang: Option<&'a str>,
45 },
46 CodeInline(&'a str),
47 Strong(&'a str),
48 Emphasis(&'a str),
49 Strikethrough(&'a str),
50 PlainText(&'a str),
51 Link {
53 disp: &'a str,
54 link: &'a str,
55 },
56 RefLink {
58 disp: &'a str,
59 id: Option<&'a str>,
60 },
61 LinkDef {
63 id: &'a str,
64 link: &'a str,
65 },
66 ParagraphBreak,
69 LineBreak,
71 HorizontalRule,
72 Heading(u8, MdStream<'a>),
73 OrderedListItem(u16, MdStream<'a>),
74 UnorderedListItem(MdStream<'a>),
75}
76
77impl<'a> From<Vec<MdTree<'a>>> for MdStream<'a> {
78 fn from(value: Vec<MdTree<'a>>) -> Self {
79 Self(value)
80 }
81}