mirror of
				https://github.com/zsh-users/zsh-syntax-highlighting.git
				synced 2025-11-04 03:56:30 +00:00 
			
		
		
		
	Support multiline strings
This commit is contained in:
		
							parent
							
								
									2c5acaefa9
								
							
						
					
					
						commit
						667495bfb7
					
				@ -64,6 +64,14 @@ _zsh_highlight_main_highlighter_predicate()
 | 
			
		||||
_zsh_highlight_main_add_region_highlight() {
 | 
			
		||||
  integer start=$1 end=$2
 | 
			
		||||
  local style=$3
 | 
			
		||||
 | 
			
		||||
  # The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is
 | 
			
		||||
  # relative to $BUFFER.
 | 
			
		||||
  (( start -= $#PREBUFFER ))
 | 
			
		||||
  (( end -= $#PREBUFFER ))
 | 
			
		||||
 | 
			
		||||
  (( end < 0 )) && return # bug
 | 
			
		||||
  (( start < 0 )) && start=0 # normal with e.g. multiline strings
 | 
			
		||||
  region_highlight+=("$start $end $style")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -76,6 +84,7 @@ _zsh_highlight_main_highlighter()
 | 
			
		||||
  typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR
 | 
			
		||||
  typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS
 | 
			
		||||
  typeset -a ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS
 | 
			
		||||
  local buf="$PREBUFFER$BUFFER"
 | 
			
		||||
  region_highlight=()
 | 
			
		||||
 | 
			
		||||
  ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=(
 | 
			
		||||
@ -89,11 +98,11 @@ _zsh_highlight_main_highlighter()
 | 
			
		||||
    $ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR $ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  for arg in ${(z)BUFFER}; do
 | 
			
		||||
  for arg in ${(z)buf}; do
 | 
			
		||||
    local substr_color=0
 | 
			
		||||
    local style_override=""
 | 
			
		||||
    [[ $start_pos -eq 0 && $arg = 'noglob' ]] && highlight_glob=false
 | 
			
		||||
    ((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]##[[:space:]]#}}))
 | 
			
		||||
    ((start_pos+=${#buf[$start_pos+1,-1]}-${#${buf[$start_pos+1,-1]##[[:space:]]#}}))
 | 
			
		||||
    ((end_pos=$start_pos+${#arg}))
 | 
			
		||||
    # Parse the sudo command line
 | 
			
		||||
    if $sudo; then
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								highlighters/main/test-data/multiline-string.zsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								highlighters/main/test-data/multiline-string.zsh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
#!/usr/bin/env zsh
 | 
			
		||||
# -------------------------------------------------------------------------------------------------
 | 
			
		||||
# Copyright (c) 2015 zsh-syntax-highlighting contributors
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without modification, are permitted
 | 
			
		||||
# provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#  * Redistributions of source code must retain the above copyright notice, this list of conditions
 | 
			
		||||
#    and the following disclaimer.
 | 
			
		||||
#  * Redistributions in binary form must reproduce the above copyright notice, this list of
 | 
			
		||||
#    conditions and the following disclaimer in the documentation and/or other materials provided
 | 
			
		||||
#    with the distribution.
 | 
			
		||||
#  * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
 | 
			
		||||
#    may be used to endorse or promote products derived from this software without specific prior
 | 
			
		||||
#    written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 | 
			
		||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 | 
			
		||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 | 
			
		||||
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 | 
			
		||||
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
# -------------------------------------------------------------------------------------------------
 | 
			
		||||
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
 | 
			
		||||
# vim: ft=zsh sw=2 ts=2 et
 | 
			
		||||
# -------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
PREBUFFER=$'echo "foo1\n'
 | 
			
		||||
BUFFER='foo2" ./'
 | 
			
		||||
 | 
			
		||||
expected_region_highlight=(
 | 
			
		||||
  "0 5 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # 'foo2"'
 | 
			
		||||
  "7 8 $ZSH_HIGHLIGHT_STYLES[path]" # './'
 | 
			
		||||
)
 | 
			
		||||
@ -60,13 +60,13 @@ ZSH_HIGHLIGHT_HIGHLIGHTERS=($1)
 | 
			
		||||
for data_file in ${0:h:h}/highlighters/$1/test-data/*; do
 | 
			
		||||
 | 
			
		||||
  # Load the data and prepare checking it.
 | 
			
		||||
  BUFFER= ; expected_region_highlight=(); errors=()
 | 
			
		||||
  PREBUFFER= BUFFER= ; expected_region_highlight=(); errors=()
 | 
			
		||||
  echo -n "* ${data_file:t:r}: "
 | 
			
		||||
  . $data_file
 | 
			
		||||
 | 
			
		||||
  # Check the data declares $BUFFER.
 | 
			
		||||
  if [[ ${#BUFFER} -eq 0 ]]; then
 | 
			
		||||
    errors+=("'BUFFER' is not declared or blank.")
 | 
			
		||||
  # Check the data declares $PREBUFFER or $BUFFER.
 | 
			
		||||
  if [[ ${#PREBUFFER} -eq 0 && ${#BUFFER} -eq 0 ]]; then
 | 
			
		||||
    errors+=("Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank")
 | 
			
		||||
  else
 | 
			
		||||
 | 
			
		||||
    # Check the data declares $expected_region_highlight.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user