X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=torn.zsh;h=d9900de9acb1aac5af1764ca02df1f87ab837fdd;hb=HEAD;hp=fe45db94259bec0f5a692cd76c68956a5a384553;hpb=9178edf64c25820294e420468dbd9a4138b31428;p=torn.git diff --git a/torn.zsh b/torn.zsh index fe45db9..69ec947 100755 --- a/torn.zsh +++ b/torn.zsh @@ -1,15 +1,16 @@ # torn - Musical files renaming with russian language transliteration -# Copyright (C) 2021-2023 Sergey Matveev (stargrave@stargrave.org) +# Copyright (C) 2021-2024 Sergey Matveev (stargrave@stargrave.org) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. -# Initially this script was written on Perl, but now it is zsh function, -# that is intended to be used with zmv command. It is much more flexible -# to be used with zsh'es glob expansion. +# Initially this script was written on Perl, but now it is Z shell +# function, that is intended to be used with zmv command. It is much +# more flexible to be used with zsh'es glob expansion. # # * transliterates everything +# * replaces non FAT-compatible characters with underscores # * replaces spaces with underscores # * lowercases file's extension # * replaces "_-_" with single dash @@ -21,13 +22,15 @@ # You can run like that: # $ fpath=(... $fpath) # $ autoload torn -# $ zmv "*" '`torn $f`" +# $ zmv "*" '`torn $f`' # # Transliteration function is separate tornt(), so you can use only # its abilities: # $ torn # assume that it is not autoloaded # $ zmv "*" '`tornt $f`' # +# torna() replaces non FAT-compatible characters with underscores. +# # Recursively dive into subdirectories: # $ zmv -Q "(**/)*(.)" '`torn $f`' @@ -49,6 +52,8 @@ tornm() { local n=$1 n=${n:gs/ /_} n=${n//_[–-]_/-} + n=${n//_[–-]/-} + n=${n//[–-]_/-} n=${n:gs/,_/,} n=${n//[\[\]]/} n=${n:gs/_(/(} @@ -62,7 +67,20 @@ tornm() { print -- $n } +torna() { + local n=$1 + setopt REMATCH_PCRE + for i ({1..${#n}}) { + [[ ${n[$i]} =~ "[[:ascii:]]" ]] || n[$i]=_ + [[ ${n[$i]} =~ "[[:print:]]" ]] || n[$i]=_ + [[ ${n[$i]} =~ "[^,+/:;<=>?[]|]" ]] || n[$i]=_ + } + print -- $n +} + +[[ -n $1 ]] || return local n=${1:t} n=`tornm $n` n=`tornt $n` +n=`torna $n` print -- ${1:h}/$n