Browse Source

Add emphasis, strong and code support in header

index-subcmd
Peng Guanwen 5 years ago
parent
commit
972aab1ac4
2 changed files with 53 additions and 12 deletions
  1. +26
    -12
      components/rendering/src/markdown.rs
  2. +27
    -0
      components/rendering/tests/markdown.rs

+ 26
- 12
components/rendering/src/markdown.rs View File

@@ -82,21 +82,35 @@ fn fix_link(link: &str, context: &RenderContext) -> Result<String> {
Ok(result) Ok(result)
} }


fn start_tag(temp_header: &mut TempHeader, tag: &Tag) -> bool {
match tag {
Tag::Emphasis => temp_header.add_html("<em>"),
Tag::Strong => temp_header.add_html("<strong>"),
Tag::Code => temp_header.add_html("<code>"),
// Tag::Link is handled elsewhere
_ => return false,
}
true
}

fn end_tag(temp_header: &mut TempHeader, tag: &Tag) -> bool {
match tag {
Tag::Emphasis => temp_header.add_html("</em>"),
Tag::Strong => temp_header.add_html("</strong>"),
Tag::Code => temp_header.add_html("</code>"),
Tag::Link(_, _) => temp_header.add_html("</a>"),
_ => return false,
}
true
}

/// returns true if event have been processed /// returns true if event have been processed
fn push_to_temp_header(event: &Event, temp_header: &mut TempHeader) -> bool { fn push_to_temp_header(event: &Event, temp_header: &mut TempHeader) -> bool {
match event { match event {
Event::End(Tag::Link(_, _)) => {
temp_header.add_html("</a>");
}
Event::Start(Tag::Code) => {
temp_header.add_html("<code>");
}
Event::End(Tag::Code) => {
temp_header.add_html("</code>");
}
_ => return false,
Event::Start(tag) => start_tag(temp_header, tag),
Event::End(tag) => end_tag(temp_header, tag),
_ => false,
} }
true
} }


pub fn markdown_to_html(content: &str, context: &RenderContext) -> Result<Rendered> { pub fn markdown_to_html(content: &str, context: &RenderContext) -> Result<Rendered> {
@@ -126,7 +140,7 @@ pub fn markdown_to_html(content: &str, context: &RenderContext) -> Result<Render


{ {
let parser = Parser::new_ext(content, opts).map(|event| { let parser = Parser::new_ext(content, opts).map(|event| {
// Header first
// Trivial markup generation
if in_header && push_to_temp_header(&event, &mut temp_header) { if in_header && push_to_temp_header(&event, &mut temp_header) {
return Event::Html(Borrowed("")); return Event::Html(Borrowed(""));
} }


+ 27
- 0
components/rendering/tests/markdown.rs View File

@@ -522,6 +522,33 @@ fn can_understand_link_with_title_in_header() {
); );
} }


#[test]
fn can_understand_emphasis_in_header() {
let permalinks_ctx = HashMap::new();
let config = Config::default();
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
let res = render_content("# *Emphasis* text", &context).unwrap();
assert_eq!(res.body, "<h1 id=\"emphasis-text\"><em>Emphasis</em> text</h1>\n")
}

#[test]
fn can_understand_strong_in_header() {
let permalinks_ctx = HashMap::new();
let config = Config::default();
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
let res = render_content("# **Strong** text", &context).unwrap();
assert_eq!(res.body, "<h1 id=\"strong-text\"><strong>Strong</strong> text</h1>\n")
}

#[test]
fn can_understand_code_in_header() {
let permalinks_ctx = HashMap::new();
let config = Config::default();
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
let res = render_content("# `Code` text", &context).unwrap();
assert_eq!(res.body, "<h1 id=\"code-text\"><code>Code</code> text</h1>\n")
}

#[test] #[test]
fn can_make_valid_relative_link_in_header() { fn can_make_valid_relative_link_in_header() {
let mut permalinks = HashMap::new(); let mut permalinks = HashMap::new();


Loading…
Cancel
Save