18ec9a8f2SSungbin Jeon<?php 28ec9a8f2SSungbin Jeon 38ec9a8f2SSungbin Jeonnamespace Dokuwiki\Plugin\Commonmark; 48ec9a8f2SSungbin Jeon 594a075eeSSungbin Jeonuse League\CommonMark\Environment\Environment; 694a075eeSSungbin Jeonuse League\CommonMark\Parser\MarkdownParser; 71e536badSSungbin Jeonuse Dokuwiki\Plugin\Commonmark\Extension\CommonmarkToDokuwikiExtension; 8f46768a8SSungbin Jeonuse Dokuwiki\Plugin\Commonmark\Extension\FootnoteToDokuwikiExtension; 978c882e7SSungbin Jeonuse League\CommonMark\Extension\Strikethrough\StrikethroughExtension; 10656793f4SSungbin Jeonuse Dokuwiki\Plugin\Commonmark\Extension\TableExtension; 11*81da5a38SSungbin Jeonuse League\CommonMark\Extension\FrontMatter\FrontMatterExtension; 12*81da5a38SSungbin Jeonuse League\CommonMark\Extension\FrontMatter\Output\RenderedContentWithFrontMatter; 138ec9a8f2SSungbin Jeon 148ec9a8f2SSungbin Jeonclass Commonmark { 158ec9a8f2SSungbin Jeon public static function RendtoDW($markdown): string { 168ec9a8f2SSungbin Jeon # create environment 178ec9a8f2SSungbin Jeon $environment = self::createDWEnvironment(); 188ec9a8f2SSungbin Jeon 198ec9a8f2SSungbin Jeon # create parser 2094a075eeSSungbin Jeon $parser = new MarkdownParser($environment); 218ec9a8f2SSungbin Jeon # create Dokuwiki Renderer 228ec9a8f2SSungbin Jeon $DWRenderer = new DWRenderer($environment); 238ec9a8f2SSungbin Jeon 24*81da5a38SSungbin Jeon # separate frontmatter and main text 25*81da5a38SSungbin Jeon $FMresult = self::ExtractFrontmatter($markdown); 26*81da5a38SSungbin Jeon $frontmatter = $FMresult->getFrontMatter(); 27*81da5a38SSungbin Jeon $markdownOnly = $FMresult->getContent(); 28*81da5a38SSungbin Jeon //print_r($frontmatter); 29*81da5a38SSungbin Jeon 30*81da5a38SSungbin Jeon # extract tags only 31*81da5a38SSungbin Jeon $tags = $frontmatter['tags']; 32*81da5a38SSungbin Jeon $tagStr = "{{tag>"; 33*81da5a38SSungbin Jeon foreach ($tags as $tag) { 34*81da5a38SSungbin Jeon $tagStr = $tagStr. "\"". $tag. "\" "; 35*81da5a38SSungbin Jeon } 36*81da5a38SSungbin Jeon $tagStr = $tagStr. "}}\n\n"; 37*81da5a38SSungbin Jeon echo $tagStr; 38*81da5a38SSungbin Jeon 39*81da5a38SSungbin Jeon $document = $parser->parse($markdownOnly); 40*81da5a38SSungbin Jeon $renderResult = $DWRenderer->renderNode($document); 41*81da5a38SSungbin Jeon 42*81da5a38SSungbin Jeon return $renderResult; 43*81da5a38SSungbin Jeon } 44*81da5a38SSungbin Jeon 45*81da5a38SSungbin Jeon // Temporary implementation: separate method for frontmatter extraction 46*81da5a38SSungbin Jeon // Since som parsed frontmatter info must be included in main text, it should be merged 47*81da5a38SSungbin Jeon public static function ExtractFrontmatter($markdown) { 48*81da5a38SSungbin Jeon $frontMatterExtension = new FrontMatterExtension(); 49*81da5a38SSungbin Jeon $result = $frontMatterExtension->getFrontMatterParser()->parse($markdown); 50*81da5a38SSungbin Jeon 51*81da5a38SSungbin Jeon return $result; 528ec9a8f2SSungbin Jeon } 538ec9a8f2SSungbin Jeon 548ec9a8f2SSungbin Jeon public static function createDWEnvironment(): Environment { 55b0a36678SSungbin Jeon $config = []; 56b0a36678SSungbin Jeon $environment = new Environment($config); 578ec9a8f2SSungbin Jeon $environment->addExtension(new CommonMarkToDokuWikiExtension()); 58f46768a8SSungbin Jeon $environment->addExtension(new FootnoteToDokuwikiExtension()); 5978c882e7SSungbin Jeon $environment->addExtension(new StrikethroughExtension()); 60656793f4SSungbin Jeon $environment->addExtension(new TableExtension()); 61*81da5a38SSungbin Jeon $environment->addExtension(new FrontMatterExtension()); 62f46768a8SSungbin Jeon 63f46768a8SSungbin Jeon $environment->mergeConfig([ 64f46768a8SSungbin Jeon 'html_input' => 'strip', 65f46768a8SSungbin Jeon ]); 668ec9a8f2SSungbin Jeon 678ec9a8f2SSungbin Jeon return $environment; 688ec9a8f2SSungbin Jeon } 698ec9a8f2SSungbin Jeon} 708ec9a8f2SSungbin Jeon 718ec9a8f2SSungbin Jeon?>