mirror of https://github.com/odrling/Aegisub
62 lines
2.2 KiB
Perl
62 lines
2.2 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
use warnings;
|
||
|
use strict;
|
||
|
use Aegisub; # don't forget this
|
||
|
|
||
|
$script_name = "Add/remove edgeblur macro (Perl version)";
|
||
|
$script_description = "A demo macro showing how to do simple macros in Auto4-Perl";
|
||
|
$script_author = "Karl Blomster";
|
||
|
$script_version = "1";
|
||
|
|
||
|
|
||
|
# this is a line-by-line translation of the Lua macro of the same name.
|
||
|
sub add_edgeblur {
|
||
|
# get the arguments; they are all references (important later)
|
||
|
my ($subtitles, $selected_lines, $active_line) = @_;
|
||
|
|
||
|
# loop over the selected lines (note the dereferencing)
|
||
|
foreach my $lineno ( @{$selected_lines} ) {
|
||
|
# $line now contains a reference to the line we're working on.
|
||
|
# Note that the "line" is actually a hash with the dialogue line fields as keys.
|
||
|
my $line = $subtitles->[$lineno];
|
||
|
# Tack on {\be1} to the start of the "text" field...
|
||
|
$line->{"text"} = '{\\be1}' . $line->{"text"};
|
||
|
# And write our $line back to the file.
|
||
|
$subtitles->[$lineno] = $line;
|
||
|
}
|
||
|
|
||
|
# This ain't implemented yet :(
|
||
|
# Aegisub::Script::set_undo_point("Add edgeblur");
|
||
|
}
|
||
|
|
||
|
|
||
|
# This routine is NOT a Lua translation and may therefore seem more perlish. :>
|
||
|
sub remove_edgeblur {
|
||
|
# same as above
|
||
|
my ($subtitles, $selected_lines, $active_line) = @_;
|
||
|
|
||
|
foreach my $lineno ( @{$selected_lines} ) {
|
||
|
# Since we're only going to change the text field of the line,
|
||
|
# why bother copying the entire line? We copy only the text field instead.
|
||
|
# We could also do stuff directly on $subtitles->[$lineno]->{"text"} but
|
||
|
# that's too long to write and is also risky if you blow something up.
|
||
|
my $text = $subtitles->[$lineno]->{"text"};
|
||
|
|
||
|
# remove any \be1 tags contained in the first {} block
|
||
|
$text =~ s!^\{(.*?)\\be1(.*?)\}!\{${1}${2}\}!;
|
||
|
# if that leaves nothing in it, remove it
|
||
|
$text =~ s!^\{\}!!;
|
||
|
|
||
|
# write back
|
||
|
$subtitles->[$lineno]->{"text"} = $text;
|
||
|
}
|
||
|
|
||
|
# Still not implemented :/
|
||
|
# Aegisub::Script::set_undo_point("Remove edgeblur");
|
||
|
}
|
||
|
|
||
|
|
||
|
# Register macros with Aegisub
|
||
|
Aegisub::Script::register_macro("Add edgeblur (Perl)", "Adds \\be1 tags to all selected lines", \&add_edgeblur);
|
||
|
Aegisub::Script::register_macro("Remove edgeblur (Perl)", "Removes \\be1 tags from the start of all selected lines", \&remove_edgeblur);
|