diff options
| author | Greg Roach <fisharebest@gmail.com> | 2017-10-17 11:13:27 +0100 |
|---|---|---|
| committer | Greg Roach <fisharebest@gmail.com> | 2017-10-17 11:13:27 +0100 |
| commit | ff05914fe94b7e9d9cc9762891f944674dcc5907 (patch) | |
| tree | d7b67fdcc1e1242c49225ef4ffe12d0e869db9a2 /app/Filter.php | |
| parent | 22acdb080c4429b40c310f5ecb7f4a84429476cc (diff) | |
| download | webtrees-ff05914fe94b7e9d9cc9762891f944674dcc5907.tar.gz webtrees-ff05914fe94b7e9d9cc9762891f944674dcc5907.tar.bz2 webtrees-ff05914fe94b7e9d9cc9762891f944674dcc5907.zip | |
Fix: #1382 - use markdown parser to reformat text
Diffstat (limited to 'app/Filter.php')
| -rw-r--r-- | app/Filter.php | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/app/Filter.php b/app/Filter.php index e77d54506a..cd1c73afcb 100644 --- a/app/Filter.php +++ b/app/Filter.php @@ -15,10 +15,15 @@ */ namespace Fisharebest\Webtrees; +use League\CommonMark\Block\Renderer\DocumentRenderer; +use League\CommonMark\Block\Renderer\ParagraphRenderer; use League\CommonMark\Converter; use League\CommonMark\DocParser; use League\CommonMark\Environment; use League\CommonMark\HtmlRenderer; +use League\CommonMark\Inline\Parser\AutolinkParser; +use League\CommonMark\Inline\Renderer\LinkRenderer; +use League\CommonMark\Inline\Renderer\TextRenderer; use Webuni\CommonMark\TableExtension\TableExtension; /** @@ -45,7 +50,7 @@ class Filter { case 'markdown': return '<div class="markdown" dir="auto">' . self::markdown($text, $WT_TREE) . '</div>'; default: - return '<div style="white-space: pre-wrap;" dir="auto">' . self::expandUrls($text) . '</div>'; + return '<div style="white-space: pre-wrap;" dir="auto">' . self::expandUrls($text, $WT_TREE) . '</div>'; } } @@ -56,7 +61,7 @@ class Filter { * * @return string */ - public static function expandUrls($text) { + public static function oldexpandUrls($text) { return preg_replace_callback( '/' . addcslashes('(?!>)' . self::URL_REGEX . '(?!</a>)', '/') . '/i', function ($m) { @@ -67,6 +72,43 @@ class Filter { } /** + * Format a block of text, expanding URLs and XREFs. + * + * @param string $text + * @param Tree tree + * + * @return string + */ + public static function expandUrls($text, Tree $tree) { + // If it looks like a URL, turn it into a markdown autolink. + $text = preg_replace('/' . addcslashes(self::URL_REGEX, '/') . '/', '<$0>', $text); + + // Create a minimal commonmark processor - just add support for autolinks. + $environment = new Environment; + $environment->mergeConfig([ + 'renderer' => [ + 'block_separator' => "\n", + 'inner_separator' => "\n", + 'soft_break' => "\n", + ], + 'html_input' => Environment::HTML_INPUT_ESCAPE, + 'allow_unsafe_links' => true, + ]); + + $environment->mergeConfig(['html_input' => Environment::HTML_INPUT_ESCAPE]); + $environment->addBlockRenderer('League\CommonMark\Block\Element\Document', new DocumentRenderer); + $environment->addBlockRenderer('League\CommonMark\Block\Element\Paragraph', new ParagraphRenderer); + $environment->addInlineRenderer('League\CommonMark\Inline\Element\Text', new TextRenderer); + $environment->addInlineRenderer('League\CommonMark\Inline\Element\Link', new LinkRenderer); + $environment->addInlineParser(new AutolinkParser); + $environment->addInlineParser(new MarkdownXrefParser($tree)); + + $converter = new Converter(new DocParser($environment), new HtmlRenderer($environment)); + + return $converter->convertToHtml($text); + } + + /** * Format a block of text, using "Markdown". * * @param string $text |
