From 577ab07e3413aec36c856a2eb1c8b1ac9a7a5cc3 Mon Sep 17 00:00:00 2001 From: Annika Backstrom Date: Tue, 24 May 2022 21:56:15 +0100 Subject: [PATCH] Add support for Gemtext lists. Fixes #3 --- src/ArticleParser.php | 20 ++++++++++++++++++-- tests/ArticleParserTest.php | 6 ++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ArticleParser.php b/src/ArticleParser.php index 5fd84ac..3895818 100644 --- a/src/ArticleParser.php +++ b/src/ArticleParser.php @@ -22,6 +22,9 @@ class ArticleParser extends Parser { $last_node = null; //updated every time $previous_node = null; // we only update this for significant nodes + $block_level = 0; + $list_item = 0; + $walker = $this->document->walker(); while ($event = $walker->next()) { $entering = $event->isEntering(); @@ -35,10 +38,16 @@ class ArticleParser extends Parser { } if (!$entering) { + if ($node instanceof ListBlock) { + $block_level -= 1; + $list_item = 0; + } + continue; } if ($node instanceof ListBlock) { + $block_level += 1; $in_frontmatter = false; continue; } @@ -55,8 +64,15 @@ class ArticleParser extends Parser { } } - $leader = $previous_node ? "\n" : ""; - $gemtext[] = $leader . $text; + if ($block_level > 1) { + $list_item += 1; + + $leader = $list_item === 1 ? "\n" : ""; + $gemtext[] = $leader . '* ' . $text; + } else { + $leader = $previous_node ? "\n" : ""; + $gemtext[] = $leader . $text; + } $previous_node = $node; diff --git a/tests/ArticleParserTest.php b/tests/ArticleParserTest.php index 853b2af..793995f 100644 --- a/tests/ArticleParserTest.php +++ b/tests/ArticleParserTest.php @@ -95,4 +95,10 @@ class ArticleParserTest extends TestCase { $this->parser->load(vfsStream::url('root/article.md')); $this->assertSame("=> bar foo\n\n=> foo bar", $this->parser->convert()); } + + public function testList() { + $this->setArticleText("- para\n\t- item 1\n\t- item 2\n- out"); + $this->parser->load(vfsStream::url('root/article.md')); + $this->assertSame("para\n\n* item 1\n* item 2\n\nout", $this->parser->convert()); + } }