Continue highlights across code block lines.
This commit is contained in:
		
							parent
							
								
									75a763569b
								
							
						
					
					
						commit
						41927764fc
					
				
							
								
								
									
										4
									
								
								TODO.org
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								TODO.org
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | ||||
| * Things to do [3/14] | ||||
| * Things to do [4/14] | ||||
| ** DONE If the paragraph only contains an image, text-align center | ||||
| ** DONE Syntax highlighting for code blocks | ||||
| ** TODO Render gnuplot | ||||
| @ -14,4 +14,4 @@ | ||||
| ** TODO Add highlighting for languages [0/2] | ||||
| *** TODO bash | ||||
| *** TODO gnuplot | ||||
| ** TODO Bug: carry over highlight starts when breaking lines | ||||
| ** DONE Bug: carry over highlight starts when breaking lines | ||||
|  | ||||
| @ -169,6 +169,7 @@ where | ||||
| 
 | ||||
|     let mut highlighted_text: Vec<ISrcLine> = Vec::with_capacity(lines.len()); | ||||
|     let mut current_line = ISrcLine::new(); | ||||
|     let mut highlight_stack: Vec<&str> = Vec::new(); | ||||
|     for event in highlights { | ||||
|         match event.unwrap() { | ||||
|             HighlightEvent::Source { start, end } => { | ||||
| @ -178,8 +179,22 @@ where | ||||
|                     current_line | ||||
|                         .children | ||||
|                         .push(ISrcSegment::RawText(first_line.to_owned())); | ||||
|                     current_line.children.extend( | ||||
|                         highlight_stack | ||||
|                             .iter() | ||||
|                             .map(|_name| ISrcSegment::HighlightEnd), | ||||
|                     ); | ||||
|                     highlighted_text.push(current_line); | ||||
|                     current_line = ISrcLine::new(); | ||||
|                     current_line | ||||
|                         .children | ||||
|                         .extend( | ||||
|                             highlight_stack | ||||
|                                 .iter() | ||||
|                                 .map(|name| ISrcSegment::HighlightStart { | ||||
|                                     name: (*name).into(), | ||||
|                                 }), | ||||
|                         ); | ||||
|                     span = &span[(line_break_index + 1)..]; | ||||
|                 } | ||||
|                 if !span.is_empty() { | ||||
| @ -189,16 +204,20 @@ where | ||||
|                 } | ||||
|             } | ||||
|             HighlightEvent::HighlightStart(s) => { | ||||
|                 highlight_stack.push(highlight_names[s.0]); | ||||
|                 current_line.children.push(ISrcSegment::HighlightStart { | ||||
|                     name: highlight_names[s.0].into(), | ||||
|                 }); | ||||
|             } | ||||
|             HighlightEvent::HighlightEnd => { | ||||
|                 highlight_stack.pop(); | ||||
|                 current_line.children.push(ISrcSegment::HighlightEnd); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     debug_assert!(highlight_stack.is_empty()); | ||||
| 
 | ||||
|     Ok(highlighted_text) | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander