Skip to content

Commit 66de973

Browse files
committed
Switch to the CommonMark MarkDown parser
Removed support for Parsedown and ParsedownExtra, fixes issue #362.
1 parent 0b7426f commit 66de973

493 files changed

Lines changed: 31231 additions & 7783 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
"algo26-matthias/idna-convert": "^v3.1.1",
1212
"enshrined/svg-sanitize": "^0.19.0",
1313
"netcarver/textile": "v4.1.1",
14-
"erusev/parsedown": "^v2.0.0-beta-1",
15-
"erusev/parsedown-extra": "^v2.0.0-beta-1",
14+
"league/commonmark": "^2.5.1",
15+
"ezyang/htmlpurifier": "^v4.17.0",
1616
"openpsa/universalfeedcreator": "^v1.9.0",
1717
"phpmailer/phpmailer": "^v6.9.1",
1818
"phpoffice/phpspreadsheet": "^1.29.0",

include/config/dist.conf.inc.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@
151151
$phpwcms['enable_GDPR'] = true; // Try to handle GDPR inside of phpwcms by default (anonymize IP...)
152152
$phpwcms['login_autocomplete'] = true; // If true the browser/user can decide to store login/password and/or autofill in credentials
153153
$phpwcms['lazy_loading'] = 'lazy'; // Set how images or iframes should be loaded: lazy (recommend), eager (right away) or auto (let browser decide).
154-
$phpwcms['markdown_extra'] = false; // Enable/disable Markdown Extra https://michelf.ca/projects/php-markdown/extra/
155154
$phpwcms['disable_generator'] = false; // Disable <meta name="generator"> and header `X-phpwcms-Release`
156155
$phpwcms['disable_processed_in'] = false; // Hide header `X-phpwcms-Page-Processed-In`
157156
$phpwcms['session.cookie_httponly.off'] = false; // Set this to `true` if the session Cookie should also be accessible by JavaScript

include/inc_front/content/cnt0.article.inc.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@
4646
switch($crow["acontent_form"]) {
4747

4848
case 'markdown':
49-
init_markdown();
50-
$crow['acontent_text'] = $phpwcms['parsedown_class']->text($crow['acontent_text']);
49+
$crow['acontent_text'] = parse_markdown($crow['acontent_text']);
5150
break;
5251

5352
case 'textile':

include/inc_front/content/cnt14.article.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696

9797
if($crow['fieldgroup'][$custom_field_key]['render'] === 'markdown') {
9898
init_markdown();
99-
$crow["acontent_template"] = render_cnt_template($crow["acontent_template"], $custom_field_replacer, $phpwcms['parsedown_class']->text($custom_field_value));
99+
$crow["acontent_template"] = render_cnt_template($crow["acontent_template"], $custom_field_replacer, parse_markdown($custom_field_value));
100100
} elseif($crow['fieldgroup'][$custom_field_key]['render'] === 'plain') {
101101
$crow["acontent_template"] = render_cnt_template($crow["acontent_template"], $custom_field_replacer, plaintext_htmlencode($custom_field_value));
102102
} else {

include/inc_front/content/cnt31.article.inc.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@
363363
switch($image['text_render']) {
364364

365365
case 'markdown':
366-
$value['freetext'] = $phpwcms['parsedown_class']->text($value['freetext']);
366+
$value['freetext'] = parse_markdown($value['freetext']);
367367
break;
368368

369369
case 'textile':
@@ -480,7 +480,7 @@
480480

481481
if($image['fieldgroup'][$custom_field_key]['render'] === 'markdown') {
482482
init_markdown();
483-
$img_a = render_cnt_template($img_a, $custom_field_replacer, $phpwcms['parsedown_class']->text($custom_field_value));
483+
$img_a = render_cnt_template($img_a, $custom_field_replacer, parse_markdown($custom_field_value));
484484
} elseif($image['fieldgroup'][$custom_field_key]['render'] === 'plain') {
485485
$img_a = render_cnt_template($img_a, $custom_field_replacer, plaintext_htmlencode($custom_field_value));
486486
} else {

include/inc_front/content/cnt32.article.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151

152152
if($tabs['fieldgroup'][$custom_field_key]['render'] === 'markdown') {
153153
init_markdown();
154-
$tabs['entries'][$key] = render_cnt_template($tabs['entries'][$key], $custom_field_replacer, $phpwcms['parsedown_class']->text($custom_field_value));
154+
$tabs['entries'][$key] = render_cnt_template($tabs['entries'][$key], $custom_field_replacer, parse_markdown($custom_field_value));
155155
} elseif($tabs['fieldgroup'][$custom_field_key]['render'] === 'plain') {
156156
$tabs['entries'][$key] = render_cnt_template($tabs['entries'][$key], $custom_field_replacer, plaintext_htmlencode($custom_field_value));
157157
} else {

include/inc_front/content/cnt33.article.inc.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,8 @@
446446
$value['cnt_description'] = br_htmlencode($value['cnt_description']);
447447
} elseif($value['cnt_object']['cnt_textformat'] === 'markdown') {
448448
init_markdown();
449-
$value['cnt_teasertext'] = $phpwcms['parsedown_class']->text($value['cnt_teasertext']);
450-
$value['cnt_description'] = $phpwcms['parsedown_class']->text($value['cnt_description']);
449+
$value['cnt_teasertext'] = parse_markdown($value['cnt_teasertext']);
450+
$value['cnt_description'] = parse_markdown($value['cnt_description']);
451451
} elseif($value['cnt_object']['cnt_textformat'] === 'textile') {
452452
init_textile();
453453
$value['cnt_teasertext'] = $phpwcms['textile_class']->parse($value['cnt_teasertext']);

include/inc_front/front.func.inc.php

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818

1919
//specific functions for the frontend
2020

21+
use League\CommonMark\Environment\Environment;
22+
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
23+
use League\CommonMark\Extension\GithubFlavoredMarkdownExtension;
24+
use League\CommonMark\MarkdownConverter;
25+
2126
function spacer($width=1, $height=1) {
2227
//creates a placeholder image (transparent gif)
2328
return '<span style="display:inline-block;width:'.intval($width).'px;height:'.intval($height).'px" class="'.$GLOBALS['template_default']['classes']['spaceholder'].'"></span>';
@@ -4556,16 +4561,16 @@ function get_attr_data_gallery($group='', $prefix=' ', $suffix='') {
45564561
}
45574562

45584563
/**
4559-
* Init Parsedown or ParsedownExtra Class
4564+
* Init CommonMark Class
4565+
* @link https://commonmark.thephpleague.com/
45604566
*/
45614567
function init_markdown() {
45624568

4563-
if(!isset($GLOBALS['phpwcms']['parsedown_class'])) {
4564-
if (empty($GLOBALS['phpwcms']['markdown_extra'])) {
4565-
$GLOBALS['phpwcms']['parsedown_class'] = new \Erusev\Parsedown\Parsedown();
4566-
} else {
4567-
$GLOBALS['phpwcms']['parsedown_class'] = new \Erusev\ParsedownExtra\ParsedownExtra();
4568-
}
4569+
if(!isset($GLOBALS['phpwcms']['commonmark_class'])) {
4570+
$environment = new Environment();
4571+
$environment->addExtension(new CommonMarkCoreExtension());
4572+
$environment->addExtension(new GithubFlavoredMarkdownExtension());
4573+
$GLOBALS['phpwcms']['commonmark_class'] = new MarkdownConverter($environment);
45694574
}
45704575

45714576
}
@@ -4580,3 +4585,17 @@ function init_textile() {
45804585
}
45814586

45824587
}
4588+
4589+
/**
4590+
* Parse content with CommonMark
4591+
* @link https://commonmark.thephpleague.com/
4592+
*
4593+
* @param string $text
4594+
*/
4595+
function parse_markdown(string $text) {
4596+
if ($text === '') {
4597+
return '';
4598+
}
4599+
init_markdown();
4600+
return $GLOBALS['phpwcms']['commonmark_class']->convert($text);
4601+
}

include/vendor/composer/autoload_classmap.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,62 @@
2424
'JSONCreator' => $vendorDir . '/openpsa/universalfeedcreator/lib/Creator/JSONCreator.php',
2525
'KMLCreator' => $vendorDir . '/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php',
2626
'MBOXCreator' => $vendorDir . '/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php',
27+
'Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php',
28+
'Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/exceptions.php',
29+
'Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php',
30+
'Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php',
31+
'Nette\\HtmlStringable' => $vendorDir . '/nette/utils/src/HtmlStringable.php',
32+
'Nette\\IOException' => $vendorDir . '/nette/utils/src/exceptions.php',
33+
'Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/exceptions.php',
34+
'Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/exceptions.php',
35+
'Nette\\Iterators\\CachingIterator' => $vendorDir . '/nette/utils/src/Iterators/CachingIterator.php',
36+
'Nette\\Iterators\\Mapper' => $vendorDir . '/nette/utils/src/Iterators/Mapper.php',
37+
'Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/compatibility.php',
38+
'Nette\\Localization\\Translator' => $vendorDir . '/nette/utils/src/Translator.php',
39+
'Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/exceptions.php',
40+
'Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/exceptions.php',
41+
'Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/exceptions.php',
42+
'Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php',
43+
'Nette\\Schema\\Context' => $vendorDir . '/nette/schema/src/Schema/Context.php',
44+
'Nette\\Schema\\DynamicParameter' => $vendorDir . '/nette/schema/src/Schema/DynamicParameter.php',
45+
'Nette\\Schema\\Elements\\AnyOf' => $vendorDir . '/nette/schema/src/Schema/Elements/AnyOf.php',
46+
'Nette\\Schema\\Elements\\Base' => $vendorDir . '/nette/schema/src/Schema/Elements/Base.php',
47+
'Nette\\Schema\\Elements\\Structure' => $vendorDir . '/nette/schema/src/Schema/Elements/Structure.php',
48+
'Nette\\Schema\\Elements\\Type' => $vendorDir . '/nette/schema/src/Schema/Elements/Type.php',
49+
'Nette\\Schema\\Expect' => $vendorDir . '/nette/schema/src/Schema/Expect.php',
50+
'Nette\\Schema\\Helpers' => $vendorDir . '/nette/schema/src/Schema/Helpers.php',
51+
'Nette\\Schema\\Message' => $vendorDir . '/nette/schema/src/Schema/Message.php',
52+
'Nette\\Schema\\Processor' => $vendorDir . '/nette/schema/src/Schema/Processor.php',
53+
'Nette\\Schema\\Schema' => $vendorDir . '/nette/schema/src/Schema/Schema.php',
54+
'Nette\\Schema\\ValidationException' => $vendorDir . '/nette/schema/src/Schema/ValidationException.php',
55+
'Nette\\SmartObject' => $vendorDir . '/nette/utils/src/SmartObject.php',
56+
'Nette\\StaticClass' => $vendorDir . '/nette/utils/src/StaticClass.php',
57+
'Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/exceptions.php',
58+
'Nette\\Utils\\ArrayHash' => $vendorDir . '/nette/utils/src/Utils/ArrayHash.php',
59+
'Nette\\Utils\\ArrayList' => $vendorDir . '/nette/utils/src/Utils/ArrayList.php',
60+
'Nette\\Utils\\Arrays' => $vendorDir . '/nette/utils/src/Utils/Arrays.php',
61+
'Nette\\Utils\\AssertionException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
62+
'Nette\\Utils\\Callback' => $vendorDir . '/nette/utils/src/Utils/Callback.php',
63+
'Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php',
64+
'Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php',
65+
'Nette\\Utils\\Floats' => $vendorDir . '/nette/utils/src/Utils/Floats.php',
66+
'Nette\\Utils\\Helpers' => $vendorDir . '/nette/utils/src/Utils/Helpers.php',
67+
'Nette\\Utils\\Html' => $vendorDir . '/nette/utils/src/Utils/Html.php',
68+
'Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/compatibility.php',
69+
'Nette\\Utils\\Image' => $vendorDir . '/nette/utils/src/Utils/Image.php',
70+
'Nette\\Utils\\ImageException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
71+
'Nette\\Utils\\Json' => $vendorDir . '/nette/utils/src/Utils/Json.php',
72+
'Nette\\Utils\\JsonException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
73+
'Nette\\Utils\\ObjectHelpers' => $vendorDir . '/nette/utils/src/Utils/ObjectHelpers.php',
74+
'Nette\\Utils\\ObjectMixin' => $vendorDir . '/nette/utils/src/Utils/ObjectMixin.php',
75+
'Nette\\Utils\\Paginator' => $vendorDir . '/nette/utils/src/Utils/Paginator.php',
76+
'Nette\\Utils\\Random' => $vendorDir . '/nette/utils/src/Utils/Random.php',
77+
'Nette\\Utils\\Reflection' => $vendorDir . '/nette/utils/src/Utils/Reflection.php',
78+
'Nette\\Utils\\RegexpException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
79+
'Nette\\Utils\\Strings' => $vendorDir . '/nette/utils/src/Utils/Strings.php',
80+
'Nette\\Utils\\Type' => $vendorDir . '/nette/utils/src/Utils/Type.php',
81+
'Nette\\Utils\\UnknownImageFileException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
82+
'Nette\\Utils\\Validators' => $vendorDir . '/nette/utils/src/Utils/Validators.php',
2783
'OPMLCreator' => $vendorDir . '/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php',
2884
'PHPCreator' => $vendorDir . '/openpsa/universalfeedcreator/lib/Creator/PHPCreator.php',
2985
'PIECreator01' => $vendorDir . '/openpsa/universalfeedcreator/lib/Creator/PIECreator01.php',

include/vendor/composer/autoload_files.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
1010
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
1111
'b45b351e6b6f7487d819961fef2fda77' => $vendorDir . '/jakeasmith/http_build_url/src/http_build_url.php',
12-
'fdc0e9724ddc47859c8bf0c1ea0a623a' => $vendorDir . '/openpsa/universalfeedcreator/lib/constants.php',
12+
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
1313
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
14+
'fdc0e9724ddc47859c8bf0c1ea0a623a' => $vendorDir . '/openpsa/universalfeedcreator/lib/constants.php',
1415
'23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php',
1516
'5897ea0ac4cccf14d323035e65887801' => $vendorDir . '/symfony/polyfill-php82/bootstrap.php',
1617
);

0 commit comments

Comments
 (0)