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