mirror of
https://github.com/zdharma-continuum/history-search-multi-word
synced 2024-11-21 19:03:11 +00:00
*highlight: Working but not fully optimal *-string ((S) problem?)
This commit is contained in:
parent
2fff438589
commit
26a66c0bcc
1 changed files with 16 additions and 29 deletions
|
@ -691,38 +691,25 @@ typeset -gA HSMW_HIGHLIGHT_STYLES
|
|||
{
|
||||
setopt localoptions noksharrays
|
||||
local -a match mbegin mend
|
||||
local i j k style
|
||||
# Starting quote is at 1, so start parsing at offset 2 in the string.
|
||||
for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do
|
||||
(( j = i + start_pos - 1 ))
|
||||
(( k = j + 1 ))
|
||||
case "$arg[$i]" in
|
||||
'$' ) style=dollar-double-quoted-argument
|
||||
# Look for an alphanumeric parameter name.
|
||||
if [[ ${arg:$i} = (#b)(([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##)(\[[^[:space:]]#\])(#c0,1))* ]] ; then
|
||||
(( k += ${#match[1]} )) # highlight the parameter name
|
||||
(( i += ${#match[1]} )) # skip past it
|
||||
elif [[ ${arg:$i} = (#b)([{](\([a-zA-Z0@%#]##\))(#c0,1)([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##)(\[[^[:space:]]#\])(#c0,1)[}])* ]] ; then
|
||||
(( k += ${#match[1]} )) # highlight the parameter name and braces
|
||||
(( i += ${#match[1]} )) # skip past it
|
||||
else
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
"\\") style=back-double-quoted-argument
|
||||
if [[ \\\`\"\$ == *$arg[$i+1]* ]]; then
|
||||
(( k += 1 )) # Color following char too.
|
||||
(( i += 1 )) # Skip parsing the escaped char.
|
||||
else
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
*) continue ;;
|
||||
|
||||
esac
|
||||
local mybuf="$arg"
|
||||
integer idx=start_pos end_idx
|
||||
|
||||
while (( 1 )); do
|
||||
match=()
|
||||
mybuf="${(S)mybuf/(#b)(*)((((\$[[:alnum:]_]##)[^[:alnum:]]|\$[[:alnum:]_]##(#e))(\[[^[:space:]]#\])(#c0,1))|(\$\{(\([a-zA-Z0@%#]##\))(#c0,1)[[:alnum:]_]##(\[[^[:space:]]#\])(#c0,1)\})|[\\][\'\"\$])/}"
|
||||
|
||||
[[ -n "${match[5]}" ]] && match[2]="${match[5]}"
|
||||
[[ -z "${match[2]}" ]] && break
|
||||
|
||||
idx+="${#match[1]}"
|
||||
end_idx=idx+"${#match[2]}"
|
||||
|
||||
# ADD
|
||||
reply+=("$j $k ${HSMW_HIGHLIGHT_STYLES[$style]}")
|
||||
reply+=("$idx $end_idx ${HSMW_HIGHLIGHT_STYLES[dollar-double-quoted-argument]}")
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Highlight special chars inside dollar-quoted strings
|
||||
|
|
Loading…
Reference in a new issue