kiyo_hikoのブログ

メモ+日記?

Markdownに目次を作る(Perlで)

最近は高級なエディターソフトが使えない環境でMarkdownを書いていて、Markdowの目次をツールで生成することができない。

Perlなら使えるのでMarkdown本文を渡して実行すると目次を作成するPerlを5分以内で書いた。
(近年稀に見る雑さ)

# 使い方:__DATA__以降にMarkdown本文貼り付けてperlスクリプト実行→ToCをターミナルに吐く
use strict;
use warnings;

sub md2toc {
  my @cont = <::DATA>;

  my $inQuote = 0; # 引用文取り除くために今引用内の行なのか判別する

  for my $line (@cont) {
    # 引用検出
    if ($line =~ m/^[`]/) {
      $inQuote = ! $inQuote;
      next;
    }
    $inQuote and next; # 引用文に興味ない
    ($line =~ m/^[#]/) or next; # アンカー以外興味ない
    $line =~ s/#\s/- /;
    $line =~ s/#/  /g;
    $line =~ s/\s{2}-\s/- [/;
    chomp $line;
    $line .= "]\n";
    print $line;
  }
}

::md2toc;

__DATA__
ここにMarkdownはる