parent
							
								
									25ae1c0121
								
							
						
					
					
						commit
						dc1b2f6fa4
					
				|  | @ -676,19 +676,7 @@ _zsh_highlight_highlighter_main_paint() | ||||||
|                  ;| |                  ;| | ||||||
|         '--'*)   style=double-hyphen-option;; |         '--'*)   style=double-hyphen-option;; | ||||||
|         '-'*)    style=single-hyphen-option;; |         '-'*)    style=single-hyphen-option;; | ||||||
|         "'"*)    _zsh_highlight_main_highlighter_highlight_single_quote 1 |  | ||||||
|                  already_added=1 |  | ||||||
|                  ;; |  | ||||||
|         '"'*)    _zsh_highlight_main_highlighter_highlight_double_quote |  | ||||||
|                  already_added=1 |  | ||||||
|                  ;; |  | ||||||
|         \$\'*)   _zsh_highlight_main_highlighter_highlight_dollar_quote |  | ||||||
|                  already_added=1 |  | ||||||
|                  ;; |  | ||||||
|         '`'*)    style=back-quoted-argument;; |         '`'*)    style=back-quoted-argument;; | ||||||
|         [$][*])  style=default;; |  | ||||||
|         [*?]*|*[^\\][*?]*) |  | ||||||
|                  $highlight_glob && style=globbing || style=default;; |  | ||||||
|         *)       if false; then |         *)       if false; then | ||||||
|                  elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then |                  elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then | ||||||
|                    # was handled by the $'\x7d' case above |                    # was handled by the $'\x7d' case above | ||||||
|  | @ -706,7 +694,8 @@ _zsh_highlight_highlighter_main_paint() | ||||||
|                    if _zsh_highlight_main_highlighter_check_path; then |                    if _zsh_highlight_main_highlighter_check_path; then | ||||||
|                      style=$REPLY |                      style=$REPLY | ||||||
|                    else |                    else | ||||||
|                      style=default |                      _zsh_highlight_main_highlighter_highlight_argument | ||||||
|  |                      already_added=1 | ||||||
|                    fi |                    fi | ||||||
|                  fi |                  fi | ||||||
|                  ;; |                  ;; | ||||||
|  | @ -805,6 +794,49 @@ _zsh_highlight_main_highlighter_check_path() | ||||||
|   return 1 |   return 1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Highlight an argument and possibly special chars in quotes | ||||||
|  | # This command will at least highlight start_pos to end_pos with the default style | ||||||
|  | _zsh_highlight_main_highlighter_highlight_argument() | ||||||
|  | { | ||||||
|  |   local i | ||||||
|  | 
 | ||||||
|  |   _zsh_highlight_main_add_region_highlight $start_pos $end_pos default | ||||||
|  |   for (( i = 1 ; i <= end_pos - start_pos ; i += 1 )); do | ||||||
|  |     case "$arg[$i]" in | ||||||
|  |       "\\") (( i += 1 )); continue;; | ||||||
|  |       "'") _zsh_highlight_main_highlighter_highlight_single_quote $i; (( i = REPLY ));; | ||||||
|  |       '"') _zsh_highlight_main_highlighter_highlight_double_quote $i; (( i = REPLY ));; | ||||||
|  |       '$') | ||||||
|  |         if [[ $arg[i+1] == "'" ]]; then | ||||||
|  |           _zsh_highlight_main_highlighter_highlight_dollar_quote $i | ||||||
|  |           (( i = REPLY )) | ||||||
|  |         elif [[ $arg[i+1] == [\^=~#+] ]]; then | ||||||
|  |           while [[ $arg[i+1] == [\^=~#+] ]]; do | ||||||
|  |             (( i += 1 )) | ||||||
|  |           done | ||||||
|  |           if [[ $arg[i+1] == [*@#?-$!] ]]; then | ||||||
|  |             (( i += 1 )) | ||||||
|  |           fi | ||||||
|  |         elif [[ $arg[i+1] == [*@#?-$!] ]]; then | ||||||
|  |           (( i += 1 )) | ||||||
|  |         fi;; | ||||||
|  |       [*?]) | ||||||
|  |         if $highlight_glob; then | ||||||
|  |           _zsh_highlight_main_add_region_highlight $start_pos $end_pos globbing | ||||||
|  |           break | ||||||
|  |         fi;; | ||||||
|  |       *) continue;; | ||||||
|  |     esac | ||||||
|  |   done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Quote Helper Functions | ||||||
|  | # | ||||||
|  | # $arg is expected to be set to the current argument | ||||||
|  | # $start_pos is expected to be set to the start of $arg in $BUFFER | ||||||
|  | # $1 is the index in $arg which starts the quote | ||||||
|  | # $REPLY is returned as the end of quote index in $arg | ||||||
|  | 
 | ||||||
| # Highlight single-quoted strings | # Highlight single-quoted strings | ||||||
| _zsh_highlight_main_highlighter_highlight_single_quote() | _zsh_highlight_main_highlighter_highlight_single_quote() | ||||||
| { | { | ||||||
|  | @ -832,11 +864,11 @@ _zsh_highlight_main_highlighter_highlight_double_quote() | ||||||
|   local MATCH; integer MBEGIN MEND |   local MATCH; integer MBEGIN MEND | ||||||
|   local i j k style |   local i j k style | ||||||
| 
 | 
 | ||||||
|   # Starting quote is at 1, so start parsing at offset 2 in the string. |   for (( i = $1 + 1 ; i < end_pos - start_pos ; i += 1 )) ; do | ||||||
|   for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do |  | ||||||
|     (( j = i + start_pos - 1 )) |     (( j = i + start_pos - 1 )) | ||||||
|     (( k = j + 1 )) |     (( k = j + 1 )) | ||||||
|     case "$arg[$i]" in |     case "$arg[$i]" in | ||||||
|  |       '"') break;; | ||||||
|       '$' ) style=dollar-double-quoted-argument |       '$' ) style=dollar-double-quoted-argument | ||||||
|             # Look for an alphanumeric parameter name. |             # Look for an alphanumeric parameter name. | ||||||
|             if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then |             if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then | ||||||
|  | @ -880,8 +912,9 @@ _zsh_highlight_main_highlighter_highlight_double_quote() | ||||||
|     highlights+=($j $k $style) |     highlights+=($j $k $style) | ||||||
|   done |   done | ||||||
| 
 | 
 | ||||||
|   highlights=($start_pos $end_pos double-quoted-argument $highlights) |   highlights=($(( start_pos + $1 - 1)) $(( start_pos + i )) double-quoted-argument $highlights) | ||||||
|   _zsh_highlight_main_add_many_region_highlights $highlights |   _zsh_highlight_main_add_many_region_highlights $highlights | ||||||
|  |   REPLY=$i | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Highlight special chars inside dollar-quoted strings | # Highlight special chars inside dollar-quoted strings | ||||||
|  | @ -893,11 +926,11 @@ _zsh_highlight_main_highlighter_highlight_dollar_quote() | ||||||
|   local AA |   local AA | ||||||
|   integer c |   integer c | ||||||
| 
 | 
 | ||||||
|   # Starting dollar-quote is at 1:2, so start parsing at offset 3 in the string. |   for (( i = $1 + 2 ; i < end_pos - start_pos ; i += 1 )) ; do | ||||||
|   for (( i = 3 ; i < end_pos - start_pos ; i += 1 )) ; do |  | ||||||
|     (( j = i + start_pos - 1 )) |     (( j = i + start_pos - 1 )) | ||||||
|     (( k = j + 1 )) |     (( k = j + 1 )) | ||||||
|     case "$arg[$i]" in |     case "$arg[$i]" in | ||||||
|  |       "'") break;; | ||||||
|       "\\") style=back-dollar-quoted-argument |       "\\") style=back-dollar-quoted-argument | ||||||
|             for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do |             for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do | ||||||
|               [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break |               [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break | ||||||
|  | @ -926,8 +959,9 @@ _zsh_highlight_main_highlighter_highlight_dollar_quote() | ||||||
|     highlights+=($j $k $style) |     highlights+=($j $k $style) | ||||||
|   done |   done | ||||||
| 
 | 
 | ||||||
|   highlights=($start_pos $end_pos dollar-quoted-argument $highlights) |   highlights=($(( start_pos + $1 - 1 )) $(( start_pos + i )) dollar-quoted-argument $highlights) | ||||||
|   _zsh_highlight_main_add_many_region_highlights $highlights |   _zsh_highlight_main_add_many_region_highlights $highlights | ||||||
|  |   REPLY=$i | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Called with a single positional argument. | # Called with a single positional argument. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue