Fix shit done on omz_urlencode rework by someone

Bad usage of zparseopts
This commit is contained in:
Gaetan Semet 2015-10-17 18:03:44 +02:00
commit 279d67d702

View file

@ -67,7 +67,7 @@ function try_alias_value() {
# #
# Arguments: # Arguments:
# 1. name - The variable to set # 1. name - The variable to set
# 2. val - The default value # 2. val - The default value
# Return value: # Return value:
# 0 if the variable exists, 3 if it was set # 0 if the variable exists, 3 if it was set
# #
@ -81,12 +81,12 @@ function default() {
# #
# Arguments: # Arguments:
# 1. name - The env variable to set # 1. name - The env variable to set
# 2. val - The default value # 2. val - The default value
# Return value: # Return value:
# 0 if the env variable exists, 3 if it was set # 0 if the env variable exists, 3 if it was set
# #
function env_default() { function env_default() {
env | grep -q "^$1=" && return 0 env | grep -q "^$1=" && return 0
export "$1=$2" && return 3 export "$1=$2" && return 3
} }
@ -101,7 +101,7 @@ zmodload zsh/langinfo
# #
# By default, reserved characters and unreserved "mark" characters are # By default, reserved characters and unreserved "mark" characters are
# not escaped by this function. This allows the common usage of passing # not escaped by this function. This allows the common usage of passing
# an entire URL in, and encoding just special characters in it, with # an entire URL in, and encoding just special characters in it, with
# the expectation that reserved and mark characters are used appropriately. # the expectation that reserved and mark characters are used appropriately.
# The -r and -m options turn on escaping of the reserved and mark characters, # The -r and -m options turn on escaping of the reserved and mark characters,
# respectively, which allows arbitrary strings to be fully escaped for # respectively, which allows arbitrary strings to be fully escaped for
@ -112,7 +112,7 @@ zmodload zsh/langinfo
# #
# Usage: # Usage:
# omz_urlencode [-r] [-m] <string> # omz_urlencode [-r] [-m] <string>
# #
# -r causes reserved characters (;/?:@&=+$,) to be escaped # -r causes reserved characters (;/?:@&=+$,) to be escaped
# #
# -m causes "mark" characters (_.!~*''()-) to be escaped # -m causes "mark" characters (_.!~*''()-) to be escaped
@ -120,12 +120,15 @@ zmodload zsh/langinfo
# -P causes spaces to be encoded as '%20' instead of '+' # -P causes spaces to be encoded as '%20' instead of '+'
function omz_urlencode() { function omz_urlencode() {
emulate -L zsh emulate -L zsh
zparseopts -D -E -a opts r m P local -a opt_path opt_reserved opt_mark
zparseopts -D -E r=opt_reserved m=opt_mark P=opt_path
local in_str=$1 local in_str=$1
local url_str="" local url_str=""
local spaces_as_plus local spaces_as_plus=1
if [[ -z $opts[(r)-P] ]]; then spaces_as_plus=1; fi if [[ ! -z $opt_path ]]; then
spaces_as_plus=
fi
local str="$in_str" local str="$in_str"
# URLs must use UTF-8 encoding; convert str to UTF-8 if required # URLs must use UTF-8 encoding; convert str to UTF-8 if required
@ -146,11 +149,11 @@ function omz_urlencode() {
local reserved=';/?:@&=+$,' local reserved=';/?:@&=+$,'
local mark='_.!~*''()-' local mark='_.!~*''()-'
local dont_escape="[A-Za-z0-9" local dont_escape="[A-Za-z0-9"
if [[ -z $opts[(r)-r] ]]; then if [[ ! -z $opt_reserved ]]; then
dont_escape+=$reserved dont_escape+=$reserved
fi fi
# $mark must be last because of the "-" # $mark must be last because of the "-"
if [[ -z $opts[(r)-m] ]]; then if [[ ! -z $opt_mark ]]; then
dont_escape+=$mark dont_escape+=$mark
fi fi
dont_escape+="]" dont_escape+="]"
@ -177,8 +180,8 @@ function omz_urlencode() {
# URL-decode a string # URL-decode a string
# #
# Decodes a RFC 2396 URL-encoded (%-escaped) string. # Decodes a RFC 2396 URL-encoded (%-escaped) string.
# This decodes the '+' and '%' escapes in the input string, and leaves # This decodes the '+' and '%' escapes in the input string, and leaves
# other characters unchanged. Does not enforce that the input is a # other characters unchanged. Does not enforce that the input is a
# valid URL-encoded string. This is a convenience to allow callers to # valid URL-encoded string. This is a convenience to allow callers to
# pass in a full URL or similar strings and decode them for human # pass in a full URL or similar strings and decode them for human
# presentation. # presentation.
@ -196,7 +199,7 @@ function omz_urldecode {
local caller_encoding=$langinfo[CODESET] local caller_encoding=$langinfo[CODESET]
local LC_ALL=C local LC_ALL=C
export LC_ALL export LC_ALL
# Change + back to ' ' # Change + back to ' '
local tmp=${encoded_url:gs/+/ /} local tmp=${encoded_url:gs/+/ /}
# Protect other escapes to pass through the printf unchanged # Protect other escapes to pass through the printf unchanged