diff --git a/src/ArticleParser.php b/src/ArticleParser.php index d9755f8..187303d 100644 --- a/src/ArticleParser.php +++ b/src/ArticleParser.php @@ -4,5 +4,35 @@ declare(strict_types=1); namespace LogseqGem; +use League\CommonMark\Node\NodeWalker; +use League\CommonMark\Node\Inline\Text; +use League\CommonMark\Extension\CommonMark\Node\Inline\Link; + class ArticleParser extends Parser { + public function convert() { + $gemtext = []; + + $link = 0; + + $walker = $this->document->walker(); + while ($event = $walker->next()) { + $entering = $event->isEntering(); + $node = $event->getNode(); + + if ($entering && $node instanceof Text) { + $gemtext[] = $node->getLiteral(); + } + + if ($entering && $node instanceof Link) { + $label = $walker->next()->getNode(); + if (!$label instanceof Text) { + throw new \Exception('Expected next node in Link to be Text, got ' . get_class($label)); + } + + $gemtext[] = sprintf('=> %s %s', $node->getUrl(), $label->getLiteral()); + } + } + + return implode("\n\n", $gemtext); + } } diff --git a/tests/GemlogParserTest.php b/tests/GemlogParserTest.php index 7f141b6..13602aa 100644 --- a/tests/GemlogParserTest.php +++ b/tests/GemlogParserTest.php @@ -8,7 +8,6 @@ use PHPUnit\Framework\TestCase; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamDirectory; -use League\CommonMark\Node\Block\Document; use LogseqGem\GemlogParser; class GemlogParserTest extends TestCase {