47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | const between = require('unist-util-find-all-between'); | ||
|  | const find = require('unist-util-find'); | ||
|  | const findAfter = require('unist-util-find-after'); | ||
|  | const findAllAfter = require('unist-util-find-all-after'); | ||
|  | 
 | ||
|  | function getAllBetween(tree, marker) { | ||
|  |   const start = find(tree, { | ||
|  |     type: 'heading', | ||
|  |     children: [ | ||
|  |       { | ||
|  |         type: 'text', | ||
|  |         value: marker | ||
|  |       } | ||
|  |     ] | ||
|  |   }); | ||
|  | 
 | ||
|  |   if (!start) return []; | ||
|  | 
 | ||
|  |   const isEnd = node => { | ||
|  |     return ( | ||
|  |       node.type === 'heading' && node.depth <= start.depth && isMarker(node) | ||
|  |     ); | ||
|  |   }; | ||
|  | 
 | ||
|  |   const isMarker = node => { | ||
|  |     if (node.children && node.children[0]) { | ||
|  |       const child = node.children[0]; | ||
|  |       return ( | ||
|  |         child.type === 'text' && | ||
|  |         child.value.startsWith('--') && | ||
|  |         child.value.endsWith('--') | ||
|  |       ); | ||
|  |     } else { | ||
|  |       return false; | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   const end = findAfter(tree, start, isEnd); | ||
|  | 
 | ||
|  |   const targetNodes = end | ||
|  |     ? between(tree, start, end) | ||
|  |     : findAllAfter(tree, start); | ||
|  |   return targetNodes; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = getAllBetween; |