改行で区切った文字列をリスト化する(CotEditor)
Published at 2005-08-01 (Mon) 19:53 in CotEditor, Macintosh, Perl
一次元のリストは手書きでもなんとかなるとしても、複数のリストをネストさせたりすると、だんだんめんどくさくなったりします。このスクリプトはタブによって表現された階層をもとに多次元構造のネストしたリスト要素を生成します。スクリプトを適用する元の文書はタブで階層化してください。スクリプトを適用するとタブ整形して出力します。出力整形に用いる文字は変数 $indent の値 \t を別の文字(例えば任意の数のスペースとか)に変更することでできます。


#!/usr/local/bin/perl
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%
use strict;
use warnings;
use encoding 'utf8';
my $indent = "\t"; # indent character
my $level = 0;
my $run = 0;
print "<ul>\n";
while (<>) {
chomp;
my $i = 0;
$i++ while ($_ =~ s/^\t//g);
if ($run) {
if ($i==$level) {
print "</li>\n";
} elsif ($i>$level) {
$level++;
print "\n", $indent x (2*$level), "<ul>\n";
} elsif ($i<$level) {
until ( $i == $level) {
print "</li>\n", $indent x (2*$level), "</ul>\n", $indent x (2*$level-1);
$level--;
}
print "</li>\n" ;
}
}
print $indent x (2*$level+1), "<li>";
print "$_";
$run++
}
while ($level) {
print "</li>\n";
print $indent x (2*$level),"</ul>\n";
$level--;
print $indent x (2*$level+1);
}
print "</li>\n";
print "</ul>\n";
