HTML整形
選択中のHTMLを整形するマクロです。
PerlScriptで動作します。
(jsee,vbeeなど、ほかの言語への移植歓迎します。)
2006.11.10 対応タグを大幅に増やしました。
#language="PerlScript" my $src = $Window->document->selection->Text; my ($indent) = $src =~ /^([ \t]+)</g; $indent =~ s/\t/ /g; $indent = ( length $indent ) / 2; $src =~ s/\x0D\x0A/\n/g; $src =~ tr/\x0D\x0A/\n\n/; my (@rep); map { $src =~ s/($_)/{push @rep, $1;"replaceEmMacro[$#rep]"}/eigs; } ( q{<SCRIPT.*?<\/SCRIPT>}, q{<PRE.*?<\/PRE>}, q{<STYLE.*?<\/STYLE>}, q{<EMBED.*?<\/EMBED>}, q{<TEXTAREA.*?<\/TEXTAREA>}, q{<\!\-\-.*?\-\->}, ); map { $src =~ s/[ \t]*(<$_.*?>)\s*/$1\n/gsi } ( '\!DOCTYPE', 'HTML', 'HEAD', 'META', 'LINK', 'BODY', 'TABLE', 'TBODY', 'COL', 'TR', 'FORM', 'SELECT', 'BR', 'HR', 'CENTER', 'FRAMESET', 'FRAME', 'MAP', 'NOSCRIPT' ); map { $src =~ s/[ \t]*(<$_.*?>)\s*/$1/gsi } ( 'TH', 'TD' ); map { $src =~ s/[ \t]*(<\/$_>)\s*/$1\n/gsi } ( 'HTML', 'HEAD', 'TITLE', 'BODY', 'TABLE', 'TBODY', 'TR', 'TH', 'TD', 'FORM', 'SELECT', 'OPTION', 'P', 'h\d', 'CENTER', 'DIV', 'FRAMESET', 'FRAME', 'MAP', 'UL', 'LI', 'NOSCRIPT' ); map { $src =~ s/[ \t]*(<$_.*?>)/\n$1/gsi } ( 'TABLE', 'P', 'h\d', 'DIV', 'INPUT', 'FRAMESET', 'MAP', 'UL', 'LI' ); $src =~ s/^[ \t]+//gm; $src =~ tr/\n//s; my $output; for my $line ( split( /\n/, $src ) ) { if ( $line =~ /<(TABLE|TBODY|TR|FRAMESET|MAP|UL)/i ) { # > $output .= " " x $indent; $indent++; } elsif ( $line =~ /<\/(TABLE|TBODY|TR|FRAMESET|MAP|UL)/i ) { # > $indent--; $output .= " " x $indent; } else { $output .= " " x $indent; } $output .= "$line\n"; } for my $i ( 0 .. $#rep ) { my $j = $#rep - $i; $output =~ s/replaceEmMacro\[$j\]/$rep[$j]/e; } $Window->document->Write($output);