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
//! This library provides an adapter from [pulldown-cmark][] events to //! [hamlet][] tokens. //! //! [pulldown-cmark]: https://github.com/google/pulldown-cmark //! [hamlet]: https://github.com/Nemo157/hamlet //! //! Note that block/inline html within markdown is not parsed into proper hamlet //! tokens. //! //! ## Example //! //! ```rust //! extern crate pulldown_cmark; //! extern crate cmark_hamlet; //! //! use std::fmt::Write; //! use pulldown_cmark::Parser; //! use cmark_hamlet::Adapter; //! //! fn main() { //! let md = "Ok, [google][ref]\n\n- - -\n\n\ //! ```rust\n\ //! use hamlet;\n\ //! ```\n\n\ //! [ref]: http://google.com"; //! let ada = Adapter::new(Parser::new(md), false); //! let mut res = String::from(""); //! for token in ada { //! write!(res, "{}", token).unwrap(); //! } //! assert_eq!("<p>Ok, <a href=\"http://google.com\">google</a></p><hr />\ //! <pre data-lang=\"rust\"><code>use hamlet;\n</code></pre>", //! res); //! } //! ``` //! //! ## Translation //! //! ### Event mapping //! //! `pulldown_cmark` event | Action //! ---------------------- | ------ //! `Start(tag)` | Context dependent; see [Tag mapping](#tag-mapping) //! `End(tag)` | Context dependent //! `Text(text)` | Context dependent; see [Text handling](#text-handling) //! `Html(html)` | `Token::RawText(html)` //! `InlineHtml(html)` | `Token::RawText(html)` //! `SoftBreak` | `"\n"` (see [Text handling](#text-handling)) //! `HardBreak` | `Token` representing `<br />` //! `FootnoteReference(_)` | unimplemented! //! //! ### Tag mapping //! //! `pulldown_cmark` tag | Html tag name //! ----------------------- | ------------- //! `BlockQuote` | `blockquote` //! `CodeBlock(lang)` | `pre` and `code` (see [`CodeBlock` handling](#codeblock-handling)) //! `Code` | `code` //! `Emphasis` | `em` //! `FootnoteDefinition(_)` | unimplemented! //! `Header(level)` | `h{level}` //! `Image(_, _)` | `img` //! `Item` | `li` //! `Link(_, _)` | `a` //! `List(None)` | `ul` //! `List(Some(_))` | `ol` //! `Paragraph` | `p` //! `Rule` | `hr` //! `Strong` | `strong` //! `Table(_)` | `table` //! `TableCell` | `td` or `th` //! `TableHead` | `tr` //! `TableRow` | `tr` //! //! ### Text handling //! //! All successive `Text` and `SoftBreak` events are clumped together to form a //! single `hamlet::Text` token, if [`group_text` //! argument](struct.Adapter.html#method.new) provided was `true`. //! //! ### `CodeBlock` handling //! //! If `lang` attribute is not empty, then a `data-lang` attribute is added to //! the `pre` tag with that value. #![warn(missing_docs)] extern crate pulldown_cmark as cmark; #[macro_use] extern crate hamlet; mod adapter; pub use adapter::Adapter;