summaryrefslogtreecommitdiff
path: root/scripts/generate-readme-neovim-keymaps.php
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/generate-readme-neovim-keymaps.php')
-rw-r--r--scripts/generate-readme-neovim-keymaps.php44
1 files changed, 44 insertions, 0 deletions
diff --git a/scripts/generate-readme-neovim-keymaps.php b/scripts/generate-readme-neovim-keymaps.php
new file mode 100644
index 0000000..4dbe1e1
--- /dev/null
+++ b/scripts/generate-readme-neovim-keymaps.php
@@ -0,0 +1,44 @@
+<?php
+
+declare(strict_types=1);
+
+$source = __DIR__ . '/../nvim/.config/nvim/lua/config/keymaps.lua';
+$target = __DIR__ . '/../README.md';
+
+if (!file_exists($source)) {
+ echo "Source keymaps.lua not found.\n";
+ exit(1);
+}
+
+if (!file_exists($target)) {
+ echo "Target README.md not found.\n";
+ exit(1);
+}
+
+preg_match_all(
+ '/set\((".*?"|{.*?}), "(.*?)".*?desc = "(.*?)"/s',
+ file_get_contents($source),
+ $matches,
+ PREG_SET_ORDER,
+);
+
+$table[] = '| Key | Description | Mode |';
+$table[] = '| :--- | :--- | :--- |';
+$table = array_reduce(
+ $matches,
+ function (array $carry, array $match): array {
+ $key = str_replace(['<', '>'], ["\<", "\>"], $match[2]);
+ $description = $match[3];
+ $mode = str_replace(['{ ', ' }', '"'], '', $match[1]);
+
+ $carry[] = "| $key | $description | $mode |";
+
+ return $carry;
+ },
+ $table
+);
+
+$readme = file_get_contents($target);
+$pattern = '/(<!-- BEGIN-NEOVIM-KEYMAPS -->).*(<!-- END-NEOVIM-KEYMAPS -->)/s';
+$replacement = "$1\n" . implode("\n", $table) . "\n$2";
+file_put_contents($target, preg_replace($pattern, $replacement, $readme));