EmEditorみんなでまとめサイト

HTML整形

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

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);
名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー