|  | @@ -0,0 +1,37 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +namespace App\Markdown;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +use League\CommonMark\Parser\Inline\InlineParserInterface;
 | 
	
		
			
				|  |  | +use League\CommonMark\Parser\Inline\InlineParserMatch;
 | 
	
		
			
				|  |  | +use League\CommonMark\Parser\InlineParserContext;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class ColorParser implements InlineParserInterface
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    public function getMatchDefinition(): InlineParserMatch
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        return InlineParserMatch::regex("!([a-z]+):(.+?)!");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public function parse(InlineParserContext $inlineContext): bool
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $matches = $inlineContext->getMatches();
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        if (count($matches) === 3) {
 | 
	
		
			
				|  |  | +            // La couleur est capturée dans le premier groupe, et le texte dans le second
 | 
	
		
			
				|  |  | +            $color = $matches[1];
 | 
	
		
			
				|  |  | +            $text = $matches[2];
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            $colorNode = new ColorText($text, $color);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            $inlineContext->getContainer()->appendChild($colorNode);
 | 
	
		
			
				|  |  | +            $inlineContext->getCursor()->advanceBy(mb_strlen($matches[0]));
 | 
	
		
			
				|  |  | +            dump($matches[0]);
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return false;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |