1#![cfg_attr(docsrs, feature(doc_cfg))]
52#![deny(
53 missing_docs,
54 missing_debug_implementations,
55 missing_copy_implementations,
56 trivial_casts,
57 trivial_numeric_casts,
58 unstable_features,
59 unused_import_braces
60)]
61#![allow(
62 unknown_lints,
63 clippy::doc_markdown,
64 cyclomatic_complexity,
65 clippy::bool_to_int_with_if,
66 clippy::too_many_arguments
67)]
68
69pub mod adapters;
70pub mod arena_tree;
71pub mod html;
72pub mod nodes;
73pub mod plugins;
74
75mod character_set;
76mod cm;
77mod ctype;
78mod entity;
79mod parser;
80mod scanners;
81mod strings;
82#[cfg(test)]
83mod tests;
84mod xml;
85
86pub use cm::escape_inline as escape_commonmark_inline;
87pub use cm::escape_link_destination as escape_commonmark_link_destination;
88pub use cm::format_document as format_commonmark;
89pub use cm::format_document_with_plugins as format_commonmark_with_plugins;
90pub use html::format_document as format_html;
91pub use html::format_document_with_plugins as format_html_with_plugins;
92#[doc(inline)]
93pub use html::Anchorizer;
94pub use nodes::Node;
95pub use parser::options;
96pub use parser::{parse_document, Options, ResolvedReference};
97pub use xml::format_document as format_xml;
98pub use xml::format_document_with_plugins as format_xml_with_plugins;
99
100pub type Arena<'a> = typed_arena::Arena<nodes::AstNode<'a>>;
102
103#[deprecated(
104 since = "0.45.0",
105 note = "use `comrak::options::Extension` instead of `comrak::ExtensionOptions`"
106)]
107pub type ExtensionOptions<'c> = parser::options::Extension<'c>;
109#[deprecated(
110 since = "0.45.0",
111 note = "use `comrak::options::Parse` instead of `comrak::ParseOptions`"
112)]
113pub type ParseOptions<'c> = parser::options::Parse<'c>;
115#[deprecated(
116 since = "0.45.0",
117 note = "use `comrak::options::Render` instead of `comrak::RenderOptions `"
118)]
119pub type RenderOptions = parser::options::Render;
121
122#[deprecated(
123 since = "0.45.0",
124 note = "use `comrak::options::BrokenLinkReference` instead of `comrak::BrokenLinkReference`"
125)]
126pub type BrokenLinkReference<'l> = parser::options::BrokenLinkReference<'l>;
128#[deprecated(
129 since = "0.45.0",
130 note = "use `comrak::options::ListStyleType` instead of `comrak::ListStyleType `"
131)]
132pub type ListStyleType = parser::options::ListStyleType;
134#[deprecated(
135 since = "0.45.0",
136 note = "use `comrak::options::Plugins` instead of `comrak::Plugins`"
137)]
138pub type Plugins<'p> = parser::options::Plugins<'p>;
140#[deprecated(
141 since = "0.45.0",
142 note = "use `comrak::options::RenderPlugins` instead of `comrak::RenderPlugins`"
143)]
144pub type RenderPlugins<'p> = parser::options::RenderPlugins<'p>;
146#[deprecated(
147 since = "0.45.0",
148 note = "use `comrak::options::WikiLinksMode` instead of `comrak::WikiLinksMode `"
149)]
150pub type WikiLinksMode = parser::options::WikiLinksMode;
152
153#[cfg(feature = "bon")]
154#[deprecated(
155 since = "0.45.0",
156 note = "use `comrak::options::ExtensionBuilder` instead of `comrak::ExtensionOptionsBuilder`"
157)]
158pub type ExtensionOptionsBuilder<'c> = parser::options::ExtensionBuilder<'c>;
160#[cfg(feature = "bon")]
161#[deprecated(
162 since = "0.45.0",
163 note = "use `comrak::options::ParseBuilder` instead of `comrak::ParseOptionsBuilder`"
164)]
165pub type ParseOptionsBuilder<'c> = parser::options::ParseBuilder<'c>;
167#[cfg(feature = "bon")]
168#[deprecated(
169 since = "0.45.0",
170 note = "use `comrak::options::RenderBuilder` instead of `comrak::RenderOptionsBuilder `"
171)]
172pub type RenderOptionsBuilder = parser::options::RenderBuilder;
174#[cfg(feature = "bon")]
175#[deprecated(
176 since = "0.45.0",
177 note = "use `comrak::options::PluginsBuilder` instead of `comrak::PluginsBuilder`"
178)]
179pub type PluginsBuilder<'p> = parser::options::PluginsBuilder<'p>;
181#[cfg(feature = "bon")]
182#[deprecated(
183 since = "0.45.0",
184 note = "use `comrak::options::RenderPluginsBuilder` instead of `comrak::RenderPluginsBuilder`"
185)]
186pub type RenderPluginsBuilder<'p> = parser::options::RenderPluginsBuilder<'p>;
188
189pub fn markdown_to_html(md: &str, options: &Options) -> String {
193 markdown_to_html_with_plugins(md, options, &options::Plugins::default())
194}
195
196pub fn markdown_to_html_with_plugins(
200 md: &str,
201 options: &Options,
202 plugins: &options::Plugins,
203) -> String {
204 let arena = Arena::new();
205 let root = parse_document(&arena, md, options);
206 let mut out = String::new();
207 format_html_with_plugins(root, options, &mut out, plugins).unwrap();
208 out
209}
210
211pub fn version() -> &'static str {
213 env!("CARGO_PKG_VERSION")
214}
215
216pub fn markdown_to_commonmark(md: &str, options: &Options) -> String {
218 let arena = Arena::new();
219 let root = parse_document(&arena, md, options);
220 let mut out = String::new();
221 format_commonmark(root, options, &mut out).unwrap();
222 out
223}
224
225pub fn markdown_to_commonmark_xml(md: &str, options: &Options) -> String {
229 markdown_to_commonmark_xml_with_plugins(md, options, &options::Plugins::default())
230}
231
232pub fn markdown_to_commonmark_xml_with_plugins(
236 md: &str,
237 options: &Options,
238 plugins: &options::Plugins,
239) -> String {
240 let arena = Arena::new();
241 let root = parse_document(&arena, md, options);
242 let mut out = String::new();
243 format_xml_with_plugins(root, options, &mut out, plugins).unwrap();
244 out
245}