save_rc
=> {
required
=> 1},
load_rc
=> {
required
=> 1},
);
sub
args {
{
tidy_load
=> {
handler
=> \
&load
,
description
=>
"Read perl content from stdin, tidy it, return to stdout"
,
help
=>
"Usage: INPUT | $0 load > OUTPUT"
,
},
tidy_save
=> {
handler
=> \
&save
,
description
=>
"Read perl content from stdin, tidy it, return to stdout"
,
help
=>
"Usage: INPUT | $0 save > OUTPUT"
,
},
};
}
sub
vimrc {
my
$self
=
shift
;
my
(
$helper
,
$opts
) =
@_
;
my
$cmd
=
$helper
->command(
$opts
);
return
<<" EOT";
function! LoadTidyFilter()
let cur_line = line(".")
:silent :%!$cmd tidy_load
exe ":" . cur_line
endfunction
function! SaveTidyFilter()
let cur_line = line(".")
:silent :%!$cmd tidy_save
exe ":" . cur_line
endfunction
augroup type
auto BufReadPost *.psgi :call LoadTidyFilter()
auto BufWritePre *.psgi :call SaveTidyFilter()
auto BufWritePost *.psgi :call LoadTidyFilter()
auto BufReadPost *.pl :call LoadTidyFilter()
auto BufWritePre *.pl :call SaveTidyFilter()
auto BufWritePost *.pl :call LoadTidyFilter()
auto BufReadPost *.pm :call LoadTidyFilter()
auto BufWritePre *.pm :call SaveTidyFilter()
auto BufWritePost *.pm :call LoadTidyFilter()
auto BufReadPost *.t :call LoadTidyFilter()
auto BufWritePre *.t :call SaveTidyFilter()
auto BufWritePost *.t :call LoadTidyFilter()
augroup END
EOT
}
sub
load {
my
$helper
=
shift
;
my
$self
=
$helper
->plugin(
'TidyFilter'
);
my
(
$name
,
$opts
) =
@_
;
$self
->_tidy(
$self
->load_rc );
}
sub
save {
my
$helper
=
shift
;
my
$self
=
$helper
->plugin(
'TidyFilter'
);
my
(
$name
,
$opts
) =
@_
;
$self
->_tidy(
$self
->save_rc );
}
sub
_tidy {
my
$self
=
shift
;
my
(
$rc
) =
@_
;
my
(
$fhi
,
$tmpin
) = tempfile(
UNLINK
=> 1 );
my
(
$fho
,
$tmpout
) = tempfile(
UNLINK
=> 1 );
close
(
$fho
);
my
$content
=
join
""
=> <STDIN>;
print
$fhi
$content
;
close
(
$fhi
);
unlink
"perltidy.ERR"
;
my
$cmd
=
"cat '$tmpin' | perltidy -pro=\"$rc\" 1>'$tmpout' 2>/dev/null"
;
system
(
$cmd
) &&
return
$self
->abort(
$content
);
return
$self
->abort(
$content
)
if
-e
"perltidy.ERR"
;
open
(
$fho
,
"<"
,
$tmpout
) &&
$self
->abort(
$content
);
$content
=
join
""
=> <
$fho
>;
close
(
$fho
);
return
{
code
=> 0,
stdout
=>
$content
};
}
sub
abort {
my
$self
=
shift
;
my
(
$content
) =
@_
;
return
{
code
=> 1,
stdout
=>
$content
,
};
}
1;