Adding -i for writing gemlog index
This commit is contained in:
parent
27a8e454ef
commit
a6b52e4136
14
run.php
14
run.php
@ -3,14 +3,16 @@
|
|||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
use LogseqGem\ArticleRender;
|
use LogseqGem\ArticleRender;
|
||||||
|
use LogseqGem\GemlogRender;
|
||||||
|
|
||||||
require __DIR__ . '/vendor/autoload.php';
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
|
||||||
$opts = getopt('o:t:', rest_index: $rest_index);
|
$opts = getopt('o:t:i:', rest_index: $rest_index);
|
||||||
$rest = array_slice($argv, $rest_index);
|
$rest = array_slice($argv, $rest_index);
|
||||||
|
|
||||||
$gemlog_input_path = $rest[0] ?? null;
|
$gemlog_input_path = $rest[0] ?? null;
|
||||||
$gemlog_output_path = $opts['o'] ?? null;
|
$gemlog_output_path = $opts['o'] ?? null;
|
||||||
|
$gemlog_index_path = $opts['i'] ?? null;
|
||||||
$trim_prefix = $opts['t'] ?? null;
|
$trim_prefix = $opts['t'] ?? null;
|
||||||
|
|
||||||
if (is_null($gemlog_input_path) || !file_exists($gemlog_input_path)) {
|
if (is_null($gemlog_input_path) || !file_exists($gemlog_input_path)) {
|
||||||
@ -29,6 +31,8 @@ $article = new LogseqGem\ArticleParser;
|
|||||||
$gemlog->load($gemlog_input_path);
|
$gemlog->load($gemlog_input_path);
|
||||||
$titles = $gemlog->getTitles();
|
$titles = $gemlog->getTitles();
|
||||||
|
|
||||||
|
$gemlog_out = new GemlogRender;
|
||||||
|
|
||||||
foreach ($titles as $title) {
|
foreach ($titles as $title) {
|
||||||
$encoded_title = str_replace('/', '%2F', $title);
|
$encoded_title = str_replace('/', '%2F', $title);
|
||||||
$article_path = $dir . '/' . $encoded_title . '.md';
|
$article_path = $dir . '/' . $encoded_title . '.md';
|
||||||
@ -56,4 +60,12 @@ foreach ($titles as $title) {
|
|||||||
$output = $render->render(__DIR__ . '/templates/article.tpl');
|
$output = $render->render(__DIR__ . '/templates/article.tpl');
|
||||||
|
|
||||||
file_put_contents($output_path, $output);
|
file_put_contents($output_path, $output);
|
||||||
|
|
||||||
|
$gemlog_out->addArticle($title, $article->getProperties()['date'], 'log/' . $sanitized_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($gemlog_index_path) {
|
||||||
|
echo "Writing gemlog index to ", $gemlog_index_path, "...\n";
|
||||||
|
$gemlog_index = $gemlog_out->render();
|
||||||
|
file_put_contents($gemlog_index_path, $gemlog_index);
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,11 @@ class GemlogParser extends Parser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$text = $node->getLiteral();
|
$text = $node->getLiteral();
|
||||||
|
if (!preg_match('/\[\[(.+)\]\]/', $text, $matches)) {
|
||||||
if (substr($text, 0, 2) !== '[[' && substr($text, -2) !== ']]') {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$titles[] = substr($text, 2, -2);
|
$titles[] = $matches[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $titles;
|
return $titles;
|
||||||
|
36
src/GemlogRender.php
Normal file
36
src/GemlogRender.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace LogseqGem;
|
||||||
|
|
||||||
|
class GemlogRender {
|
||||||
|
public $articles = [];
|
||||||
|
|
||||||
|
public function addArticle(string $title, string $date, string $path) {
|
||||||
|
$this->articles[] = [$title, $date, $path];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
$gemlog = [];
|
||||||
|
|
||||||
|
usort($this->articles, fn ($a, $b) => $b[1] <=> $a[1]);
|
||||||
|
|
||||||
|
foreach ($this->articles as $article) {
|
||||||
|
$gemlog[] = sprintf('=> %s %s %s', $article[2], $article[1], $article[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$gemlog = implode("\n", $gemlog);
|
||||||
|
|
||||||
|
return <<<EOF
|
||||||
|
# Annika's Gemlog
|
||||||
|
|
||||||
|
$gemlog
|
||||||
|
|
||||||
|
=> atom.xml Atom feed
|
||||||
|
|
||||||
|
=> / home
|
||||||
|
EOF;
|
||||||
|
}
|
||||||
|
}
|
23
tests/GemlogRenderTest.php
Normal file
23
tests/GemlogRenderTest.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace LogseqGem\Tests;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
use LogseqGem\GemlogRender;
|
||||||
|
|
||||||
|
class GemlogRenderTest extends TestCase {
|
||||||
|
public function testRender() {
|
||||||
|
$render = new GemlogRender;
|
||||||
|
$render->addArticle('second', '2021-01-01', 'foo.gmi');
|
||||||
|
$render->addArticle('third', '2020-01-01', 'old.gmi');
|
||||||
|
$render->addArticle('first', '2022-01-01', 'new.gmi');
|
||||||
|
$this->assertStringContainsString(<<<EOF
|
||||||
|
=> new.gmi 2022-01-01 first
|
||||||
|
=> foo.gmi 2021-01-01 second
|
||||||
|
=> old.gmi 2020-01-01 third
|
||||||
|
EOF, $render->render());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user