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 $tagStr = ''; # initialize tag string 29 //print_r($frontmatter); 30 31 # extract tags only 32 if(!empty($frontmatter)) { 33 $tags = $frontmatter['tags']; 34 $tagStr = "{{tag>"; 35 foreach ($tags as $tag) { 36 $tagStr = $tagStr. "\"". $tag. "\" "; 37 } 38 $tagStr = $tagStr. "}}"; 39 //echo $tagStr; 40 } 41 42 $document = $parser->parse($markdownOnly); 43 $renderResult = $DWRenderer->renderNode($document); 44 45 if($frontmatter_tag == 'off') { 46 return $renderResult; 47 } elseif($frontmatter_tag == 'upper') { 48 return $tagStr."\n\n".$renderResult; 49 } else { 50 return $renderResult."\n\n".$tagStr; 51 } 52 } 53 54 // Temporary implementation: separate method for frontmatter extraction 55 // Since som parsed frontmatter info must be included in main text, it should be merged 56 public static function ExtractFrontmatter($markdown) { 57 $frontMatterExtension = new FrontMatterExtension(); 58 $result = $frontMatterExtension->getFrontMatterParser()->parse($markdown); 59 60 return $result; 61 } 62 63 public static function createDWEnvironment(): Environment { 64 $config = []; 65 $environment = new Environment($config); 66 $environment->addExtension(new CommonMarkToDokuWikiExtension()); 67 $environment->addExtension(new FootnoteToDokuwikiExtension()); 68 $environment->addExtension(new StrikethroughExtension()); 69 $environment->addExtension(new TableExtension()); 70 $environment->addExtension(new FrontMatterExtension()); 71 72 $environment->mergeConfig([ 73 'html_input' => 'strip', 74 ]); 75 76 return $environment; 77 } 78} 79 80?>