From ee5ed3e0750dace4979c8beed4f712b589e475dc Mon Sep 17 00:00:00 2001 From: Annika Backstrom Date: Tue, 24 May 2022 22:45:17 +0100 Subject: [PATCH] Add support for Gemtext preformatted text. Fixes #5 --- src/ArticleParser.php | 11 +++++++++++ tests/ArticleParserTest.php | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/src/ArticleParser.php b/src/ArticleParser.php index c7411b8..2c2ca5a 100644 --- a/src/ArticleParser.php +++ b/src/ArticleParser.php @@ -7,6 +7,7 @@ namespace LogseqGem; use League\CommonMark\Node\Inline\Text; use League\CommonMark\Extension\CommonMark\Node\Inline\Link; use League\CommonMark\Extension\CommonMark\Node\Block\BlockQuote; +use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode; use League\CommonMark\Extension\CommonMark\Node\Block\Heading; use League\CommonMark\Extension\CommonMark\Node\Block\ListBlock; use League\CommonMark\Extension\CommonMark\Node\Block\ListItem; @@ -78,6 +79,16 @@ class ArticleParser extends Parser { continue; } + if ($node instanceof FencedCode) { + $leader = $previous_node ? "\n" : ""; + + $gemtext[] = $leader . "```"; + $gemtext[] = $node->getLiteral() . '```'; // allow trailing slash from literal + + $previous_node = $node; + continue; + } + if ($node instanceof Text) { $text = $node->getLiteral(); diff --git a/tests/ArticleParserTest.php b/tests/ArticleParserTest.php index 09ca982..fc6b610 100644 --- a/tests/ArticleParserTest.php +++ b/tests/ArticleParserTest.php @@ -113,4 +113,10 @@ class ArticleParserTest extends TestCase { $this->parser->load(vfsStream::url('root/article.md')); $this->assertSame("before\n\n# h1\n\n## h2\n\n### h3\n\nafter", $this->parser->convert()); } + + public function testPreformatted() { + $this->setArticleText("- before\n- ```\n one\n two\n ```\n- after"); + $this->parser->load(vfsStream::url('root/article.md')); + $this->assertSame("before\n\n```\none\ntwo\n```\n\nafter", $this->parser->convert()); + } }