[gtksourceview: 1/2] sh.lang: Introduce "generic-command" context



commit fa7bcd94d643ae5e2d9fe809e13a39cdd2bf8471
Author: neyfag <11970-neyfag users noreply gitlab gnome org>
Date:   Wed Nov 13 21:40:19 2019 +0100

    sh.lang: Introduce "generic-command" context

 data/language-specs/sh.lang       | 451 ++++++++++++++++++++------------------
 tests/syntax-highlighting/file.sh |   8 +-
 2 files changed, 241 insertions(+), 218 deletions(-)
---
diff --git a/data/language-specs/sh.lang b/data/language-specs/sh.lang
index 5611ddca..5913dc40 100644
--- a/data/language-specs/sh.lang
+++ b/data/language-specs/sh.lang
@@ -37,7 +37,6 @@
     <style id="variable"            name="Variable"            map-to="def:type"/>
     <style id="variable-definition" name="Variable Definition" map-to="sh:variable"/>
     <style id="others"              name="Others"              map-to="def:keyword"/>
-    <style id="common-command"      name="Common Commands"     map-to="def:keyword"/>
     <style id="here-doc-bound"      name="Heredoc Bound"       map-to="def:keyword"/>
     <style id="subshell"            name="Subshell"            map-to="def:preprocessor"/>
   </styles>
@@ -269,13 +268,12 @@
     </context>
 
     <context id="built-in-command-1" style-ref="keyword">
-      <prefix></prefix>
-      <suffix></suffix>
+      <prefix>(?&lt;=\%{unescaped-space}|\%[)</prefix>
+      <suffix>(?=\s|\%])</suffix>
       <keyword>\!</keyword>
       <keyword>\{</keyword>
       <keyword>\}</keyword>
       <keyword>\:</keyword>
-      <keyword>(?&lt;=\s)\.(?=\s)</keyword>
     </context>
 
     <!-- To prevent conflicts, keywords below should be removed from the list
@@ -295,51 +293,8 @@
       <keyword>then</keyword>
       <keyword>until</keyword>
       <keyword>while</keyword>
-      <keyword>alias</keyword>
-      <keyword>bg</keyword>
-      <keyword>bind</keyword>
-      <keyword>break</keyword>
-      <keyword>builtin</keyword>
-      <keyword>cd</keyword>
-      <keyword>command</keyword>
-      <keyword>compgen</keyword>
-      <keyword>complete</keyword>
-      <keyword>continue</keyword>
-      <keyword>dirs</keyword>
-      <keyword>disown</keyword>
-      <keyword>echo</keyword>
-      <keyword>enable</keyword>
-      <keyword>eval</keyword>
-      <keyword>exec</keyword>
-      <keyword>exit</keyword>
-      <keyword>fc</keyword>
-      <keyword>fg</keyword>
-      <keyword>getopts</keyword>
-      <keyword>hash</keyword>
-      <keyword>help</keyword>
-      <keyword>history</keyword>
-      <keyword>jobs</keyword>
-      <keyword>let</keyword>
-      <keyword>logout</keyword>
-      <keyword>popd</keyword>
-      <keyword>printf</keyword>
-      <keyword>pushd</keyword>
-      <keyword>read</keyword>
-      <keyword>return</keyword>
-      <keyword>set</keyword>
-      <keyword>shift</keyword>
-      <keyword>shopt</keyword>
-      <keyword>source</keyword>
-      <keyword>suspend</keyword>
       <keyword>test</keyword>
       <keyword>times</keyword>
-      <keyword>trap</keyword>
-      <keyword>type</keyword>
-      <keyword>ulimit</keyword>
-      <keyword>umask</keyword>
-      <keyword>unalias</keyword>
-      <keyword>unset</keyword>
-      <keyword>wait</keyword>
     </context>
 
     <context id="case-command">
@@ -373,173 +328,239 @@
       </include>
     </context>
 
-    <context id="common-command" style-ref="common-command">
-      <prefix>(?&lt;=\%{unescaped-space}|\%[)</prefix>
-      <suffix>(?=\s|\%])</suffix>
-      <keyword>ar</keyword>
-      <keyword>awk</keyword>
-      <keyword>basename</keyword>
-      <keyword>bash</keyword>
-      <keyword>beep</keyword>
-      <keyword>bunzip2</keyword>
-      <keyword>bzcat</keyword>
-      <keyword>bzcmp</keyword>
-      <keyword>bzdiff</keyword>
-      <keyword>bzegrep</keyword>
-      <keyword>bzfgrep</keyword>
-      <keyword>bzgrep</keyword>
-      <keyword>bzip2recover</keyword>
-      <keyword>bzip2</keyword>
-      <keyword>bzless</keyword>
-      <keyword>bzmore</keyword>
-      <keyword>cc</keyword>
-      <keyword>cat</keyword>
-      <keyword>chattr</keyword>
-      <keyword>chgrp</keyword>
-      <keyword>chmod</keyword>
-      <keyword>chown</keyword>
-      <keyword>chroot</keyword>
-      <keyword>clear</keyword>
-      <keyword>cmp</keyword>
-      <keyword>cpp</keyword>
-      <keyword>cp</keyword>
-      <keyword>cut</keyword>
-      <keyword>date</keyword>
-      <keyword>dd</keyword>
-      <keyword>df</keyword>
-      <keyword>dialog</keyword>
-      <keyword>diff3</keyword>
-      <keyword>diff</keyword>
-      <keyword>dirname</keyword>
-      <keyword>dir</keyword>
-      <keyword>du</keyword>
-      <keyword>egrep</keyword>
-      <keyword>eject</keyword>
-      <keyword>env</keyword>
-      <keyword>expr</keyword>
-      <keyword>false</keyword>
-      <keyword>fgrep</keyword>
-      <keyword>file</keyword>
-      <keyword>find</keyword>
-      <keyword>fmt</keyword>
-      <keyword>free</keyword>
-      <keyword>ftp</keyword>
-      <keyword>funzip</keyword>
-      <keyword>fuser</keyword>
-      <keyword>gawk</keyword>
-      <keyword>gcc</keyword>
-      <keyword>getent</keyword>
-      <keyword>getopt</keyword>
-      <keyword>grep</keyword>
-      <keyword>groups</keyword>
-      <keyword>gunzip</keyword>
-      <keyword>gzip</keyword>
-      <keyword>head</keyword>
-      <keyword>hostname</keyword>
-      <keyword>id</keyword>
-      <keyword>ifconfig</keyword>
-      <keyword>info</keyword>
-      <keyword>insmod</keyword>
-      <keyword>install</keyword>
-      <keyword>join</keyword>
-      <keyword>killall</keyword>
-      <keyword>kill</keyword>
-      <keyword>lastb</keyword>
-      <keyword>last</keyword>
-      <keyword>ld</keyword>
-      <keyword>less</keyword>
-      <keyword>ln</keyword>
-      <keyword>locate</keyword>
-      <keyword>lockfile</keyword>
-      <keyword>login</keyword>
-      <keyword>logname</keyword>
-      <keyword>lp</keyword>
-      <keyword>lpr</keyword>
-      <keyword>lsattr</keyword>
-      <keyword>ls</keyword>
-      <keyword>lsmod</keyword>
-      <keyword>make</keyword>
-      <keyword>man</keyword>
-      <keyword>mkdir</keyword>
-      <keyword>mkfifo</keyword>
-      <keyword>mknod</keyword>
-      <keyword>mktemp</keyword>
-      <keyword>modprobe</keyword>
-      <keyword>more</keyword>
-      <keyword>mount</keyword>
-      <keyword>mv</keyword>
-      <keyword>namei</keyword>
-      <keyword>nawk</keyword>
-      <keyword>nice</keyword>
-      <keyword>nl</keyword>
-      <keyword>passwd</keyword>
-      <keyword>patch</keyword>
-      <keyword>perl</keyword>
-      <keyword>pgawk</keyword>
-      <keyword>pidof</keyword>
-      <keyword>ping</keyword>
-      <keyword>pkg-config</keyword>
-      <keyword>pr</keyword>
-      <keyword>ps</keyword>
-      <keyword>pwd</keyword>
-      <keyword>readlink</keyword>
-      <keyword>renice</keyword>
-      <keyword>rmdir</keyword>
-      <keyword>rm</keyword>
-      <keyword>scp</keyword>
-      <keyword>sed</keyword>
-      <keyword>seq</keyword>
-      <keyword>sh</keyword>
-      <keyword>sleep</keyword>
-      <keyword>sort</keyword>
-      <keyword>split</keyword>
-      <keyword>ssh-add</keyword>
-      <keyword>ssh-agent</keyword>
-      <keyword>ssh-keygen</keyword>
-      <keyword>ssh-keyscan</keyword>
-      <keyword>ssh</keyword>
-      <keyword>stat</keyword>
-      <keyword>sudo</keyword>
-      <keyword>sum</keyword>
-      <keyword>su</keyword>
-      <keyword>sync</keyword>
-      <keyword>tac</keyword>
-      <keyword>tail</keyword>
-      <keyword>tar</keyword>
-      <keyword>tee</keyword>
-      <keyword>tempfile</keyword>
-      <keyword>touch</keyword>
-      <keyword>true</keyword>
-      <keyword>tr</keyword>
-      <keyword>umount</keyword>
-      <keyword>uname</keyword>
-      <keyword>uniq</keyword>
-      <keyword>unlink</keyword>
-      <keyword>unzip</keyword>
-      <keyword>uptime</keyword>
-      <keyword>wall</keyword>
-      <keyword>wc</keyword>
-      <keyword>wget</keyword>
-      <keyword>whereis</keyword>
-      <keyword>which</keyword>
-      <keyword>whoami</keyword>
-      <keyword>who</keyword>
-      <keyword>write</keyword>
-      <keyword>w</keyword>
-      <keyword>xargs</keyword>
-      <keyword>xdialog</keyword>
-      <keyword>zcat</keyword>
-      <keyword>zcmp</keyword>
-      <keyword>zdiff</keyword>
-      <keyword>zegrep</keyword>
-      <keyword>zenity</keyword>
-      <keyword>zfgrep</keyword>
-      <keyword>zforce</keyword>
-      <keyword>zgrep</keyword>
-      <keyword>zip</keyword>
-      <keyword>zless</keyword>
-      <keyword>zmore</keyword>
-      <keyword>znew</keyword>
+    <define-regex id="builtin-command" extended="true">
+      \.
+      | alias
+      | bg
+      | bind
+      | break
+      | builtin
+      | cd
+      | command
+      | compgen
+      | complete
+      | continue
+      | dirs
+      | disown
+      | echo
+      | enable
+      | eval
+      | exec
+      | exit
+      | fc
+      | fg
+      | getopts
+      | hash
+      | help
+      | history
+      | jobs
+      | let
+      | logout
+      | popd
+      | printf
+      | pushd
+      | read
+      | return
+      | set
+      | shift
+      | shopt
+      | source
+      | suspend
+      | trap
+      | type
+      | ulimit
+      | umask
+      | unalias
+      | unset
+      | wait
+    </define-regex>
+    <define-regex id="common-command" extended="true">
+      ar
+      | awk
+      | basename
+      | bash
+      | beep
+      | bunzip2
+      | bzcat
+      | bzcmp
+      | bzdiff
+      | bzegrep
+      | bzfgrep
+      | bzgrep
+      | bzip2recover
+      | bzip2
+      | bzless
+      | bzmore
+      | cc
+      | cat
+      | chattr
+      | chgrp
+      | chmod
+      | chown
+      | chroot
+      | clear
+      | cmp
+      | cpp
+      | cp
+      | cut
+      | date
+      | dd
+      | df
+      | dialog
+      | diff3
+      | diff
+      | dirname
+      | dir
+      | du
+      | egrep
+      | eject
+      | env
+      | expr
+      | false
+      | fgrep
+      | file
+      | find
+      | fmt
+      | free
+      | ftp
+      | funzip
+      | fuser
+      | gawk
+      | gcc
+      | getent
+      | getopt
+      | grep
+      | groups
+      | gunzip
+      | gzip
+      | head
+      | hostname
+      | id
+      | ifconfig
+      | info
+      | insmod
+      | install
+      | join
+      | killall
+      | kill
+      | lastb
+      | last
+      | ld
+      | less
+      | ln
+      | locate
+      | lockfile
+      | login
+      | logname
+      | lp
+      | lpr
+      | lsattr
+      | ls
+      | lsmod
+      | make
+      | man
+      | mkdir
+      | mkfifo
+      | mknod
+      | mktemp
+      | modprobe
+      | more
+      | mount
+      | mv
+      | namei
+      | nawk
+      | nice
+      | nl
+      | passwd
+      | patch
+      | perl
+      | pgawk
+      | pidof
+      | ping
+      | pkg-config
+      | pr
+      | ps
+      | pwd
+      | readlink
+      | renice
+      | rmdir
+      | rm
+      | scp
+      | sed
+      | seq
+      | sh
+      | sleep
+      | sort
+      | split
+      | ssh-add
+      | ssh-agent
+      | ssh-keygen
+      | ssh-keyscan
+      | ssh
+      | stat
+      | sudo
+      | sum
+      | su
+      | sync
+      | tac
+      | tail
+      | tar
+      | tee
+      | tempfile
+      | touch
+      | true
+      | tr
+      | umount
+      | uname
+      | uniq
+      | unlink
+      | unzip
+      | uptime
+      | wall
+      | wc
+      | wget
+      | whereis
+      | which
+      | whoami
+      | who
+      | write
+      | w
+      | xargs
+      | xdialog
+      | zcat
+      | zcmp
+      | zdiff
+      | zegrep
+      | zenity
+      | zfgrep
+      | zforce
+      | zgrep
+      | zip
+      | zless
+      | zmore
+      | znew
+    </define-regex>
+    <context id="generic-command" end-at-line-end="true">
+      <start extended="true">
+        (?&lt;=\%{unescaped-space}|\%[) (
+          \%{builtin-command} | \%{common-command}
+        ) (?=\s|\%])
+      </start>
+      <end>\%]</end>
+      <include>
+        <context sub-pattern="0" where="start" style-ref="keyword"/>
+        <context sub-pattern="0" where="end" style-ref="keyword"/>
+        <context ref="def:escape"/>
+        <context ref="def:line-continue"/>
+        <context ref="line-comment"/>
+        <context ref="single-quoted-string"/>
+        <context ref="double-quoted-string"/>
+        <context ref="here-doc"/>
+        <context ref="redirection"/>
+        <context ref="backtick-subshell"/>
+        <context ref="command-substitution"/>
+        <context ref="variable"/>
+      </include>
     </context>
 
     <context id="sh" class="no-spell-check">
@@ -561,7 +582,7 @@
         <context ref="variable"/>
         <context ref="variable-definition"/>
         <context ref="built-in-command"/>
-        <context ref="common-command"/>
+        <context ref="generic-command"/>
       </include>
     </context>
 
diff --git a/tests/syntax-highlighting/file.sh b/tests/syntax-highlighting/file.sh
index c2e06ba7..6361c083 100644
--- a/tests/syntax-highlighting/file.sh
+++ b/tests/syntax-highlighting/file.sh
@@ -58,9 +58,11 @@ for arg; do echo $arg; done
 for \
 arg; do echo $arg; done
 
-echo Look for file
-echo Look for; echo Look for
-echo next line
+# Generic command (e.g. echo)
+echo for case grep $var ${var/x/y} $(cmd) `cmd` \
+  'a' "b" \\ | grep 'pattern'
+echo echo; echo echo & echo echo
+echo
 
 # Redirections
1>&2 &> 3>&-


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]