Blob


1 <?php
3 /**
4 * Use Markdown Markup in PmWiki
5 *
6 * @author Sebastian Siedentopf <schlaefer@macnews.de>
7 * @version 2021-11-12
8 * @link http://www.pmwiki.org/wiki/Cookbook/MarkdownMarkupExtension
9 * @copyright by the respective authors 2006
10 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
11 * @package markdownpmw
12 *
13 * Version 0.2 and later by Said Achmiz
14 */
16 $RecipeInfo['MarkdownMarkupExtension']['Version'] = '2021-11-12';
18 SDV($MarkdownMarkupParserOptions, array());
19 SDV($MarkdownMarkupMarkdownExtraEnabled, false);
20 SDV($MarkdownMarkupUseClassicParser, false);
21 SDV($MarkdownMarkupDirectiveArgumentsEnabled, false);
23 Markup("markdown", '<include', "/\\(:markdown(?:\\s+([^\\n]+))?(?:\\s*)?:\\)(.*?)[\\n]?\\(:markdownend:\\)/s",
24 "MarkupPmWikiConversion");
26 function MarkupPmWikiConversion($m) {
27 global $MarkdownMarkupDirectiveArgumentsEnabled, $MarkdownMarkupParserOptions,
28 $MarkdownMarkupMarkdownExtraEnabled, $MarkdownMarkupUseClassicParser,
29 $MarkdownMarkupClassicParserAvailable;
31 $args = ParseArgs($m[1]);
32 $options = $MarkdownMarkupParserOptions;
33 $options['extra'] = $MarkdownMarkupMarkdownExtraEnabled;
34 $options['classic'] = $MarkdownMarkupUseClassicParser;
35 if ($MarkdownMarkupDirectiveArgumentsEnabled)
36 $options = array_merge($options, array_slice($args, 1));
38 $text = $m[2];
39 $astr = array (
40 "<:vspace>" => "\n\n",
41 "(:nl:)" => "\n",
42 "&gt;" => ">",
43 "&lt;" => "<",
44 );
45 $pstr = array(
46 // "/<p>/" => "<p class='vspace'>",
47 // "/&amp;(.*?);/" => "&\\1;",
48 );
50 $text = str_replace(array_keys($astr), $astr, $text);
52 if ($options['classic']) {
53 if (!file_exists("markdown.php"))
54 return Keep("<p style='color: red; font-weight: bold;'>Classic parser not available.</p>\n");
56 define(MARKDOWN_PARSER_CLASS, ($options['extra'] ? 'MarkdownExtra_Parser' : 'Markdown_Parser'));
57 include_once("markdown.php");
59 $text = Markdown($text);
60 } else {
61 if ($options['extra']) {
62 include_once("Michelf/MarkdownExtra.inc.php");
63 } else {
64 include_once("Michelf/Markdown.inc.php");
65 }
67 $parser_options = array_slice($options, 2);
68 if (empty($parser_options)) {
69 $text = $options['extra'] ?
70 Michelf\MarkdownExtra::defaultTransform($text) :
71 Michelf\Markdown::defaultTransform($text);
72 } else {
73 $parser = $options['extra'] ? new Michelf\MarkdownExtra : new Michelf\Markdown;
74 foreach ($parser_options as $md_opt => $md_opt_value) {
75 $parser->{$md_opt} = $md_opt_value;
76 }
77 $text = $parser->transform($text);
78 }
79 $text = preg_replace(array_keys($pstr), $pstr, $text);
80 }
82 return Keep($text);
83 }
85 ?>