|
1 | 1 | use std::collections::BTreeMap; |
2 | | -use std::io; |
3 | 2 | use std::path::Path; |
4 | 3 |
|
5 | 4 | use crate::utils; |
| 5 | +use crate::utils::bracket_escape; |
6 | 6 |
|
7 | 7 | use handlebars::{Context, Handlebars, Helper, HelperDef, Output, RenderContext, RenderError}; |
8 | | -use pulldown_cmark::{html, Event, Parser}; |
9 | 8 |
|
10 | 9 | // Handlebars helper to construct TOC |
11 | 10 | #[derive(Clone, Copy)] |
@@ -103,7 +102,7 @@ impl HelperDef for RenderToc { |
103 | 102 | // Part title |
104 | 103 | if let Some(title) = item.get("part") { |
105 | 104 | out.write("<li class=\"part-title\">")?; |
106 | | - write_escaped(out, title)?; |
| 105 | + out.write(&bracket_escape(title))?; |
107 | 106 | out.write("</li>")?; |
108 | 107 | continue; |
109 | 108 | } |
@@ -148,20 +147,7 @@ impl HelperDef for RenderToc { |
148 | 147 | } |
149 | 148 |
|
150 | 149 | if let Some(name) = item.get("name") { |
151 | | - // Render only inline code blocks |
152 | | - |
153 | | - // filter all events that are not inline code blocks |
154 | | - let parser = Parser::new(name).filter(|event| match *event { |
155 | | - Event::Code(_) | Event::Html(_) | Event::Text(_) => true, |
156 | | - _ => false, |
157 | | - }); |
158 | | - |
159 | | - // render markdown to html |
160 | | - let mut markdown_parsed_name = String::with_capacity(name.len() * 3 / 2); |
161 | | - html::push_html(&mut markdown_parsed_name, parser); |
162 | | - |
163 | | - // write to the handlebars template |
164 | | - write_escaped(out, &markdown_parsed_name)?; |
| 150 | + out.write(&bracket_escape(name))? |
165 | 151 | } |
166 | 152 |
|
167 | 153 | if path_exists { |
@@ -205,18 +191,3 @@ fn write_li_open_tag( |
205 | 191 | li.push_str("\">"); |
206 | 192 | out.write(&li) |
207 | 193 | } |
208 | | - |
209 | | -fn write_escaped(out: &mut dyn Output, mut title: &str) -> io::Result<()> { |
210 | | - let needs_escape: &[char] = &['<', '>']; |
211 | | - while let Some(next) = title.find(needs_escape) { |
212 | | - out.write(&title[..next])?; |
213 | | - match title.as_bytes()[next] { |
214 | | - b'<' => out.write("<")?, |
215 | | - b'>' => out.write(">")?, |
216 | | - _ => unreachable!(), |
217 | | - } |
218 | | - title = &title[next + 1..]; |
219 | | - } |
220 | | - out.write(title)?; |
221 | | - Ok(()) |
222 | | -} |
0 commit comments