*-highlight,*string-*: Brackets in [[..]], ((..)), etc. handled normally

Issue #43
This commit is contained in:
Sebastian Gniazdowski 2018-07-31 12:58:28 +02:00
parent 776b12d8ab
commit 2ee3073711
3 changed files with 60 additions and 11 deletions

View file

@ -267,6 +267,7 @@ typeset -ga ZLAST_COMMANDS
(( FAST_HIGHLIGHT[path_dirs_was_set] )) && setopt PATH_DIRS
(( FAST_HIGHLIGHT[ointeractive_comments] )) && local interactive_comments= # _set_ to empty
_FAST_COMPLEX_BRACKETS=()
# Variable declarations and initializations
# in_array_assignment true between 'a=(' and the matching ')'
@ -526,6 +527,9 @@ typeset -ga ZLAST_COMMANDS
(( next_word = next_word | 16 ))
elif [[ $__arg == "[[" ]]; then
braces_stack='A'"$braces_stack"
# Counting complex brackets (for brackets-highlighter): 1. [[ as command
_FAST_COMPLEX_BRACKETS+=( $(( _start_pos-${#PREBUFFER} )) $(( _start_pos-${#PREBUFFER} + 1 )) )
elif [[ $__arg == "for" ]]; then
(( next_word = next_word | 32 )) # BIT_for
elif [[ $__arg == "case" ]]; then
@ -574,7 +578,13 @@ typeset -ga ZLAST_COMMANDS
# Handle array assignment
[[ "$__arg" = (#b)*=(\()[^\)]#(\))(#c0,1)* ]] && {
(( __start=_start_pos-${#PREBUFFER}+${mbegin[1]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}")
(( mbegin[2] >= 1 )) && (( __start=_start_pos-${#PREBUFFER}+${mbegin[2]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") || in_array_assignment=1
# Counting complex brackets (for brackets-highlighter): 2. ( in array assign
_FAST_COMPLEX_BRACKETS+=( $__start )
(( mbegin[2] >= 1 )) && {
(( __start=_start_pos-${#PREBUFFER}+${mbegin[2]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}")
# Counting complex brackets (for brackets-highlighter): 3a. ) in array assign
_FAST_COMPLEX_BRACKETS+=( $__start )
} || in_array_assignment=1
} || { [[ "${braces_stack[1]}" != 'T' ]] && (( next_word = (next_word | 1) & ~2 )); }
# Handle no-string highlight, string "/' highlight, math mode highlight
@ -594,8 +604,14 @@ typeset -ga ZLAST_COMMANDS
{
itmp="${__arg[(i)=]}"; __arg="${__arg[itmp,__asize]}"; (( _start_pos += itmp - 1 ));
[[ "${__arg[2,4]}" = '$((' ]] && { -fast-highlight-math-string;
(( __start=_start_pos-${#PREBUFFER}, __end=_end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$(( __start + 2 )) $(( __start + 4 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
(( jtmp = ${__arg[(I)\)\)]}-1, jtmp > 0 )) && (( __start=_start_pos-${#PREBUFFER}+jtmp, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
(( __start=_start_pos-${#PREBUFFER}+2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
# Counting complex brackets (for brackets-highlighter): 4. $(( in assign argument
_FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) )
(( jtmp = ${__arg[(I)\)\)]}-1, jtmp > 0 )) && {
(( __start=_start_pos-${#PREBUFFER}+jtmp, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
# Counting complex brackets (for brackets-highlighter): 5. )) in assign argument
_FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) )
}
} || -fast-highlight-string;
(( _start_pos = _start_pos - itmp + 1, 1 > 0 ))
}
@ -619,11 +635,21 @@ typeset -ga ZLAST_COMMANDS
# is how [[ ... ]] is highlighted, too.
# ADD
(( __start=_start_pos-${#PREBUFFER}, __end=_end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $(( __start + 2 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
(( __start=_start_pos-${#PREBUFFER}, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
already_added=1
# Counting complex brackets (for brackets-highlighter): 6. (( as command
_FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) )
-fast-highlight-math-string
# ADD
[[ $__arg[-2,-1] == '))' ]] && (( __start=_start_pos-${#PREBUFFER}, __end=_end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$(( __end - 2 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
[[ $__arg[-2,-1] == '))' ]] && {
(( __start=_end_pos-${#PREBUFFER}-2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
# Counting complex brackets (for brackets-highlighter): 7. )) for as-command ((
_FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) )
}
elif [[ $__arg == '()' ]]; then
# anonymous function
__style=${FAST_THEME_NAME}reserved-word
@ -653,7 +679,17 @@ typeset -ga ZLAST_COMMANDS
then # $__arg is a non-command word
case $__arg in
']]')
__style=${FAST_THEME_NAME}builtin
[[ "$braces_stack" = A* ]] && {
__style=${FAST_THEME_NAME}builtin
# Counting complex brackets (for brackets-highlighter): 8a. ]] for as-command [[
_FAST_COMPLEX_BRACKETS+=( $(( _start_pos-${#PREBUFFER} )) $(( _start_pos-${#PREBUFFER}+1 )) )
} || {
[[ "$braces_stack" = *A* ]] && {
__style=${FAST_THEME_NAME}unknown-token
# Counting complex brackets (for brackets-highlighter): 8b. ]] for as-command [[
_FAST_COMPLEX_BRACKETS+=( $(( _start_pos-${#PREBUFFER} )) $(( _start_pos-${#PREBUFFER}+1 )) )
} || __style=${FAST_THEME_NAME}default
}
braces_stack="${braces_stack#A}"
;;
']')
@ -670,6 +706,8 @@ typeset -ga ZLAST_COMMANDS
(( next_word = next_word | 1 ))
(( __start=_start_pos-${#PREBUFFER}, __end=_end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}")
already_added=1
# Counting complex brackets (for brackets-highlighter): 3b. ) in array assign
_FAST_COMPLEX_BRACKETS+=( $__start )
elif [[ $braces_stack[1] == "R" ]]; then
braces_stack[1]=""
__style=${FAST_THEME_NAME}reserved-word
@ -738,16 +776,24 @@ typeset -ga ZLAST_COMMANDS
already_added=1
-fast-highlight-math-string
# ADD
(( __start=_start_pos-${#PREBUFFER}, __end=_end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$(( __start + 1 )) $(( __start + 3 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
(( __start=_start_pos-${#PREBUFFER}+1, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
# Counting complex brackets (for brackets-highlighter): 9. $(( as argument
_FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) )
# ADD
[[ $__arg[-2,-1] == '))' ]] && (( __start=_start_pos-${#PREBUFFER}, __end=_end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$(( __end - 2 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
[[ $__arg[-2,-1] == '))' ]] && (( __start=_end_pos-${#PREBUFFER}-2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}")
# Counting complex brackets (for brackets-highlighter): 10. )) for as-argument $((
_FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) )
;;
'`'*) __style=${FAST_THEME_NAME}back-quoted-argument;;
'((') # 'F' - (( after for
(( this_word & 32 )) && braces_stack='F'"$braces_stack" && __style=${FAST_THEME_NAME}builtin
(( this_word & 32 )) && braces_stack='F'"$braces_stack" && __style=${FAST_THEME_NAME}builtin && \
# Counting complex brackets (for brackets-highlighter): 11. (( as for-syntax
_FAST_COMPLEX_BRACKETS+=( $(( _start_pos-${#PREBUFFER} )) $(( _start_pos-${#PREBUFFER}+1 )) )
;;
'))') # 'F' - (( after for
[[ "${braces_stack[1]}" = "F" ]] && braces_stack[1]="" && __style=${FAST_THEME_NAME}builtin
[[ "${braces_stack[1]}" = "F" ]] && braces_stack[1]="" && __style=${FAST_THEME_NAME}builtin && \
# Counting complex brackets (for brackets-highlighter): 12. )) as for-syntax
_FAST_COMPLEX_BRACKETS+=( $(( _start_pos-${#PREBUFFER} )) $(( _start_pos-${#PREBUFFER}+1 )) )
;;
'<<<')
(( next_word = (next_word | 128) & ~3 ))

View file

@ -18,7 +18,7 @@ function -fast-highlight-string-process {
_mybuf="${match[3]:1}"
} || {
__idx+=${mbegin[1]}
[[ -z "$__quoting" ]] && {
[[ -z "$__quoting" && -z "${_FAST_COMPLEX_BRACKETS[(r)$((__idx-1))]}" ]] && {
if [[ "${match[1]}" = ["({["] ]]; then
pos_to_level[$__idx]=$(( ++__level ))
level_to_pos[$__level]="$__idx"

View file

@ -33,6 +33,9 @@
typeset -g ZERO=${(%):-%N}
typeset -g FAST_BASE_DIR="${ZERO:h}"
typeset -ga _FAST_MAIN_CACHE
# Holds list of indices pointing at brackets that
# are complex, i.e. e.g. part of "[[" in [[ ... ]]
typeset -ga _FAST_COMPLEX_BRACKETS
if [[ -z "$ZPLG_CUR_PLUGIN" && "${fpath[(r)$FAST_BASE_DIR]}" != $FAST_BASE_DIR ]]; then
fpath+=( "$FAST_BASE_DIR" )