diff --git a/autotests/folding/highlight.tcsh.fold b/autotests/folding/highlight.tcsh.fold
new file mode 100644
index 0000000..6351af4
--- /dev/null
+++ b/autotests/folding/highlight.tcsh.fold
@@ -0,0 +1,42 @@
+#!/bin/tcsh -f
+
+[ a != b ] && echo a || echo b
+# + not an operator
+[ 1+2 == '1+2' ] && echo a || echo b
+[ 1 != '1+2' ] && echo a || echo b
+[ a =~ b ] && echo a || echo b
+[ a !~ b ] && echo a || echo b
+
+set a = 1
+set b = 2
+
+# arithmetic operators
+if ($a < $b) echo 1
+if ($a << $b) echo 1
+if ($a > $b - 2) echo 1
+if ($a + 11 >> $b) echo 1
+if ($a <= $b) echo 1
+if ($a + 1 >= $b) echo 1
+if ($a / $b + 1) echo 1
+if ($a % $b) echo 1
+if ($a * $b) echo 1
+
+# string operators
+if ($a == $b) echo s
+if ($a != $b) echo s
+if ($a =~ $b) echo s
+if ($a !~ $b) echo s
+
+set val = 0
+
+foreach scen ( a b )
+ echo $scen
+
+ if ($scen == a) then
+ echo $scen
+ else if ($scen == x) then
+ echo x
+ else
+ echo $val
+ endif
+end
diff --git a/autotests/html/highlight.tcsh.html b/autotests/html/highlight.tcsh.html
new file mode 100644
index 0000000..84dc288
--- /dev/null
+++ b/autotests/html/highlight.tcsh.html
@@ -0,0 +1,49 @@
+
+
+
+highlight.tcsh
+
+
+#!/bin/tcsh -f
+
+[ a != b ] && echo a || echo b
+# + not an operator
+[ 1+2 == '1+2' ] && echo a || echo b
+[ 1 != '1+2' ] && echo a || echo b
+[ a =~ b ] && echo a || echo b
+[ a !~ b ] && echo a || echo b
+
+set a = 1
+set b = 2
+
+# arithmetic operators
+if ($a < $b) echo 1
+if ($a << $b) echo 1
+if ($a > $b - 2) echo 1
+if ($a + 11 >> $b) echo 1
+if ($a <= $b) echo 1
+if ($a + 1 >= $b) echo 1
+if ($a / $b + 1) echo 1
+if ($a % $b) echo 1
+if ($a * $b) echo 1
+
+# string operators
+if ($a == $b) echo s
+if ($a != $b) echo s
+if ($a =~ $b) echo s
+if ($a !~ $b) echo s
+
+set val = 0
+
+foreach scen ( a b )
+ echo $scen
+
+ if ($scen == a) then
+ echo $scen
+ else if ($scen == x) then
+ echo x
+ else
+ echo $val
+ endif
+end
+
diff --git a/autotests/input/highlight.tcsh b/autotests/input/highlight.tcsh
new file mode 100644
index 0000000..dd7d4d9
--- /dev/null
+++ b/autotests/input/highlight.tcsh
@@ -0,0 +1,42 @@
+#!/bin/tcsh -f
+
+[ a != b ] && echo a || echo b
+# + not an operator
+[ 1+2 == '1+2' ] && echo a || echo b
+[ 1 != '1+2' ] && echo a || echo b
+[ a =~ b ] && echo a || echo b
+[ a !~ b ] && echo a || echo b
+
+set a = 1
+set b = 2
+
+# arithmetic operators
+if ($a < $b) echo 1
+if ($a << $b) echo 1
+if ($a > $b - 2) echo 1
+if ($a + 11 >> $b) echo 1
+if ($a <= $b) echo 1
+if ($a + 1 >= $b) echo 1
+if ($a / $b + 1) echo 1
+if ($a % $b) echo 1
+if ($a * $b) echo 1
+
+# string operators
+if ($a == $b) echo s
+if ($a != $b) echo s
+if ($a =~ $b) echo s
+if ($a !~ $b) echo s
+
+set val = 0
+
+foreach scen ( a b )
+ echo $scen
+
+ if ($scen == a) then
+ echo $scen
+ else if ($scen == x) then
+ echo x
+ else
+ echo $val
+ endif
+end
diff --git a/autotests/reference/highlight.tcsh.ref b/autotests/reference/highlight.tcsh.ref
new file mode 100644
index 0000000..72c20ad
--- /dev/null
+++ b/autotests/reference/highlight.tcsh.ref
@@ -0,0 +1,42 @@
+#!/bin/tcsh -f
+
+[ a != b ] && echo a || echo b
+# + not an operator
+[ 1+2 == '1+2' ] && echo a || echo b
+[ 1 != '1+2' ] && echo a || echo b
+[ a =~ b ] && echo a || echo b
+[ a !~ b ] && echo a || echo b
+
+set a = 1
+set b = 2
+
+# arithmetic operators
+if ($a < $b) echo 1
+if ($a << $b) echo 1
+if ($a > $b - 2) echo 1
+if ($a + 11 >> $b) echo 1
+if ($a <= $b) echo 1
+if ($a + 1 >= $b) echo 1
+if ($a / $b + 1) echo 1
+if ($a % $b) echo 1
+if ($a * $b) echo 1
+
+# string operators
+if ($a == $b) echo s
+if ($a != $b) echo s
+if ($a =~ $b) echo s
+if ($a !~ $b) echo s
+
+set val = 0
+
+foreach scen ( a b )
+ echo $scen
+
+ if ($scen == a) then
+ echo $scen
+ else if ($scen == x) then
+ echo x
+ else
+ echo $val
+ endif
+end
diff --git a/data/syntax/tcsh.xml b/data/syntax/tcsh.xml
index dc63b3c..1c96f11 100644
--- a/data/syntax/tcsh.xml
+++ b/data/syntax/tcsh.xml
@@ -1,810 +1,817 @@
]>
-
+
- - else
- - for
- function
- in
- - select
- - until
- - while
- .
- - then
- :
- alias
- alloc
- bg
- bindkey
- break
- builtins
- bye
- cd
- chdir
- complete
- continue
- dirs
- echo
- echotc
- eval
- exec
- exit
- fg
- filetest
- glob
- hashstat
- history
- hup
- inlib
- jobs
- kill
- limit
- log
- login
- logout
- ls-F
- migrate
- newgrp
- nice
- nohup
- notify
- onintr
- popd
- printenv
- pushd
- rehash
- repeat
- sched
- settc
- setty
- shift
- source
- stop
- suspend
- telltc
- time
- umask
- unalias
- uncomplete
- unhash
- unlimit
- ver
- wait
- watchlog
- where
- which
- unset
- unsetenv
- arch
- awk
- bash
- bunzip2
- bzcat
- bzcmp
- bzdiff
- bzegrep
- bzfgrep
- bzgrep
- bzip2
- bzip2recover
- bzless
- bzmore
- cat
- chattr
- chgrp
- chmod
- chown
- chvt
- cp
- date
- dd
- deallocvt
- df
- dir
- dircolors
- dmesg
- dnsdomainname
- domainname
- du
- dumpkeys
- echo
- ed
- egrep
- false
- fgconsole
- fgrep
- fuser
- gawk
- getkeycodes
- gocr
- grep
- groff
- groups
- gunzip
- gzexe
- gzip
- hostname
- igawk
- install
- kbd_mode
- kbdrate
- killall
- last
- lastb
- link
- ln
- loadkeys
- loadunimap
- login
- ls
- lsattr
- lsmod
- lsmod.old
- mapscrn
- mesg
- mkdir
- mkfifo
- mknod
- mktemp
- more
- mount
- mv
- nano
- netstat
- nisdomainname
- nroff
- openvt
- pgawk
- pidof
- ping
- ps
- pstree
- pwd
- rbash
- readlink
- red
- resizecons
- rm
- rmdir
- run-parts
- sash
- sed
- setfont
- setkeycodes
- setleds
- setmetamode
- setserial
- sh
- showkey
- shred
- sleep
- ssed
- stat
- stty
- su
- sync
- tar
- tempfile
- touch
- troff
- true
- umount
- uname
- unicode_start
- unicode_stop
- unlink
- utmpdump
- uuidgen
- vdir
- wall
- wc
- ypdomainname
- zcat
- zcmp
- zdiff
- zegrep
- zfgrep
- zforce
- zgrep
- zless
- zmore
- znew
- zsh
- aclocal
- aconnect
- aplay
- apm
- apmsleep
- apropos
- ar
- arecord
- as
- as86
- autoconf
- autoheader
- automake
- awk
- basename
- bc
- bison
- c++
- cal
- cat
- cc
- cdda2wav
- cdparanoia
- cdrdao
- cd-read
- cdrecord
- chfn
- chgrp
- chmod
- chown
- chroot
- chsh
- clear
- cmp
- co
- col
- comm
- cp
- cpio
- cpp
- cut
- dc
- dd
- df
- diff
- diff3
- dir
- dircolors
- directomatic
- dirname
- du
- env
- expr
- fbset
- file
- find
- flex
- flex++
- fmt
- free
- ftp
- funzip
- fuser
- g++
- gawk
- gc
- gcc
- gdb
- getent
- getopt
- gettext
- gettextize
- gimp
- gimp-remote
- gimptool
- gmake
- gs
- head
- hexdump
- id
- install
- join
- kill
- killall
- ld
- ld86
- ldd
- less
- lex
- ln
- locate
- lockfile
- logname
- lp
- lpr
- ls
- lynx
- m4
- make
- man
- mkdir
- mknod
- msgfmt
- mv
- namei
- nasm
- nawk
- nice
- nl
- nm
- nm86
- nmap
- nohup
- nop
- od
- passwd
- patch
- pcregrep
- pcretest
- perl
- perror
- pidof
- pr
- printf
- procmail
- prune
- ps2ascii
- ps2epsi
- ps2frag
- ps2pdf
- ps2ps
- psbook
- psmerge
- psnup
- psresize
- psselect
- pstops
- rcs
- rev
- rm
- scp
- sed
- seq
- setterm
- shred
- size
- size86
- skill
- slogin
- snice
- sort
- sox
- split
- ssh
- ssh-add
- ssh-agent
- ssh-keygen
- ssh-keyscan
- stat
- strings
- strip
- sudo
- suidperl
- sum
- tac
- tail
- tee
- test
- tr
- uniq
- unlink
- unzip
- updatedb
- updmap
- uptime
- users
- vmstat
- w
- wc
- wget
- whatis
- whereis
- which
- who
- whoami
- write
- xargs
- yacc
- yes
- zip
- zsoelim
- dcop
- kdialog
- kfile
- xhost
- xmodmap
- xset
-
-
-
-
-
-
-
-
+
+
+
+
-
+
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+