1<?php 2 3namespace Dokuwiki\Plugin\Commonmark; 4 5use League\CommonMark\Environment\Environment; 6use League\CommonMark\Parser\MarkdownParser; 7use Dokuwiki\Plugin\Commonmark\Extension\CommonmarkToDokuwikiExtension; 8use Dokuwiki\Plugin\Commonmark\Extension\FootnoteToDokuwikiExtension; 9use League\CommonMark\Extension\Strikethrough\StrikethroughExtension; 10use Dokuwiki\Plugin\Commonmark\Extension\TableExtension; 11use League\CommonMark\Extension\FrontMatter\FrontMatterExtension; 12use League\CommonMark\Extension\FrontMatter\Output\RenderedContentWithFrontMatter; 13 14class Commonmark { 15 public static function RendtoDW($markdown): string { 16 # create environment 17 $environment = self::createDWEnvironment(); 18 19 # create parser 20 $parser = new MarkdownParser($environment); 21 # create Dokuwiki Renderer 22 $DWRenderer = new DWRenderer($environment); 23 24 # separate frontmatter and main text 25 $FMresult = self::ExtractFrontmatter($markdown); 26 $frontmatter = $FMresult->getFrontMatter(); 27 $markdownOnly = $FMresult->getContent(); 28 //print_r($frontmatter); 29 30 # extract tags only 31 $tags = $frontmatter['tags']; 32 $tagStr = "\n\n{{tag>"; 33 foreach ($tags as $tag) { 34 $tagStr = $tagStr. "\"". $tag. "\" "; 35 } 36 $tagStr = $tagStr. "}}"; 37 //echo $tagStr; 38 39 $document = $parser->parse($markdownOnly); 40 $renderResult = $DWRenderer->renderNode($document); 41 42 return $renderResult.$tagStr; 43 } 44 45 // Temporary implementation: separate method for frontmatter extraction 46 // Since som parsed frontmatter info must be included in main text, it should be merged 47 public static function ExtractFrontmatter($markdown) { 48 $frontMatterExtension = new FrontMatterExtension(); 49 $result = $frontMatterExtension->getFrontMatterParser()->parse($markdown); 50 51 return $result; 52 } 53 54 public static function createDWEnvironment(): Environment { 55 $config = []; 56 $environment = new Environment($config); 57 $environment->addExtension(new CommonMarkToDokuWikiExtension()); 58 $environment->addExtension(new FootnoteToDokuwikiExtension()); 59 $environment->addExtension(new StrikethroughExtension()); 60 $environment->addExtension(new TableExtension()); 61 $environment->addExtension(new FrontMatterExtension()); 62 63 $environment->mergeConfig([ 64 'html_input' => 'strip', 65 ]); 66 67 return $environment; 68 } 69} 70 71?>