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, $frontmatter_tag = 'off'): 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 = "{{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 if($frontmatter_tag == 'off') { 43 return $renderResult; 44 } elseif($frontmatter_tag == 'upper') { 45 return $tagStr."\n\n".$renderResult; 46 } else { 47 return $renderResult."\n\n".$tagStr; 48 } 49 } 50 51 // Temporary implementation: separate method for frontmatter extraction 52 // Since som parsed frontmatter info must be included in main text, it should be merged 53 public static function ExtractFrontmatter($markdown) { 54 $frontMatterExtension = new FrontMatterExtension(); 55 $result = $frontMatterExtension->getFrontMatterParser()->parse($markdown); 56 57 return $result; 58 } 59 60 public static function createDWEnvironment(): Environment { 61 $config = []; 62 $environment = new Environment($config); 63 $environment->addExtension(new CommonMarkToDokuWikiExtension()); 64 $environment->addExtension(new FootnoteToDokuwikiExtension()); 65 $environment->addExtension(new StrikethroughExtension()); 66 $environment->addExtension(new TableExtension()); 67 $environment->addExtension(new FrontMatterExtension()); 68 69 $environment->mergeConfig([ 70 'html_input' => 'strip', 71 ]); 72 73 return $environment; 74 } 75} 76 77?>