"""
スライドファイル内のスライド番号を振り直すスクリプト。
このスクリプトは、Markdown形式などのテキストファイル内で
「# Slide N ...」という形式で記述されたスライドの番号「N」を
先頭から順に連番に更新します。
使用例:
python renumber_slides.py your_slide_file.md
関連リンク:
:doc:`renumber_slides_usage`
"""
#!/usr/bin/env python3
import sys
import re
pattern = re.compile(r"^#\s*Slide\s+(\d+)(.*)$")
[ドキュメント]
def main():
"""
指定されたスライドファイルの番号を振り直すメイン処理を実行します。
コマンドライン引数からファイルパスを受け取り、そのファイルを読み込みます。
ファイル内の「# Slide N ...」という形式の行を検出し、
「N」の部分を1から始まる連番に振り直し、ファイルを上書き保存します。
ファイルパスが指定されない場合は、使用方法を表示してプログラムを終了します。
:returns: プログラムは処理完了後、正常終了します。引数不足の場合はエラーメッセージを表示し、終了コード1で終了します。
:raises SystemExit: コマンドライン引数が不足している場合、エラーメッセージを表示して終了コード1でプログラムを終了します。
"""
if len(sys.argv) < 2:
print("Usage: renumber_slides.py <filename>")
sys.exit(1)
path = sys.argv[1]
print()
print(f"Open {path}")
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
slide_no = 1
new_lines = []
for line in lines:
m = pattern.match(line)
if m:
# 先頭の # Slide N ... を連番に振り直す
rest = m.group(2)
new_line = f"# Slide {slide_no}{rest}\n"
print(f"{line.strip()} => {new_line.strip()}")
slide_no += 1
new_lines.append(new_line)
else:
new_lines.append(line)
with open(path, "w", encoding="utf-8") as f:
f.writelines(new_lines)
print(f"{path} has been updated")
if __name__ == "__main__":
main()