# vim:ft=zsh:sw=4:sts=4
							 | 
						|
								
							 | 
						|
								#
							 | 
						|
								# $1 - PREBUFFER
							 | 
						|
								# $2 - BUFFER
							 | 
						|
								#
							 | 
						|
								function -fast-highlight-string-process {
							 | 
						|
								    emulate -LR zsh
							 | 
						|
								    setopt extendedglob warncreateglobal typesetsilent
							 | 
						|
								
							 | 
						|
								    local -A pos_to_level level_to_pos pair_map final_pairs
							 | 
						|
								    local input=$1$2 _mybuf=$1$2 __style __quoting
							 | 
						|
								    integer __idx=0 __pair_idx __level=0 __start __end
							 | 
						|
								    local -a match mbegin mend
							 | 
						|
								
							 | 
						|
								    pair_map=( "(" ")" "{" "}" "[" "]" )
							 | 
						|
								
							 | 
						|
								    while [[ $_mybuf = (#b)([^"{}()[]\\\"'"]#)((["({[]})\"'"])|[\\](*))(*) ]]; do
							 | 
						|
								        if [[ -n ${match[4]} ]] {
							 | 
						|
								            __idx+=${mbegin[2]}
							 | 
						|
								
							 | 
						|
								            [[ $__quoting = \' ]] && _mybuf=${match[4]} || { _mybuf=${match[4]:1}; (( ++ __idx )); }
							 | 
						|
								        } else {
							 | 
						|
								            __idx+=${mbegin[2]}
							 | 
						|
								            [[ -z $__quoting && -z ${_FAST_COMPLEX_BRACKETS[(r)$((__idx-${#PREBUFFER}-1))]} ]] && {
							 | 
						|
								                if [[ ${match[2]} = ["({["] ]]; then
							 | 
						|
								                    pos_to_level[$__idx]=$(( ++__level ))
							 | 
						|
								                    level_to_pos[$__level]=$__idx
							 | 
						|
								                elif [[ ${match[2]} = ["]})"] ]]; then
							 | 
						|
								                    if (( __level > 0 )); then
							 | 
						|
								                        __pair_idx=${level_to_pos[$__level]}
							 | 
						|
								                        pos_to_level[$__idx]=$(( __level -- ))
							 | 
						|
								                        [[ ${pair_map[${input[__pair_idx]}]} = ${input[__idx]} ]] && {
							 | 
						|
								                            final_pairs[$__idx]=$__pair_idx
							 | 
						|
								                            final_pairs[$__pair_idx]=$__idx
							 | 
						|
								                        }
							 | 
						|
								                    else
							 | 
						|
								                        pos_to_level[$__idx]=-1
							 | 
						|
								                    fi
							 | 
						|
								                fi
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if [[ ${match[2]} = \" && $__quoting != \' ]] {
							 | 
						|
								                [[ $__quoting = '"' ]] && __quoting="" || __quoting='"';
							 | 
						|
								            }
							 | 
						|
								            if [[ ${match[2]} = \' && $__quoting != \" ]] {
							 | 
						|
								                if [[ $__quoting = ("'"|"$'") ]] {
							 | 
						|
								                    __quoting=""
							 | 
						|
								                } else {
							 | 
						|
								                    if [[ $match[1] = *\$ ]] {
							 | 
						|
								                        __quoting="\$'";
							 | 
						|
								                    } else {
							 | 
						|
								                        __quoting="'";
							 | 
						|
								                    }
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								            _mybuf=${match[5]}
							 | 
						|
								        }
							 | 
						|
								    done
							 | 
						|
								
							 | 
						|
								    for __idx in ${(k)pos_to_level}; do
							 | 
						|
								        (( ${+final_pairs[$__idx]} )) && __style=${FAST_THEME_NAME}bracket-level-$(( ( (pos_to_level[$__idx]-1) % 3 ) + 1 )) || __style=${FAST_THEME_NAME}unknown-token
							 | 
						|
								        (( __start=__idx-${#PREBUFFER}-1, __end=__idx-${#PREBUFFER}, __start >= 0 )) && \
							 | 
						|
								            reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}")
							 | 
						|
								    done
							 | 
						|
								
							 | 
						|
								    # If cursor is on a bracket, then highlight corresponding bracket, if any.
							 | 
						|
								    if [[ $WIDGET != zle-line-finish ]]; then
							 | 
						|
								        __idx=$(( CURSOR + 1 ))
							 | 
						|
								        if (( ${+pos_to_level[$__idx]} )) && (( ${+final_pairs[$__idx]} )); then
							 | 
						|
								            (( __start=final_pairs[$__idx]-${#PREBUFFER}-1, __end=final_pairs[$__idx]-${#PREBUFFER}, __start >= 0 )) && \
							 | 
						|
								                reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}") && \
							 | 
						|
								                reply+=("$CURSOR $__idx ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}")
							 | 
						|
								        fi
							 | 
						|
								    fi
							 | 
						|
								    return 0
							 | 
						|
								}
							 |