Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/curl/scripts/completion.pl @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 #!/usr/bin/env perl | |
| 2 | |
| 3 use strict; | |
| 4 use warnings; | |
| 5 use Getopt::Long(); | |
| 6 use Pod::Usage(); | |
| 7 | |
| 8 my $curl = 'curl'; | |
| 9 my $shell = 'zsh'; | |
| 10 my $help = 0; | |
| 11 Getopt::Long::GetOptions( | |
| 12 'curl=s' => \$curl, | |
| 13 'shell=s' => \$shell, | |
| 14 'help' => \$help, | |
| 15 ) or Pod::Usage::pod2usage(); | |
| 16 Pod::Usage::pod2usage() if $help; | |
| 17 | |
| 18 my $regex = '\s+(?:(-[^\s]+),\s)?(--[^\s]+)\s*(\<.+?\>)?\s+(.*)'; | |
| 19 my @opts = parse_main_opts('--help', $regex); | |
| 20 | |
| 21 if ($shell eq 'fish') { | |
| 22 print "# curl fish completion\n\n"; | |
| 23 print qq{$_ \n} foreach (@opts); | |
| 24 } elsif ($shell eq 'zsh') { | |
| 25 my $opts_str; | |
| 26 | |
| 27 $opts_str .= qq{ $_ \\\n} foreach (@opts); | |
| 28 chomp $opts_str; | |
| 29 | |
| 30 my $tmpl = <<"EOS"; | |
| 31 #compdef curl | |
| 32 | |
| 33 # curl zsh completion | |
| 34 | |
| 35 local curcontext="\$curcontext" state state_descr line | |
| 36 typeset -A opt_args | |
| 37 | |
| 38 local rc=1 | |
| 39 | |
| 40 _arguments -C -S \\ | |
| 41 $opts_str | |
| 42 '*:URL:_urls' && rc=0 | |
| 43 | |
| 44 return rc | |
| 45 EOS | |
| 46 | |
| 47 print $tmpl; | |
| 48 } else { | |
| 49 die("Unsupported shell: $shell"); | |
| 50 } | |
| 51 | |
| 52 sub parse_main_opts { | |
| 53 my ($cmd, $regex) = @_; | |
| 54 | |
| 55 my @list; | |
| 56 my @lines = call_curl($cmd); | |
| 57 | |
| 58 foreach my $line (@lines) { | |
| 59 my ($short, $long, $arg, $desc) = ($line =~ /^$regex/) or next; | |
| 60 | |
| 61 my $option = ''; | |
| 62 | |
| 63 $arg =~ s/\:/\\\:/g if defined $arg; | |
| 64 | |
| 65 $desc =~ s/'/'\\''/g if defined $desc; | |
| 66 $desc =~ s/\[/\\\[/g if defined $desc; | |
| 67 $desc =~ s/\]/\\\]/g if defined $desc; | |
| 68 $desc =~ s/\:/\\\:/g if defined $desc; | |
| 69 | |
| 70 if ($shell eq 'fish') { | |
| 71 $option .= "complete --command curl"; | |
| 72 $option .= " --short-option '" . strip_dash(trim($short)) . "'" | |
| 73 if defined $short; | |
| 74 $option .= " --long-option '" . strip_dash(trim($long)) . "'" | |
| 75 if defined $long; | |
| 76 $option .= " --description '" . strip_dash(trim($desc)) . "'" | |
| 77 if defined $desc; | |
| 78 } elsif ($shell eq 'zsh') { | |
| 79 $option .= '{' . trim($short) . ',' if defined $short; | |
| 80 $option .= trim($long) if defined $long; | |
| 81 $option .= '}' if defined $short; | |
| 82 $option .= '\'[' . trim($desc) . ']\'' if defined $desc; | |
| 83 | |
| 84 $option .= ":'$arg'" if defined $arg; | |
| 85 | |
| 86 $option .= ':_files' | |
| 87 if defined $arg and ($arg eq '<file>' || $arg eq '<filename>' | |
| 88 || $arg eq '<dir>'); | |
| 89 } | |
| 90 | |
| 91 push @list, $option; | |
| 92 } | |
| 93 | |
| 94 # Sort longest first, because zsh won't complete an option listed | |
| 95 # after one that's a prefix of it. | |
| 96 @list = sort { | |
| 97 $a =~ /([^=]*)/; my $ma = $1; | |
| 98 $b =~ /([^=]*)/; my $mb = $1; | |
| 99 | |
| 100 length($mb) <=> length($ma) | |
| 101 } @list if $shell eq 'zsh'; | |
| 102 | |
| 103 return @list; | |
| 104 } | |
| 105 | |
| 106 sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s }; | |
| 107 sub strip_dash { my $s = shift; $s =~ s/^-+//g; return $s }; | |
| 108 | |
| 109 sub call_curl { | |
| 110 my ($cmd) = @_; | |
| 111 my $output = `"$curl" $cmd`; | |
| 112 if ($? == -1) { | |
| 113 die "Could not run curl: $!"; | |
| 114 } elsif ((my $exit_code = $? >> 8) != 0) { | |
| 115 die "curl returned $exit_code with output:\n$output"; | |
| 116 } | |
| 117 return split /\n/, $output; | |
| 118 } | |
| 119 | |
| 120 __END__ | |
| 121 | |
| 122 =head1 NAME | |
| 123 | |
| 124 completion.pl - Generates tab-completion files for various shells | |
| 125 | |
| 126 =head1 SYNOPSIS | |
| 127 | |
| 128 completion.pl [options...] | |
| 129 | |
| 130 --curl path to curl executable | |
| 131 --shell zsh/fish | |
| 132 --help prints this help | |
| 133 | |
| 134 =cut |
