mirror of
				https://github.com/pragma-/pbot.git
				synced 2025-11-04 00:27:23 +01:00 
			
		
		
		
	Interpreter: escaped spaces behave better
This commit is contained in:
		
							parent
							
								
									c6e1da1706
								
							
						
					
					
						commit
						80f9ea1acd
					
				
							
								
								
									
										
											BIN
										
									
								
								data/factoids.sqlite3
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								data/factoids.sqlite3
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							@ -74,11 +74,13 @@ sub launch_applet($self, $context) {
 | 
			
		||||
    my ($exitval, $stdout, $stderr) = eval {
 | 
			
		||||
        my $args = $context->{arguments};
 | 
			
		||||
 | 
			
		||||
        my $strip_quotes = 1;
 | 
			
		||||
        my $strip_quotes     = 1;
 | 
			
		||||
        my $preserve_escapes = 0;
 | 
			
		||||
 | 
			
		||||
        $strip_quotes = 0 if $self->{pbot}->{factoids}->{data}->{storage}->get_data($channel, $trigger, 'keep-quotes');
 | 
			
		||||
        $strip_quotes     = 0 if $self->{pbot}->{factoids}->{data}->{storage}->get_data($channel, $trigger, 'keep-quotes');
 | 
			
		||||
        $preserve_escapes = 1 if $self->{pbot}->{factoids}->{data}->{storage}->get_data($channel, $trigger, 'keep-escapes');
 | 
			
		||||
 | 
			
		||||
        my @cmdline = ("./$applet", $self->{pbot}->{interpreter}->split_line($args, strip_quotes => $strip_quotes));
 | 
			
		||||
        my @cmdline = ("./$applet", $self->{pbot}->{interpreter}->split_line($args, strip_quotes => $strip_quotes, preserve_escapes => $preserve_escapes));
 | 
			
		||||
 | 
			
		||||
        my $timeout = $self->{pbot}->{registry}->get_value('general', 'applet_timeout') // 30;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ our %factoid_metadata = (
 | 
			
		||||
    'help'                  => 'TEXT',
 | 
			
		||||
    'interpolate'           => 'INTEGER',
 | 
			
		||||
    'keep-quotes'           => 'INTEGER',
 | 
			
		||||
    'keep-escapes'          => 'INTEGER',
 | 
			
		||||
    'keyword_override'      => 'TEXT',
 | 
			
		||||
    'last_referenced_in'    => 'TEXT',
 | 
			
		||||
    'last_referenced_on'    => 'NUMERIC',
 | 
			
		||||
 | 
			
		||||
@ -292,7 +292,7 @@ sub interpret($self, $context) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # convert command string to list of arguments
 | 
			
		||||
    my $cmdlist = $self->make_args($context->{command});
 | 
			
		||||
    my $cmdlist = $self->make_args($context->{command}, preserve_escapes => 1);
 | 
			
		||||
 | 
			
		||||
    $context->{cmdlist} = $cmdlist;
 | 
			
		||||
 | 
			
		||||
@ -1176,7 +1176,7 @@ sub split_line($self, $line, %opts) {
 | 
			
		||||
    my %default_opts = (
 | 
			
		||||
        strip_quotes     => 0,
 | 
			
		||||
        keep_spaces      => 0,
 | 
			
		||||
        preserve_escapes => 1,
 | 
			
		||||
        preserve_escapes => 0,
 | 
			
		||||
        strip_commas     => 0,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@ -1224,8 +1224,11 @@ sub split_line($self, $line, %opts) {
 | 
			
		||||
        $spaces = 0 if $ch ne ' ';
 | 
			
		||||
 | 
			
		||||
        if ($escaped) {
 | 
			
		||||
            if   ($opts{preserve_escapes}) { $token .= "\\$ch"; }
 | 
			
		||||
            else                           { $token .= $ch; }
 | 
			
		||||
            if ($opts{preserve_escapes}) {
 | 
			
		||||
                $token .= "\\$ch";
 | 
			
		||||
            } else {
 | 
			
		||||
                $token .= $ch;
 | 
			
		||||
            }
 | 
			
		||||
            $escaped = 0;
 | 
			
		||||
            next;
 | 
			
		||||
        }
 | 
			
		||||
@ -1284,8 +1287,15 @@ sub split_line($self, $line, %opts) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# creates an array of arguments from a string
 | 
			
		||||
sub make_args($self, $string) {
 | 
			
		||||
    my @args = $self->split_line($string, keep_spaces => 1);
 | 
			
		||||
sub make_args($self, $string, %opts) {
 | 
			
		||||
    my %default_opts = (
 | 
			
		||||
        keep_spaces      => 1,
 | 
			
		||||
        preserve_escapes => 0,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    %opts = (%default_opts, %opts);
 | 
			
		||||
 | 
			
		||||
    my @args = $self->split_line($string, keep_spaces => $opts{keep_spaces}, preserve_escapes => $opts{preserve_escapes});
 | 
			
		||||
 | 
			
		||||
    my @arglist;
 | 
			
		||||
    my @arglist_unstripped;
 | 
			
		||||
 | 
			
		||||
@ -25,8 +25,8 @@ use PBot::Imports;
 | 
			
		||||
# These are set by the /misc/update_version script
 | 
			
		||||
use constant {
 | 
			
		||||
    BUILD_NAME     => "PBot",
 | 
			
		||||
    BUILD_REVISION => 4754,
 | 
			
		||||
    BUILD_DATE     => "2024-05-16",
 | 
			
		||||
    BUILD_REVISION => 4755,
 | 
			
		||||
    BUILD_DATE     => "2024-05-26",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
sub initialize {}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user