diff --git a/autotests/folding/highlight.sh.fold b/autotests/folding/highlight.sh.fold
index cd2291c..84d74db 100644
--- a/autotests/folding/highlight.sh.fold
+++ b/autotests/folding/highlight.sh.fold
@@ -1,207 +1,210 @@
#! /bin/sh
# This is a test script for the Katepart Bash Syntax Highlighting by
# Wilbert Berendsen. This is not runnable !!!
# The highlighting recognizes basic types of input, and has a few special cases that
# are all in FindCommands. The main objective is to create really proper nesting of
# (multiline) strings, variables, expressions, etc.
# ============== Tests: ===============
# basic types:
echo 'single quoted string'
echo "double quoted string"
echo $'string with esc\apes\x0din it'
echo $"string meant to be translated"
# comments:
# this is a comment
#this too
echo this is#nt a comment
dcop kate EditInterface#1 #this is
-
+grep -e "^default/linux/amd64/" |\ #this is a comment
+mkdir this\ isnt\ #a\ comment
+mkdir this\ isnt\\\;#a\ comment
+mkdir this\\ #is a comment
# brace expansion
mv my_file.{JPG,jpg}
# special characters are escaped:
echo \(output\) \&\| \> \< \" \' \*
# variable substitution:
echo $filename.ext
echo $filename_ext
echo ${filename}_ext
echo text${array[$subscript]}.text
echo text${array["string"]}.text
echo ${!prefix*}
echo ${!redir}
echo short are $_, $$, $?, ${@}, etc.
echo ${variable/a/d}
echo ${1:-default}
# expression subst:
echo $(( cd << ed + 1 ))
# command subst:
echo $(ls -l)
echo `cat myfile`
# file subst:
echo $(<$filename)
echo $( my_file.txt 2>&1
# All substitutions also work in strings:
echo "subst ${in}side string" 'not $inside this ofcourse'
echo "The result is $(( $a + $b )). Thanks!"
echo "Your homedir contains `ls $HOME |wc -l` files."
# Escapes in strings:
p="String \` with \$ escapes \" ";
# keywords are black, builtins dark purple and common commands lighter purple
set
exit
login
# Other colorings:
error() {
cat /usr/bin/lesspipe.sh
runscript >& redir.bak
exec 3>&4
}
# do - done make code blocks
while [ $p -lt $q ]do
chown 0644 $file.$p
done
# braces as well
run_prog | sort -u |
{
echo Header
while read a b d
do
echo $a/$b/$c
done
echo Footer
}
# Any constructions can be nested:
echo "A long string with $(
if [ $count -gt 100 ] ; then
echo "much"
else
echo "not much"
fi ) substitutions." ;
# Even the case construct is correctly folded:
test -f blaat &&
( do_something
case $p in
*bak)
do_bak $p
;;
*)
dont_bak $p
;;esac) # despite the extra parentheses in the case construction.
# variable assignments:
DIR=/dev
p=`ls`
LC_ALL="nl" dcop 'kate*'
_VAR=val
ARR=(this is an array)
ARR2=([this]=too [and]="this too")
usage="$0 -- version $VERSION
Multiple lines of output
can be possible."
ANSWER=yes # here 'yes' isn't highlighed as command
# Some commands expect variable names, these are colored correctly:
export PATH=/my/bin:$PATH BLAAT
export A B D
local p=3 x y='\'
read x y z <<< $hallo
unset B
declare -a VAR1 VAR2 && exit
declare less a && b
# options are recoqnized:
zip -f=file.zip
./configure --destdir=/usr
make destdir=/usr/
# [[ and [ correctly need spaces to be regarded as structure,
# otherwise they are patterns (currently treated as normal text)
if [ "$p" == "" ] ; then
ls /usr/bin/[a-z]*
elif [[ $p == 0 ]] ; then
ls /usr/share/$p
fi
# Fixed:
ls a[ab]* # dont try to interprete as assignment with subscript (fixed)
a[ab]
a[ab]=sa
# Here documents are difficult to catch:
cat > myfile << __EOF__
You're right, this is definitely no bash code
But ls more $parameters should be expanded.
__EOF__
# quoted:
cat << "EOF" | egrep "this" >&4 # the rest of the line is still considered bash source
You're right, this is definitely no bash code
But ls more $parameters should be expanded. :->
EOF
# indented:
if true
then
cat <<- EOF
Indented text with a $dollar or \$two
EOF
elif [ -d $file ]; then
cat <<- "EOF"
Indented text without a $dollar
EOF
ficase 1 in
2) echo xxx;
;;
1) echo yyy;
esac
ls #should be outside of case 1 folding block
diff --git a/autotests/html/highlight.sh.html b/autotests/html/highlight.sh.html
index b661a14..ae2aad0 100644
--- a/autotests/html/highlight.sh.html
+++ b/autotests/html/highlight.sh.html
@@ -1,214 +1,217 @@
highlight.sh
#! /bin/sh# This is a test script for the Katepart Bash Syntax Highlighting by# Wilbert Berendsen. This is not runnable !!!# The highlighting recognizes basic types of input, and has a few special cases that# are all in FindCommands. The main objective is to create really proper nesting of# (multiline) strings, variables, expressions, etc.# ============== Tests: ===============# basic types:echo'single quoted string'echo"double quoted string"echo$'string with esc\apes\x0din it'echo$"string meant to be translated"# comments:# this is a comment#this tooecho this is#nt a comment
dcop kate EditInterface#1 #this is
-
+grep -e "^default/linux/amd64/"|\ #this is a comment
+mkdir this\ isnt\ #a\ comment
+mkdir this\ isnt\\\;#a\ comment
+mkdir this\\#is a comment# brace expansionmv my_file.{JPG,jpg}# special characters are escaped:echo\(output\)\&\|\>\<\"\'\*# variable substitution:echo$filename.ext
echo$filename_extecho${filename}_ext
echo text${array[$subscript]}.text
echo text${array["string"]}.text
echo${!prefix*}echo${!redir}echo short are $_, $$, $?, ${@}, etc.
echo${variable/a/d}echo${1:-default}# expression subst:echo$(( cd << ed + 1 ))# command subst:echo$(ls -l)echo`cat myfile`# file subst:echo $(<$filename)
echo $(</path/to/myfile)
# process subst:sort <(show_labels) |sed's/a/bg' > my_file.txt 2>&1
# All substitutions also work in strings:echo"subst ${in}side string"'not $inside this ofcourse'echo"The result is $(($a + $b)). Thanks!"echo"Your homedir contains `ls$HOME|wc -l` files."# Escapes in strings:p="String \` with \$ escapes \" ";
# keywords are black, builtins dark purple and common commands lighter purplesetexitlogin# Other colorings:error(){cat /usr/bin/lesspipe.sh
runscript >&redir.bakexec 3>&4
}# do - done make code blockswhile [$p-lt$q ]dochown 0644 $file.$pdone# braces as wellrun_prog|sort -u |{echo Header
whilereadabddoecho$a/$b/$cdoneecho Footer
}# Any constructions can be nested:echo"A long string with $(if [$count-gt 100 ] ; thenecho"much"elseecho"not much"fi) substitutions.";# Even the case construct is correctly folded:test -f blaat &&(do_somethingcase$p in
*bak)do_bak$p;;
*)dont_bak$p;;esac)# despite the extra parentheses in the case construction.# variable assignments:DIR=/dev
p=`ls`LC_ALL="nl"dcop'kate*'_VAR=val
ARR=(this is an array)ARR2=([this]=too [and]="this too")usage="$0 -- version $VERSIONMultiple lines of outputcan be possible."ANSWER=yes # here 'yes' isn't highlighed as command# Some commands expect variable names, these are colored correctly:exportPATH=/my/bin:$PATHBLAATexportABDlocalp=3 xy='\'readxyz <<< $hallounsetBdeclare -a VAR1VAR2&&exitdeclarelessa&&b# options are recoqnized:zip -f=file.zip
./configure --destdir=/usr
make destdir=/usr/
# [[ and [ correctly need spaces to be regarded as structure,# otherwise they are patterns (currently treated as normal text)if ["$p"=="" ] ; thenls /usr/bin/[a-z]*
elif [[$p== 0 ]] ; thenls /usr/share/$pfi# Fixed:ls a[ab]* # dont try to interprete as assignment with subscript (fixed)a[ab]
a[ab]=sa
# Here documents are difficult to catch:cat > myfile << __EOF__
You're right, this is definitely no bash code
But ls more $parameters should be expanded.
__EOF__
# quoted:cat << "EOF" |egrep"this" >&4 # the rest of the line is still considered bash source
You're right, this is definitely no bash code
But ls more $parameters should be expanded. :->
EOF
# indented:iftruethencat <<- EOF
Indented text with a $dollar or \$two
EOF
elif [-d$file ]; thencat <<- "EOF"
Indented text without a $dollar
EOF
ficase 1 in
2)echo xxx;;;
1)echo yyy;esacls#should be outside of case 1 folding block
diff --git a/autotests/input/highlight.sh b/autotests/input/highlight.sh
index a354757..1ac3bd7 100644
--- a/autotests/input/highlight.sh
+++ b/autotests/input/highlight.sh
@@ -1,207 +1,210 @@
#! /bin/sh
# This is a test script for the Katepart Bash Syntax Highlighting by
# Wilbert Berendsen. This is not runnable !!!
# The highlighting recognizes basic types of input, and has a few special cases that
# are all in FindCommands. The main objective is to create really proper nesting of
# (multiline) strings, variables, expressions, etc.
# ============== Tests: ===============
# basic types:
echo 'single quoted string'
echo "double quoted string"
echo $'string with esc\apes\x0din it'
echo $"string meant to be translated"
# comments:
# this is a comment
#this too
echo this is#nt a comment
dcop kate EditInterface#1 #this is
-
+grep -e "^default/linux/amd64/" |\ #this is a comment
+mkdir this\ isnt\ #a\ comment
+mkdir this\ isnt\\\;#a\ comment
+mkdir this\\ #is a comment
# brace expansion
mv my_file.{JPG,jpg}
# special characters are escaped:
echo \(output\) \&\| \> \< \" \' \*
# variable substitution:
echo $filename.ext
echo $filename_ext
echo ${filename}_ext
echo text${array[$subscript]}.text
echo text${array["string"]}.text
echo ${!prefix*}
echo ${!redir}
echo short are $_, $$, $?, ${@}, etc.
echo ${variable/a/d}
echo ${1:-default}
# expression subst:
echo $(( cd << ed + 1 ))
# command subst:
echo $(ls -l)
echo `cat myfile`
# file subst:
echo $(<$filename)
echo $( my_file.txt 2>&1
# All substitutions also work in strings:
echo "subst ${in}side string" 'not $inside this ofcourse'
echo "The result is $(( $a + $b )). Thanks!"
echo "Your homedir contains `ls $HOME |wc -l` files."
# Escapes in strings:
p="String \` with \$ escapes \" ";
# keywords are black, builtins dark purple and common commands lighter purple
set
exit
login
# Other colorings:
error() {
cat /usr/bin/lesspipe.sh
runscript >& redir.bak
exec 3>&4
}
# do - done make code blocks
while [ $p -lt $q ]
do
chown 0644 $file.$p
done
# braces as well
run_prog | sort -u |
{
echo Header
while read a b d
do
echo $a/$b/$c
done
echo Footer
}
# Any constructions can be nested:
echo "A long string with $(
if [ $count -gt 100 ] ; then
echo "much"
else
echo "not much"
fi ) substitutions." ;
# Even the case construct is correctly folded:
test -f blaat &&
( do_something
case $p in
*bak)
do_bak $p
;;
*)
dont_bak $p
;;
esac
) # despite the extra parentheses in the case construction.
# variable assignments:
DIR=/dev
p=`ls`
LC_ALL="nl" dcop 'kate*'
_VAR=val
ARR=(this is an array)
ARR2=([this]=too [and]="this too")
usage="$0 -- version $VERSION
Multiple lines of output
can be possible."
ANSWER=yes # here 'yes' isn't highlighed as command
# Some commands expect variable names, these are colored correctly:
export PATH=/my/bin:$PATH BLAAT
export A B D
local p=3 x y='\'
read x y z <<< $hallo
unset B
declare -a VAR1 VAR2 && exit
declare less a && b
# options are recoqnized:
zip -f=file.zip
./configure --destdir=/usr
make destdir=/usr/
# [[ and [ correctly need spaces to be regarded as structure,
# otherwise they are patterns (currently treated as normal text)
if [ "$p" == "" ] ; then
ls /usr/bin/[a-z]*
elif [[ $p == 0 ]] ; then
ls /usr/share/$p
fi
# Fixed:
ls a[ab]* # dont try to interprete as assignment with subscript (fixed)
a[ab]
a[ab]=sa
# Here documents are difficult to catch:
cat > myfile << __EOF__
You're right, this is definitely no bash code
But ls more $parameters should be expanded.
__EOF__
# quoted:
cat << "EOF" | egrep "this" >&4 # the rest of the line is still considered bash source
You're right, this is definitely no bash code
But ls more $parameters should be expanded. :->
EOF
# indented:
if true
then
cat <<- EOF
Indented text with a $dollar or \$two
EOF
elif [ -d $file ]; then
cat <<- "EOF"
Indented text without a $dollar
EOF
fi
case 1 in
2) echo xxx;
;;
1) echo yyy;
esac
-ls #should be outside of case 1 folding block
\ No newline at end of file
+ls #should be outside of case 1 folding block
diff --git a/autotests/reference/highlight.sh.ref b/autotests/reference/highlight.sh.ref
index fbfba05..53b6ba1 100644
--- a/autotests/reference/highlight.sh.ref
+++ b/autotests/reference/highlight.sh.ref
@@ -1,207 +1,210 @@
#! /bin/sh # This is a test script for the Katepart Bash Syntax Highlighting by # Wilbert Berendsen. This is not runnable !!! # The highlighting recognizes basic types of input, and has a few special cases that # are all in FindCommands. The main objective is to create really proper nesting of # (multiline) strings, variables, expressions, etc. # ============== Tests: =============== # basic types: echo'single quoted string' echo"double quoted string" echo$'string with esc\apes\x0din it' echo$"string meant to be translated" # comments: # this is a comment #this too echo this is#nt a comment dcop kate EditInterface#1 #this is
-
+grep"^default/linux/amd64/"|\ #this is a comment
+mkdir this\ isnt\ #a\ comment
+mkdir this\ isnt\\\;#a\ comment
+mkdir this\\#is a comment # brace expansion mv my_file.{JPG,jpg} # special characters are escaped: echo\(output\)\&\|\>\<\"\'\* # variable substitution: echo$filename.ext echo$filename_ext echo${filename}_ext echo text${array[$subscript]}.text echo text${array["string"]}.text echo${!prefix*} echo${!redir} echo short are $_, $$, $?, ${@}, etc. echo${variable/a/d} echo${1:-default} # expression subst: echo$(( cd << ed + 1 )) # command subst: echo$(ls) echo`cat myfile` # file subst: echo$(<$filename) echo$(</path/to/myfile) # process subst: sort<(show_labels)|sed's/a/bg'> my_file.txt 2>&1 # All substitutions also work in strings: echo"subst ${in}side string"'not $inside this ofcourse' echo"The result is $(($a + $b)). Thanks!" echo"Your homedir contains `ls$HOME|wc` files." # Escapes in strings: p="String \` with \$ escapes \" "; # keywords are black, builtins dark purple and common commands lighter purple set exit login # Other colorings: error(){ cat/usr/bin/lesspipe.sh runscript>&redir.bak exec3>&4 } # do - done make code blocks while [$p-lt$q ] do chown 0644 $file.$p done # braces as well run_prog|sort| { echo Header whilereadabd do echo$a/$b/$c done echo Footer } # Any constructions can be nested: echo"A long string with $( if [$count-gt 100 ] ; then echo"much" else echo"not much" fi) substitutions."; # Even the case construct is correctly folded: test blaat && (do_something case$p in *bak) do_bak$p ;; *) dont_bak$p ;; esac )# despite the extra parentheses in the case construction. # variable assignments: DIR=/dev p=`ls` LC_ALL="nl"dcop'kate*' _VAR=val ARR=(this is an array) ARR2=([this]=too [and]="this too") usage="$0 -- version $VERSION Multiple lines of output can be possible." ANSWER=yes # here 'yes' isn't highlighed as command # Some commands expect variable names, these are colored correctly: exportPATH=/my/bin:$PATHBLAAT exportABD localp=3 xy='\' readxyz<<<$hallo unsetB declareVAR1VAR2&&exit declarelessa&&b # options are recoqnized: zip=file.zip ./configure=/usr make destdir=/usr/ # [[ and [ correctly need spaces to be regarded as structure, # otherwise they are patterns (currently treated as normal text) if ["$p"=="" ] ; then ls/usr/bin/[a-z]* elif [[$p== 0 ]] ; then ls/usr/share/$p fi # Fixed: ls a[ab]* # dont try to interprete as assignment with subscript (fixed) a[ab] a[ab]=sa # Here documents are difficult to catch: cat> myfile << __EOF__ You're right, this is definitely no bash code But ls more $parameters should be expanded. __EOF__ # quoted: cat<< "EOF"|egrep"this">&4# the rest of the line is still considered bash source You're right, this is definitely no bash code But ls more $parameters should be expanded. :-> EOF # indented: iftrue then cat<<- EOF Indented text with a $dollar or \$two EOF elif [-d$file ]; then cat<<- "EOF" Indented text without a $dollar EOF fi case 1 in 2)echo xxx; ;; 1)echo yyy; esac ls#should be outside of case 1 folding block
diff --git a/autotests/reference/test.bb.ref b/autotests/reference/test.bb.ref
index cb5b655..c508a2d 100644
--- a/autotests/reference/test.bb.ref
+++ b/autotests/reference/test.bb.ref
@@ -1,44 +1,44 @@
# syntax test file for Bitbake receipes SUMMARY = "GammaRay Qt introspection probe" HOMEPAGE = "http://www.kdab.com/gammaray" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://LICENSE.GPL.txt;md5=2abfe5daa817fd4346b6d55293941415" inherit cmake_qt5 SRC_URI = "git://github.com/KDAB/GammaRay;branch=master" SRCREV = "139e003174f48b0c883fc6c200ef2efb7467bff1" PV = "2.4.0+git${SRCPV}" DEPENDS = "qtdeclarative" S = "${WORKDIR}/git" EXTRA_OECMAKE += " -DGAMMARAY_BUILD_UI=OFF" FILES_${PN}-dev += " \ /usr/lib/cmake/* \ /usr/mkspecs/modules/* \ " FILES_${PN}-dbg += " \ /usr/lib/.debug/* \ /usr/lib/gammaray/*/*/.debug \ /usr/lib/gammaray/*/*/styles/.debug \ " do_install_append() {
-# multiline string ok here
+# multiline string ok here AVAR="this is right" } def python_function(): # some python code pass # error: unterinated string VAR *= "abc this is wrong
diff --git a/data/syntax/bash.xml b/data/syntax/bash.xml
index cdfdf95..26a76d5 100644
--- a/data/syntax/bash.xml
+++ b/data/syntax/bash.xml
@@ -1,980 +1,1004 @@
+
]>
-
+elseforfunctioninselectuntilwhileelifthenset:sourcealiasbgbindbreakbuiltincdcallercommandcompgencompletecontinuedirsdisownechoenableevalexecexitfcfggetoptshashhelphistoryjobskillletlogoutpopdprintfpushdpwdreturnsetshiftshoptsuspendtesttimetimestraptypeulimitumaskunaliaswaitexportunsetdeclaretypesetlocalreadreadonlyarchawkbashbunzip2bzcatbzcmpbzdiffbzegrepbzfgrepbzgrepbzip2bzip2recoverbzlessbzmorecatchattrchgrpchmodchownchvtcpdatedddeallocvtdfdirdircolorsdmesgdnsdomainnamedomainnamedudumpkeysechoedegrepfalsefgconsolefgrepfusergawkgetkeycodesgocrgrepgroffgroupsgunzipgzexegziphostnameigawkinstallkbd_modekbdratekillalllastlastblinklnloadkeysloadunimaploginlslsattrlsmodlsmod.oldlzcatlzcmplzdifflzegreplzfgreplzgreplzlesslzcatlzmalzmainfolzmoremapscrnmesgmkdirmkfifomknodmktempmoremountmvnanonetstatnisdomainnamenroffopenvtpgawkpidofpingpspstreepwdrbashreadlinkredresizeconsrmrmdirrun-partssashsedsetfontsetkeycodessetledssetmetamodesetserialshshowkeyshredsleepssedstatsttysusynctartempfiletouchtrofftrueumountunameunicode_startunicode_stopunlinkunlzmaunxzutmpdumpuuidgenvdirwallwcxzxzcatypdomainnamezcatzcmpzdiffzegrepzfgrepzforcezgrepzlesszmoreznewzshaclocalaconnectaplayapmapmsleepaproposararecordasas86autoconfautoheaderautomakeawkbasenamebcbisonc++calcatcccdda2wavcdparanoiacdrdaocd-readcdrecordchfnchgrpchmodchownchrootchshclearcmpcocolcommcpcpiocppcutdcdddfdiffdiff3dirdircolorsdirectomaticdirnameduenvexprfbsetfilefindflexflex++fmtfreeftpfunzipfuserg++gawkgcgccclangvalgrindxdg-opencmakeqmakesvngitrsyncgdbgetentgetoptgettextgettextizegimpgimp-remotegimptoolgmakegsheadhexdumpidinstalljoinkillkillallldld86lddlesslexlnlocatelockfilelognamelplprlslynxm4makemanmkdirmknodmsgfmtmvnameinasmnawknicenlnmnm86nmapnohupnopodpasswdpatchpcregreppcretestperlperrorpidofprprintfprocmailpruneps2asciips2epsips2fragps2pdfps2pspsbookpsmergepsnuppsresizepsselectpstopsrcsrevrmscpsedseqsettermshredsizesize86skillsloginsnicesortsoxsplitsshssh-addssh-agentssh-keygenssh-keyscanstatstringsstripsudosuidperlsumtactailteetesttruniqunlinkunzipupdatedbupdmapuptimeusersvmstatwwcwgetwhatiswhereiswhichwhowhoamiwritexargsyaccyeszipzsoelimdcopkdialogkfilexhostxmodmapxset
+
+
+
-
+
+
+
+
+
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+