4
4
5
5
use Cake \Core \InstanceConfigTrait ;
6
6
use League \CommonMark \CommonMarkConverter ;
7
- use League \CommonMark \Environment ;
7
+ use League \CommonMark \Environment as LegacyEnvironment ;
8
+ use League \CommonMark \Environment \Environment ;
9
+ use League \CommonMark \Extension \CommonMark \CommonMarkCoreExtension ;
10
+ use League \CommonMark \Extension \GithubFlavoredMarkdownExtension ;
11
+ use League \CommonMark \MarkdownConverter ;
12
+ use League \CommonMark \MarkdownConverterInterface ;
8
13
9
14
class CommonMarkMarkdown implements MarkdownInterface {
10
15
11
16
use InstanceConfigTrait;
12
17
13
18
/**
14
- * @var \League\CommonMark\CommonMarkConverter |null
19
+ * @var \League\CommonMark\MarkdownConverterInterface |null
15
20
*/
16
21
protected $ converter ;
17
22
@@ -37,15 +42,15 @@ public function __construct(array $config = []) {
37
42
public function convert (string $ text , array $ options = []): string {
38
43
$ converter = $ this ->converter ($ options );
39
44
40
- return $ converter ->convertToHtml ($ text );
45
+ return ( string ) $ converter ->convertToHtml ($ text );
41
46
}
42
47
43
48
/**
44
49
* @param array $options
45
50
*
46
- * @return \League\CommonMark\CommonMarkConverter
51
+ * @return \League\CommonMark\MarkdownConverterInterface
47
52
*/
48
- protected function converter (array $ options = []): CommonMarkConverter {
53
+ protected function converter (array $ options = []): MarkdownConverterInterface {
49
54
if ($ this ->converter === null ) {
50
55
$ this ->converter = static ::defaultConverter ($ options );
51
56
}
@@ -56,22 +61,32 @@ protected function converter(array $options = []): CommonMarkConverter {
56
61
/**
57
62
* @param array $options
58
63
*
59
- * @return \League\CommonMark\CommonMarkConverter
64
+ * @return \League\CommonMark\MarkdownConverterInterface
60
65
*/
61
- public static function defaultConverter (array $ options = []): CommonMarkConverter {
62
- $ environment = Environment::createGFMEnvironment ();
66
+ public static function defaultConverter (array $ options = []): MarkdownConverterInterface {
63
67
64
68
$ options += [
65
69
'escape ' => true ,
66
70
];
67
-
68
71
if ($ options ['escape ' ]) {
69
- $ environment ->mergeConfig ([
70
- 'html_input ' => Environment::HTML_INPUT_ESCAPE ,
71
- ]);
72
+ $ options ['html_input ' ] = 'escape ' ;
73
+ }
74
+ unset($ options ['escape ' ]);
75
+
76
+ if (!class_exists (Environment::class)) {
77
+ $ environment = LegacyEnvironment::createGFMEnvironment ();
78
+ $ environment ->mergeConfig ($ options );
79
+ } else {
80
+ $ environment = new Environment ($ options );
81
+ $ environment ->addExtension (new CommonMarkCoreExtension ());
82
+ $ environment ->addExtension (new GithubFlavoredMarkdownExtension ());
83
+ }
84
+
85
+ if (!class_exists (MarkdownConverter::class)) {
86
+ return new CommonMarkConverter ([], $ environment );
72
87
}
73
88
74
- return new CommonMarkConverter ([], $ environment );
89
+ return new MarkdownConverter ( $ environment );
75
90
}
76
91
77
92
}
0 commit comments