diff options
Diffstat (limited to 'scripts/generate-readme-neovim-keymaps.php')
| -rw-r--r-- | scripts/generate-readme-neovim-keymaps.php | 44 |
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)); |
