From e05b8e88adc6f399f546f8900038289febda6a18 Mon Sep 17 00:00:00 2001 From: Matthew Martin Date: Sun, 24 Apr 2016 21:09:53 -0500 Subject: [PATCH] 'brackets': Check if brackets match on first pass This removes the need for the typepos array. --- .../brackets/brackets-highlighter.zsh | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/highlighters/brackets/brackets-highlighter.zsh b/highlighters/brackets/brackets-highlighter.zsh index 0252fa1..8709223 100644 --- a/highlighters/brackets/brackets-highlighter.zsh +++ b/highlighters/brackets/brackets-highlighter.zsh @@ -47,8 +47,8 @@ _zsh_highlight_brackets_highlighter_predicate() _zsh_highlight_brackets_highlighter() { local char quotetype style - local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 pos - local -A levelpos lastoflevel matching typepos + local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 matchingpos pos + local -A levelpos lastoflevel matching # Find all brackets and remember which one is matching for (( pos = 1; pos <= buflen; pos++ )) ; do @@ -57,13 +57,14 @@ _zsh_highlight_brackets_highlighter() ["([{"]) levelpos[$pos]=$((++level)) lastoflevel[$level]=$pos - _zsh_highlight_brackets_highlighter_brackettype "$char" ;; [")]}"]) - matching[$lastoflevel[$level]]=$pos - matching[$pos]=$lastoflevel[$level] + matchingpos=$lastoflevel[$level] levelpos[$pos]=$((level--)) - _zsh_highlight_brackets_highlighter_brackettype "$char" + if _zsh_highlight_brackets_match $matchingpos $pos; then + matching[$matchingpos]=$pos + matching[$pos]=$matchingpos + fi ;; ['"'\']) # Skip everything inside quotes @@ -78,7 +79,7 @@ _zsh_highlight_brackets_highlighter() # Now highlight all found brackets for pos in ${(k)levelpos}; do - if [[ -n $matching[$pos] ]] && [[ $typepos[$pos] == $typepos[$matching[$pos]] ]]; then + if (( $+matching[$pos] )); then style=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 )) else style=bracket-error @@ -95,12 +96,12 @@ _zsh_highlight_brackets_highlighter() } # Helper function to differentiate type -_zsh_highlight_brackets_highlighter_brackettype() +_zsh_highlight_brackets_match() { - case $1 in - ["()"]) typepos[$pos]=round;; - ["[]"]) typepos[$pos]=bracket;; - ["{}"]) typepos[$pos]=curly;; - *) ;; + case $BUFFER[$1] in + \() [[ $BUFFER[$2] == \) ]];; + \[) [[ $BUFFER[$2] == \] ]];; + \{) [[ $BUFFER[$2] == \} ]];; + *) false;; esac }