File: parser-map-tag-print.rs

package info (click to toggle)
rustc-web 1.78.0%2Bdfsg1-2~deb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,245,420 kB
  • sloc: xml: 147,985; javascript: 18,022; sh: 11,083; python: 10,265; ansic: 6,172; cpp: 5,023; asm: 4,390; makefile: 4,269
file content (90 lines) | stat: -rw-r--r-- 3,477 bytes parent folder | download | duplicates (6)
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
use pulldown_cmark::{Event, Options, Parser, Tag};

fn main() {
    let markdown_input = concat!(
        "# My Heading\n",
        "\n",
        "My paragraph.\n",
        "\n",
        "* a\n",
        "* b\n",
        "* c\n",
        "\n",
        "1. d\n",
        "2. e\n",
        "3. f\n",
        "\n",
        "> my block quote\n",
        "\n",
        "```\n",
        "my code block\n",
        "```\n",
        "\n",
        "*emphasis*\n",
        "**strong**\n",
        "~~strikethrough~~\n",
        "[My Link](http://example.com)\n",
        "![My Image](http://example.com/image.jpg)\n",
        "\n",
        "| a | b |\n",
        "| - | - |\n",
        "| c | d |\n",
        "\n",
        "hello[^1]\n",
        "[^1]: my footnote\n",
    );
    println!(
        "\nParsing the following markdown string:\n{}\n",
        markdown_input
    );

    // Set up the parser. We can treat is as any other iterator.
    // For each event, we print its details, such as the tag or string.
    // This filter simply returns the same event without any changes;
    // you can compare the `event-filter` example which alters the output.
    let parser = Parser::new_ext(markdown_input, Options::all()).map(|event| {
        match &event {
            Event::Start(tag) => match tag {
                Tag::Heading(heading_level, fragment_identifier, class_list) => println!(
                    "Heading heading_level: {} fragment identifier: {:?} classes: {:?}",
                    heading_level, fragment_identifier, class_list
                ),
                Tag::Paragraph => println!("Paragraph"),
                Tag::List(ordered_list_first_item_number) => println!(
                    "List ordered_list_first_item_number: {:?}",
                    ordered_list_first_item_number
                ),
                Tag::Item => println!("Item (this is a list item)"),
                Tag::Emphasis => println!("Emphasis (this is a span tag)"),
                Tag::Strong => println!("Strong (this is a span tag)"),
                Tag::Strikethrough => println!("Strikethrough (this is a span tag)"),
                Tag::BlockQuote => println!("BlockQuote"),
                Tag::CodeBlock(code_block_kind) => {
                    println!("CodeBlock code_block_kind: {:?}", code_block_kind)
                }
                Tag::Link(link_type, url, title) => println!(
                    "Link link_type: {:?} url: {} title: {}",
                    link_type, url, title
                ),
                Tag::Image(link_type, url, title) => println!(
                    "Image link_type: {:?} url: {} title: {}",
                    link_type, url, title
                ),
                Tag::Table(column_text_alignment_list) => println!(
                    "Table column_text_alignment_list: {:?}",
                    column_text_alignment_list
                ),
                Tag::TableHead => println!("TableHead (contains TableRow tags"),
                Tag::TableRow => println!("TableRow (contains TableCell tags)"),
                Tag::TableCell => println!("TableCell (contains inline tags)"),
                Tag::FootnoteDefinition(label) => println!("FootnoteDefinition label: {}", label),
            },
            _ => (),
        };
        event
    });

    let mut html_output = String::new();
    pulldown_cmark::html::push_html(&mut html_output, parser);
    println!("\nHTML output:\n{}\n", &html_output);
}