@@ -12,40 +12,42 @@ impl IgnoreBlocks {
12
12
let mut ignore = Vec :: new ( ) ;
13
13
let mut parser = Parser :: new ( s) . into_offset_iter ( ) ;
14
14
while let Some ( ( event, range) ) = parser. next ( ) {
15
- if let Event :: Start ( Tag :: CodeBlock ( _) ) = event {
16
- let start = range. start ;
17
- while let Some ( ( event, range) ) = parser. next ( ) {
18
- if let Event :: End ( TagEnd :: CodeBlock ) = event {
19
- ignore. push ( start..range. end ) ;
20
- break ;
21
- }
22
- }
23
- } else if let Event :: Start ( Tag :: BlockQuote ( _) ) = event {
24
- let start = range. start ;
25
- let mut count = 1 ;
26
- while let Some ( ( event, range) ) = parser. next ( ) {
27
- if let Event :: Start ( Tag :: BlockQuote ( _) ) = event {
28
- count += 1 ;
29
- } else if let Event :: End ( TagEnd :: BlockQuote ( _) ) = event {
30
- count -= 1 ;
31
- if count == 0 {
15
+ macro_rules! ignore_till_end {
16
+ ( $p: pat) => {
17
+ let start = range. start;
18
+ while let Some ( ( event, range) ) = parser. next( ) {
19
+ if let Event :: End ( $p) = event {
32
20
ignore. push( start..range. end) ;
33
21
break ;
34
22
}
35
23
}
24
+ } ;
25
+ }
26
+ match event {
27
+ Event :: Start ( Tag :: CodeBlock ( _) ) => {
28
+ ignore_till_end ! ( TagEnd :: CodeBlock ) ;
36
29
}
37
- } else if let Event :: Start ( Tag :: HtmlBlock ) = event {
38
- let start = range. start ;
39
- while let Some ( ( event, range) ) = parser. next ( ) {
40
- if let Event :: End ( TagEnd :: HtmlBlock ) = event {
41
- ignore. push ( start..range. end ) ;
42
- break ;
30
+ Event :: Start ( Tag :: BlockQuote ( _) ) => {
31
+ let start = range. start ;
32
+ let mut count = 1 ;
33
+ while let Some ( ( event, range) ) = parser. next ( ) {
34
+ if let Event :: Start ( Tag :: BlockQuote ( _) ) = event {
35
+ count += 1 ;
36
+ } else if let Event :: End ( TagEnd :: BlockQuote ( _) ) = event {
37
+ count -= 1 ;
38
+ if count == 0 {
39
+ ignore. push ( start..range. end ) ;
40
+ break ;
41
+ }
42
+ }
43
43
}
44
44
}
45
- } else if let Event :: InlineHtml ( _) = event {
46
- ignore. push ( range) ;
47
- } else if let Event :: Code ( _) = event {
48
- ignore. push ( range) ;
45
+ Event :: Start ( Tag :: HtmlBlock ) => {
46
+ ignore_till_end ! ( TagEnd :: HtmlBlock ) ;
47
+ }
48
+ Event :: InlineHtml ( _) => ignore. push ( range) ,
49
+ Event :: Code ( _) => ignore. push ( range) ,
50
+ _ => { }
49
51
}
50
52
}
51
53
0 commit comments