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;
							 |