xref: /plugin/commonmark/src/Dokuwiki/Plugin/Commonmark/Commonmark.php (revision 81da5a387f233c0115df0d2a40d078b7af98d898)
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?>