Update zsh-syntax-hilighting plugin
authorJoerg Jaspert <joerg@debian.org>
Thu, 3 Nov 2016 08:19:55 +0000 (09:19 +0100)
committerJoerg Jaspert <joerg@debian.org>
Thu, 3 Nov 2016 08:19:55 +0000 (09:19 +0100)
137 files changed:
.zsh/zsh-syntax-highlighting/.revision-hash [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/.version [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/COPYING.md
.zsh/zsh-syntax-highlighting/HACKING.md [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/README.md
.zsh/zsh-syntax-highlighting/highlighters/README.md
.zsh/zsh-syntax-highlighting/highlighters/brackets/README.md
.zsh/zsh-syntax-highlighting/highlighters/brackets/brackets-highlighter.zsh
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/mismatch-patentheses.zsh
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-parentheses.zsh
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-quote.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/quoted-patentheses.zsh
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/simple-parentheses.zsh
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses.zsh
.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses2.zsh
.zsh/zsh-syntax-highlighting/highlighters/cursor/README.md
.zsh/zsh-syntax-highlighting/highlighters/cursor/cursor-highlighter.zsh
.zsh/zsh-syntax-highlighting/highlighters/line/README.md [new symlink]
.zsh/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/README.md
.zsh/zsh-syntax-highlighting/highlighters/main/main-highlighter.zsh [changed mode: 0755->0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiple-redirections.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-named.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/simple-command.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/simple-redirection.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/unknown-command.zsh
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/pattern/README.md
.zsh/zsh-syntax-highlighting/highlighters/pattern/pattern-highlighter.zsh
.zsh/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh [new file with mode: 0644]
.zsh/zsh-syntax-highlighting/highlighters/root/README.md
.zsh/zsh-syntax-highlighting/highlighters/root/root-highlighter.zsh
.zsh/zsh-syntax-highlighting/tests/README.md
.zsh/zsh-syntax-highlighting/tests/generate.zsh [new file with mode: 0755]
.zsh/zsh-syntax-highlighting/tests/tap-colorizer.zsh [new file with mode: 0755]
.zsh/zsh-syntax-highlighting/tests/tap-filter [new file with mode: 0755]
.zsh/zsh-syntax-highlighting/tests/test-highlighting.zsh
.zsh/zsh-syntax-highlighting/tests/test-perfs.zsh
.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

diff --git a/.zsh/zsh-syntax-highlighting/.revision-hash b/.zsh/zsh-syntax-highlighting/.revision-hash
new file mode 100644 (file)
index 0000000..6828f88
--- /dev/null
@@ -0,0 +1 @@
+$Format:%H$
diff --git a/.zsh/zsh-syntax-highlighting/.version b/.zsh/zsh-syntax-highlighting/.version
new file mode 100644 (file)
index 0000000..fb0b754
--- /dev/null
@@ -0,0 +1 @@
+0.6.0-dev
index 2aa6438..3d6b811 100644 (file)
@@ -1,4 +1,4 @@
-Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification, are permitted
diff --git a/.zsh/zsh-syntax-highlighting/HACKING.md b/.zsh/zsh-syntax-highlighting/HACKING.md
new file mode 100644 (file)
index 0000000..39d82fa
--- /dev/null
@@ -0,0 +1,75 @@
+Hacking on zsh-syntax-highlighting itself
+=========================================
+
+This document includes information for people working on z-sy-h itself: on the
+core driver (`zsh-syntax-highlighting.zsh`), on the highlighters in the
+distribution, and on the test suite.  It does not target third-party
+highlighter authors (although they may find it an interesting read).
+
+The `main` highlighter
+----------------------
+
+The following function `pz` is useful when working on the `main` highlighting:
+
+    pq() {
+      (( $#argv )) || return 0
+      print -r -l -- ${(qqqq)argv}
+    }
+    pz() {
+      local arg
+      for arg; do
+        pq ${(z)arg}
+      done
+    }
+
+It prints, for each argument, its token breakdown, similar to how the main
+loop of the `main` highlighter sees it.
+
+Testing the `brackets` highlighter
+----------------------------------
+
+Since the test harness empties `ZSH_HIGHLIGHT_STYLES` and the `brackets`
+highlighter interrogates `ZSH_HIGHLIGHT_STYLES` to determine how to highlight,
+tests must set the `bracket-level-#` keys themselves.  For example:
+
+    ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+    ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
+    BUFFER='echo ({x})'
+
+    expected_region_highlight=(
+      "6  6  bracket-level-1" # (
+      "7  7  bracket-level-2" # {
+      "9  9  bracket-level-2" # }
+      "10 10 bracket-level-1" # )
+    )
+
+Testing the `pattern` highlighter
+---------------------------------
+
+Because the `pattern` highlighter modifies `region_highlight` directly instead
+of using `_zsh_highlight_add_highlight`, the test harness cannot get the
+`ZSH_HIGHLIGHT_STYLES` keys.  Therefore, when writing tests, use the style
+itself as third word (cf. the [documentation for `expected_region_highlight`]
+(docs/highlighters.md)).  For example:
+
+    ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+
+    BUFFER='rm -rf /'
+
+    expected_region_highlight=(
+      "1 8 fg=white,bold,bg=red" # rm -rf /
+    )
+
+Miscellany
+----------
+
+If you work on the driver (`zsh-syntax-highlighting.zsh`), you may find the following zstyle useful:
+
+    zstyle ':completion:*:*:*:*:globbed-files' ignored-patterns {'*/',}zsh-syntax-highlighting.plugin.zsh
+
+IRC channel
+-----------
+
+We're on #zsh-syntax-highlighting on freenode.
+
index 9f47020..2c2b6d6 100644 (file)
@@ -1,52 +1,78 @@
 zsh-syntax-highlighting
 =======================
 
-**[Fish shell](http://www.fishshell.com) like syntax highlighting for [Zsh](http://www.zsh.org).**
+**[Fish shell][fish]-like like syntax highlighting for [Zsh][zsh].**
 
-*Requirements: zsh 4.3.9+.*
+*Requirements: zsh 4.3.17+.*
 
+[fish]: http://www.fishshell.com/
+[zsh]: http://www.zsh.org/
 
-How to install
---------------
+This package provides syntax highlighing for the shell zsh.  It enables
+highlighing of commands whilst they are typed at a zsh prompt into an
+interactive terminal.  This helps in reviewing commands before running
+them, particularly in catching syntax errors.
+
+Some examples:
+
+Before: [![Screenshot #1.1](images/before1-smaller.png)](images/before1.png)
+<br/>
+After:&nbsp; [![Screenshot #1.2](images/after1-smaller.png)](images/after1.png)
 
-### Using packages
+Before: [![Screenshot #2.1](images/before2-smaller.png)](images/before2.png)
+<br/>
+After:&nbsp; [![Screenshot #2.2](images/after2-smaller.png)](images/after2.png)
 
-* Arch Linux: [AUR/zsh-syntax-highlighting](https://aur.archlinux.org/packages.php?ID=54171) / [AUR/zsh-syntax-highlighting-git](https://aur.archlinux.org/packages.php?ID=50867)
-* Gentoo: [mv overlay](http://gpo.zugaina.org/app-shells/zsh-syntax-highlighting)
+Before: [![Screenshot #3.1](images/before3-smaller.png)](images/before3.png)
+<br/>
+After:&nbsp; [![Screenshot #3.2](images/after3-smaller.png)](images/after3.png)
 
-### In your ~/.zshrc
 
-* Download the script or clone this repository:
+How to install
+--------------
+
+See [INSTALL.md](INSTALL.md).
 
-        git clone git://github.com/zsh-users/zsh-syntax-highlighting.git
 
-* Source the script **at the end** of `~/.zshrc`:
+FAQ
+---
 
-        source /path/to/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+### Why must `zsh-syntax-highlighting.zsh` be sourced at the end of the `.zshrc` file?
 
-* Source `~/.zshrc`  to take changes into account:
+`zsh-syntax-highlighting.zsh` wraps ZLE widgets.  It must be sourced after all
+custom widgets have been created (i.e., after all `zle -N` calls and after
+running `compinit`).  Widgets created later will work, but will not update the
+syntax highlighting.
 
-        source ~/.zshrc
+### Does syntax highlighting work during incremental history search?
 
+Highlighting the command line during an incremental history search
+(with the `history-incremental-search-backward` widget, which is
+bound by default to <kbd>Ctrl+R</kbd> in zsh's emacs keymap) requires zsh 5.3
+or newer.
 
-### With oh-my-zsh
+Under zsh 5.2 and older, the zsh-default [underlining][zshzle-Character-Highlighting]
+of the matched portion of the buffer remains available, but zsh-syntax-highlighting's
+additional highlighting is unavailable.  (Those versions of zsh do not provide
+enough information to allow computing the highlighting correctly.)
 
-* Download the script or clone this repository in [oh-my-zsh](http://github.com/robbyrussell/oh-my-zsh) plugins directory:
+See [issue #288][i288] for details.
 
-        cd ~/.oh-my-zsh/custom/plugins
-        git clone git://github.com/zsh-users/zsh-syntax-highlighting.git
+[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
+[i288]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/288
 
-* Activate the plugin in `~/.zshrc` (in **last** position):
+### How are new releases announced?
 
-        plugins=( [plugins...] zsh-syntax-highlighting)
+There is currently no "push" announcements channel.  However, the following
+alternatives exist:
 
-* Source `~/.zshrc`  to take changes into account:
-    
-        source ~/.zshrc
+- GitHub's RSS feed of releases: https://github.com/zsh-users/zsh-syntax-highlighting/releases.atom
+- An anitya entry: https://release-monitoring.org/project/7552/
 
 
 How to tweak
 ------------
 
-Syntax highlighting is done by pluggable highlighter scripts, see the [highlighters directory](zsh-syntax-highlighting/tree/master/highlighters)
-for documentation and configuration settings.
+Syntax highlighting is done by pluggable highlighter scripts.  See the
+[documentation on highlighters](docs/highlighters.md) for details and
+configuration settings.
index 1b07564..8490ddf 100644 (file)
@@ -1,49 +1,8 @@
 zsh-syntax-highlighting / highlighters
 ======================================
 
-Syntax highlighting is done by pluggable highlighters:
+Navigate into the individual highlighters' documentation to see
+what styles (`$ZSH_HIGHLIGHT_STYLES` keys) each highlighter defines.
 
-* [***main***](highlighters/main) - the base highlighter, and the only one active by default.
-* [***brackets***](highlighters/brackets) - matches brackets and parenthesis.
-* [***pattern***](highlighters/pattern) - matches user-defined patterns.
-* [***cursor***](highlighters/cursor) - matches the cursor position.
-* [***root***](highlighters/root) - triggered if the current user is root.
-
-
-How to activate highlighters
-----------------------------
-
-To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array in `~/.zshrc`, for example:
-
-    ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor)
-
-
-How to tweak highlighters
--------------------------
-
-Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` array. Navigate into each highlighter directory to see what styles it defines and how to configure it.
-
-
-How to implement a new highlighter
-----------------------------------
-
-To create your own ***myhighlighter*** highlighter:
-
-* Create your script at **highlighters/*myhighlighter*/*myhighlighter*-highlighter.zsh**.
-* Implement the `_zsh_highlight_myhighlighter_highlighter_predicate` function. This function must return 0 when the highlighter needs to be called, for example:
-
-        _zsh_highlight_myhighlighter_highlighter_predicate() {
-          # Call this highlighter in SVN repositories
-          [[ -d .svn ]]
-        }
-
-* Implement the `_zsh_highlight_myhighlighter_highlighter` function. This function does the actual syntax highlighting, by modifying `region_highlight`, for example:
-
-        _zsh_highlight_myhighlighter_highlighter() {
-          # Colorize the whole buffer with blue background
-          region_highlight+=(0 $#BUFFER bg=blue)
-        }
-
-* Activate your highlighter in `~/.zshrc`:
-
-        ZSH_HIGHLIGHT_HIGHLIGHTERS+=(myhighlighter)
+Refer to the [documentation on highlighters](../docs/highlighters.md) for further
+information.
index 9fd4f96..9001074 100644 (file)
@@ -1,25 +1,20 @@
 zsh-syntax-highlighting / highlighters / brackets
-=================================================
+-------------------------------------------------
 
-This is the ***brackets*** highlighter, that highlights brackets, parenthesis and matches them.
+This is the `brackets` highlighter, that highlights brackets and parentheses, and
+matches them.
 
 
-How to activate it
-------------------
-To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`:
+### How to tweak it
 
-    ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] brackets)
-
-
-How to tweak it
----------------
 This highlighter defines the following styles:
 
 * `bracket-error` - unmatched brackets
 * `bracket-level-N` - brackets with nest level N
 * `cursor-matchingbracket` - the matching bracket, if cursor is on a bracket
 
-To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`:
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
 
     # To define styles for nested brackets up to level 4
     ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold'
@@ -27,4 +22,8 @@ To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for
     ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold'
     ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold'
 
-The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135).
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
index 8e635dd..1bdd1f9 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 : ${ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]:=standout}
 
 # Whether the brackets highlighter should be called or not.
-_zsh_highlight_brackets_highlighter_predicate()
+_zsh_highlight_highlighter_brackets_predicate()
 {
-  _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified
+  [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified
 }
 
 # Brackets highlighting function.
-_zsh_highlight_brackets_highlighter()
+_zsh_highlight_highlighter_brackets_paint()
 {
-  local level=0 pos
-  local -A levelpos lastoflevel matching typepos
+  local char style
+  local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 matchingpos pos
+  local -A levelpos lastoflevel matching
 
   # Find all brackets and remember which one is matching
-  for (( pos = 0; $pos < ${#BUFFER}; pos++ )) ; do
-    local char="$BUFFER[pos+1]"
+  for (( pos = 1; pos <= buflen; pos++ )) ; do
+    char=$BUFFER[pos]
     case $char in
       ["([{"])
         levelpos[$pos]=$((++level))
         lastoflevel[$level]=$pos
-        _zsh_highlight_brackets_highlighter_brackettype "$char"
         ;;
       [")]}"])
-        matching[$lastoflevel[$level]]=$pos
-        matching[$pos]=$lastoflevel[$level]
+        matchingpos=$lastoflevel[$level]
         levelpos[$pos]=$((level--))
-        _zsh_highlight_brackets_highlighter_brackettype "$char"
+       if _zsh_highlight_brackets_match $matchingpos $pos; then
+          matching[$matchingpos]=$pos
+          matching[$pos]=$matchingpos
+        fi
         ;;
       ['"'\'])
         # Skip everything inside quotes
-        local quotetype=$char
-        while (( $pos < ${#BUFFER} )) ; do
-          (( pos++ ))
-          [[ $BUFFER[$pos+1] == $quotetype ]] && break
-        done
+       pos=$BUFFER[(ib:pos+1:)$char]
         ;;
     esac
   done
 
   # Now highlight all found brackets
   for pos in ${(k)levelpos}; do
-    if [[ -n $matching[$pos] ]] && [[ $typepos[$pos] == $typepos[$matching[$pos]] ]]; then
-      local bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]}
-      local bracket_color_level=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 ))
-      local style=$ZSH_HIGHLIGHT_STYLES[$bracket_color_level]
-      region_highlight+=("$pos $((pos + 1)) $style")
+    if (( $+matching[$pos] )); then
+      if (( bracket_color_size )); then
+        style=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 ))
+      fi
     else
-      local style=$ZSH_HIGHLIGHT_STYLES[bracket-error]
-      region_highlight+=("$pos $((pos + 1)) $style")
+      style=bracket-error
     fi
+    _zsh_highlight_add_highlight $((pos - 1)) $pos $style
   done
 
-  # If cursor is on a bracket, then highlight corresponding bracket, if any
-  pos=$CURSOR
-  if [[ -n $levelpos[$pos] ]] && [[ -n $matching[$pos] ]]; then
-    local otherpos=$matching[$pos]
-    local style=$ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]
-    region_highlight+=("$otherpos $((otherpos + 1)) $style")
+  # If cursor is on a bracket, then highlight corresponding bracket, if any.
+  if [[ $WIDGET != zle-line-finish ]]; then
+    pos=$((CURSOR + 1))
+    if [[ -n $levelpos[$pos] ]] && [[ -n $matching[$pos] ]]; then
+      local -i otherpos=$matching[$pos]
+      _zsh_highlight_add_highlight $((otherpos - 1)) $otherpos cursor-matchingbracket
+    fi
   fi
 }
 
 # Helper function to differentiate type 
-_zsh_highlight_brackets_highlighter_brackettype()
+_zsh_highlight_brackets_match()
 {
-  case $1 in
-    ["()"]) typepos[$pos]=round;;
-    ["[]"]) typepos[$pos]=bracket;;
-    ["{}"]) typepos[$pos]=curly;;
-    *) ;;
+  case $BUFFER[$1] in
+    \() [[ $BUFFER[$2] == \) ]];;
+    \[) [[ $BUFFER[$2] == \] ]];;
+    \{) [[ $BUFFER[$2] == \} ]];;
+    *) false;;
   esac
 }
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh b/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh
new file mode 100644 (file)
index 0000000..23b317b
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+WIDGET=zle-line-finish
+
+BUFFER=': $foo[bar]'
+CURSOR=6 # cursor is zero-based
+
+expected_region_highlight=(
+  "11 11 NONE"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh b/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh
new file mode 100644 (file)
index 0000000..5e9cf62
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
+
+BUFFER=': ((( )))'
+CURSOR=2 # cursor is zero-based
+
+expected_region_highlight=(
+  "9 9 cursor-matchingbracket"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh b/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh
new file mode 100644 (file)
index 0000000..2de1b20
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': (x)'
+
+expected_region_highlight=(
+  "1 5 NONE"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh b/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh
new file mode 100644 (file)
index 0000000..a5be21d
--- /dev/null
@@ -0,0 +1,51 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
+
+BUFFER=': ({[({[(x)]})]})'
+
+expected_region_highlight=(
+  "3  3  bracket-level-1"
+  "4  4  bracket-level-2"
+  "5  5  bracket-level-3"
+  "6  6  bracket-level-1"
+  "7  7  bracket-level-2"
+  "8  8  bracket-level-3"
+  "9  9  bracket-level-1"
+  "11 11 bracket-level-1"
+  "12 12 bracket-level-3"
+  "13 13 bracket-level-2"
+  "14 14 bracket-level-1"
+  "15 15 bracket-level-3"
+  "16 16 bracket-level-2"
+  "17 17 bracket-level-1"
+)
index ad72f75..f40226f 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
 BUFFER='echo ({x}]'
 
 expected_region_highlight=(
-  "5  5  $ZSH_HIGHLIGHT_STYLES[bracket-error]" # (
-  "6  6  $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # {
-  "8  8  $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # }
-  "9  9 $ZSH_HIGHLIGHT_STYLES[bracket-error]" # )
+  "6  6  bracket-error" # (
+  "7  7  bracket-level-2" # {
+  "9  9  bracket-level-2" # }
+  "10 10 bracket-error" # )
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh b/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh
new file mode 100644 (file)
index 0000000..b7cc2cb
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+
+BUFFER=': {"{x}"}'
+
+expected_region_highlight=(
+  "3 3 bracket-level-1"
+  "4 8 NONE"
+  "9 9 bracket-level-1"
+)
index 68683e5..413394f 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
+
 BUFFER='echo $(echo ${(z)array})'
 
 expected_region_highlight=(
-  "6  6  $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # (
-  "13 13 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # {
-  "14 14 $ZSH_HIGHLIGHT_STYLES[bracket-level-3]" # (
-  "16 16 $ZSH_HIGHLIGHT_STYLES[bracket-level-3]" # )
-  "22 22 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # }
-  "23 23 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # )
+  "7  7  bracket-level-1" # (
+  "14 14 bracket-level-2" # {
+  "15 15 bracket-level-3" # (
+  "17 17 bracket-level-3" # )
+  "23 23 bracket-level-2" # }
+  "24 24 bracket-level-1" # )
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-quote.zsh b/.zsh/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-quote.zsh
new file mode 100644 (file)
index 0000000..8febae8
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+
+BUFFER=': "\"{x"'
+
+expected_region_highlight=(
+  "3 9 NONE 'issue #303'"
+)
index 2589010..5c3dcea 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
@@ -31,5 +30,5 @@
 BUFFER='echo "foo ( bar"'
 
 expected_region_highlight=(
-"1  15 $ZSH_HIGHLIGHT_STYLES[none]" # We expect the brackets highlighter to do nothing 
+"1  16 NONE" # We expect the brackets highlighter to do nothing
 )
index cd9a759..186d0b9 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
 BUFFER='echo ({x})'
 
 expected_region_highlight=(
-  "5  5  $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # (
-  "6  6  $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # {
-  "8  8  $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # }
-  "9  9 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # )
+  "6  6  bracket-level-1" # (
+  "7  7  bracket-level-2" # {
+  "9  9  bracket-level-2" # }
+  "10 10 bracket-level-1" # )
 )
index 879c618..941d092 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
 BUFFER='echo ({x}'
 
 expected_region_highlight=(
-  "5  5  $ZSH_HIGHLIGHT_STYLES[bracket-error]" # (
-  "6  6  $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # {
-  "8  8  $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # }
+  "6  6  bracket-error" # (
+  "7  7  bracket-level-2" # {
+  "9  9  bracket-level-2" # }
 )
index c6534ef..41b6836 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+
 BUFFER='echo {x})'
 
 expected_region_highlight=(
-  "5  5  $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # {
-  "7  7  $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # }
-  "8  8 $ZSH_HIGHLIGHT_STYLES[bracket-error]" # )
+  "6  6  bracket-level-1" # {
+  "8  8  bracket-level-1" # }
+  "9  9 bracket-error" # )
 )
index d28ac19..7295fd1 100644 (file)
@@ -1,24 +1,22 @@
 zsh-syntax-highlighting / highlighters / cursor
-=================================================
+-----------------------------------------------
 
-This is the ***cursor*** highlighter, that highlights the cursor.
+This is the `cursor` highlighter, that highlights the cursor.
 
 
-How to activate it
-------------------
-To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`:
+### How to tweak it
 
-    ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] cursor)
-
-
-How to tweak it
----------------
 This highlighter defines the following styles:
 
 * `cursor` - the style for the current cursor position
 
-To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`:
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
 
     ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue'
 
-The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135).
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
index b5868a4..81633a3 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
 : ${ZSH_HIGHLIGHT_STYLES[cursor]:=standout}
 
 # Whether the cursor highlighter should be called or not.
-_zsh_highlight_cursor_highlighter_predicate()
+_zsh_highlight_highlighter_cursor_predicate()
 {
-  _zsh_highlight_cursor_moved
+  # remove cursor highlighting when the line is finished
+  [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved
 }
 
 # Cursor highlighting function.
-_zsh_highlight_cursor_highlighter()
+_zsh_highlight_highlighter_cursor_paint()
 {
-  region_highlight+=("$CURSOR $(( $CURSOR + 1 )) $ZSH_HIGHLIGHT_STYLES[cursor]")
+  [[ $WIDGET == zle-line-finish ]] && return
+  
+  _zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor
 }
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/line/README.md b/.zsh/zsh-syntax-highlighting/highlighters/line/README.md
new file mode 120000 (symlink)
index 0000000..052fe20
--- /dev/null
@@ -0,0 +1 @@
+../../docs/highlighters/line.md
\ No newline at end of file
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh b/.zsh/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh
new file mode 100644 (file)
index 0000000..f922dc9
--- /dev/null
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 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
+# -------------------------------------------------------------------------------------------------
+
+
+# Define default styles.
+: ${ZSH_HIGHLIGHT_STYLES[line]:=}
+
+# Whether the root highlighter should be called or not.
+_zsh_highlight_highlighter_line_predicate()
+{
+  _zsh_highlight_buffer_modified
+}
+
+# root highlighting function.
+_zsh_highlight_highlighter_line_paint()
+{
+  _zsh_highlight_add_highlight 0 $#BUFFER line
+}
index 6900bfb..bf83820 100644 (file)
@@ -1,7 +1,7 @@
 zsh-syntax-highlighting / highlighters / main
-=============================================
+---------------------------------------------
 
-This is the ***main*** highlighter, that highlights:
+This is the `main` highlighter, that highlights:
 
 * Commands
 * Options
@@ -9,42 +9,49 @@ This is the ***main*** highlighter, that highlights:
 * Paths
 * Strings
 
-How to activate it
-------------------
-To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`:
-
-    ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] main)
-
 This highlighter is active by default.
 
 
-How to tweak it
----------------
+### How to tweak it
+
 This highlighter defines the following styles:
 
 * `unknown-token` - unknown tokens / errors
-* `reserved-word` - shell reserved words
+* `reserved-word` - shell reserved words (`if`, `for`)
 * `alias` - aliases
-* `builtin` - shell builtin commands
-* `function` - functions
-* `command` - commands
-* `precommand` - precommands (i.e. exec, builtin, ...)
-* `commandseparator` - command separation tokens
+* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer)
+* `builtin` - shell builtin commands (`shift`, `pwd`, `zstyle`)
+* `function` - function names
+* `command` - command names
+* `precommand` - precommand modifiers (e.g., `noglob`, `builtin`)
+* `commandseparator` - command separation tokens (`;`, `&&`)
 * `hashed-command` - hashed commands
-* `path` - paths
-* `globbing` - globbing expressions
-* `history-expansion` - history expansion expressions
-* `single-hyphen-option` - single hyphen options
-* `double-hyphen-option` - double hyphen options
-* `back-quoted-argument` - backquoted expressions
-* `single-quoted-argument` - single quoted arguments
-* `double-quoted-argument` - double quoted arguments
-* `dollar-double-quoted-argument` -  dollar double quoted arguments
-* `back-double-quoted-argument` -  back double quoted arguments
-* `assign` - variable assignments
-* `default` - parts of the buffer that do not match anything
-
-To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`:
+* `path` - existing filenames
+* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default)
+* `path_prefix` - prefixes of existing filenames
+* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default)
+* `globbing` - globbing expressions (`*.txt`)
+* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`)
+* `single-hyphen-option` - single hyphen options (`-o`)
+* `double-hyphen-option` - double hyphen options (`--option`)
+* `back-quoted-argument` - backquoted expressions (`` `foo` ``)
+* `single-quoted-argument` - single quoted arguments (`` 'foo' ``)
+* `double-quoted-argument` - double quoted arguments (`` "foo" ``)
+* `dollar-quoted-argument` - dollar quoted arguments (`` $'foo' ``)
+* `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`)
+* `back-double-quoted-argument` -  back double quoted arguments (`\x` inside `""`)
+* `back-dollar-quoted-argument` -  back dollar quoted arguments (`\x` inside `$''`)
+* `assign` - parameter assignments
+* `redirection` - redirection operators (`<`, `>`, etc)
+* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`)
+* `arg0` - a command word other than one of those enumrated above (other than a command, precommand, alias, function, or shell builtin command).
+* `default` - everything else
+
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
+
+    # Declare the variable
+    typeset -A ZSH_HIGHLIGHT_STYLES
 
     # To differentiate aliases from other command types
     ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold'
@@ -55,4 +62,30 @@ To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for
     # To disable highlighting of globbing expressions
     ZSH_HIGHLIGHT_STYLES[globbing]='none'
 
-The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135).
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+### Useless trivia
+
+#### Forward compatibility.
+
+zsh-syntax-highlighting attempts to be forward-compatible with zsh.
+Specifically, we attempt to facilitate highlighting _command word_ types that
+had not yet been invented when this version of zsh-syntax-highlighting was
+released.
+
+A _command word_ is something like a function name, external command name, et
+cetera.  (See
+[Simple Commands & Pipelines in `zshmisc(1)`][zshmisc-Simple-Commands-And-Pipelines]
+for a formal definition.)
+
+If a new _kind_ of command word is ever added to zsh — something conceptually
+different than "function" and "alias" and "external command" — then command words
+of that (new) kind will be highlighted by the style `arg0_$kind`,
+where `$kind` is the output of `type -w` on the new kind of command word.  If that
+style is not defined, then the style `arg0` will be used instead.
+
+[zshmisc-Simple-Commands-And-Pipelines]: http://zsh.sourceforge.net/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines
+
+[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
old mode 100755 (executable)
new mode 100644 (file)
index be1d0a9..617f820
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 : ${ZSH_HIGHLIGHT_STYLES[default]:=none}
 : ${ZSH_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold}
 : ${ZSH_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow}
-: ${ZSH_HIGHLIGHT_STYLES[alias]:=fg=green}
-: ${ZSH_HIGHLIGHT_STYLES[builtin]:=fg=green}
-: ${ZSH_HIGHLIGHT_STYLES[function]:=fg=green}
-: ${ZSH_HIGHLIGHT_STYLES[command]:=fg=green}
+: ${ZSH_HIGHLIGHT_STYLES[suffix-alias]:=fg=green,underline}
 : ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline}
 : ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none}
-: ${ZSH_HIGHLIGHT_STYLES[hashed-command]:=fg=green}
 : ${ZSH_HIGHLIGHT_STYLES[path]:=underline}
+: ${ZSH_HIGHLIGHT_STYLES[path_pathseparator]:=}
+: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=}
 : ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue}
 : ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue}
 : ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none}
 : ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none}
 : ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow}
 : ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow}
+: ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow}
 : ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan}
 : ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan}
+: ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan}
 : ${ZSH_HIGHLIGHT_STYLES[assign]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[redirection]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold}
+: ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green}
 
 # Whether the highlighter should be called or not.
-_zsh_highlight_main_highlighter_predicate()
+_zsh_highlight_highlighter_main_predicate()
 {
-  _zsh_highlight_buffer_modified
+  # may need to remove path_prefix highlighting when the line ends
+  [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified
+}
+
+# Helper to deal with tokens crossing line boundaries.
+_zsh_highlight_main_add_region_highlight() {
+  integer start=$1 end=$2
+  shift 2
+
+  if (( $+argv[2] )); then
+    # Caller specified inheritance explicitly.
+  else
+    # Automate inheritance.
+    typeset -A fallback_of; fallback_of=(
+        alias arg0
+        suffix-alias arg0
+        builtin arg0
+        function arg0
+        command arg0
+        precommand arg0
+        hashed-command arg0
+        
+        path_prefix path
+        # The path separator fallback won't ever be used, due to the optimisation
+        # in _zsh_highlight_main_highlighter_highlight_path_separators().
+        path_pathseparator path
+        path_prefix_pathseparator path_prefix
+    )
+    local needle=$1 value
+    while [[ -n ${value::=$fallback_of[$needle]} ]]; do
+      unset "fallback_of[$needle]" # paranoia against infinite loops
+      argv+=($value)
+      needle=$value
+    done
+  fi
+
+  # The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is
+  # relative to $BUFFER.
+  (( start -= $#PREBUFFER ))
+  (( end -= $#PREBUFFER ))
+
+  (( end < 0 )) && return # having end<0 would be a bug
+  (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings
+  _zsh_highlight_add_highlight $start $end "$@"
+}
+
+# Get the type of a command.
+#
+# Uses the zsh/parameter module if available to avoid forks, and a
+# wrapper around 'type -w' as fallback.
+#
+# Takes a single argument.
+#
+# The result will be stored in REPLY.
+_zsh_highlight_main__type() {
+  if (( $+_zsh_highlight_main__command_type_cache )); then
+    REPLY=$_zsh_highlight_main__command_type_cache[(e)$1]
+    if [[ -n "$REPLY" ]]; then
+      return
+    fi
+  fi
+  if (( $#options_to_set )); then
+    setopt localoptions $options_to_set;
+  fi
+  unset REPLY
+  if zmodload -e zsh/parameter; then
+    if (( $+aliases[(e)$1] )); then
+      REPLY=alias
+    elif (( $+saliases[(e)${1##*.}] )); then
+      REPLY='suffix alias'
+    elif (( $reswords[(Ie)$1] )); then
+      REPLY=reserved
+    elif (( $+functions[(e)$1] )); then
+      REPLY=function
+    elif (( $+builtins[(e)$1] )); then
+      REPLY=builtin
+    elif (( $+commands[(e)$1] )); then
+      REPLY=command
+    # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly
+    # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo
+    # exists and is in $PATH).  Avoid triggering the bug, at the expense of
+    # falling through to the $() below, incurring a fork.  (Issue #354.)
+    #
+    # The first disjunct mimics the isrelative() C call from the zsh bug.
+    elif {  [[ $1 != */* ]] || is-at-least 5.3 } &&
+         ! builtin type -w -- $1 >/dev/null 2>&1; then
+      REPLY=none
+    fi
+  fi
+  if ! (( $+REPLY )); then
+    REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }"
+  fi
+  if (( $+_zsh_highlight_main__command_type_cache )); then
+    _zsh_highlight_main__command_type_cache[(e)$1]=$REPLY
+  fi
+}
+
+# Check whether the first argument is a redirection operator token.
+# Report result via the exit code.
+_zsh_highlight_main__is_redirection() {
+  # A redirection operator token:
+  # - starts with an optional single-digit number;
+  # - then, has a '<' or '>' character;
+  # - is not a process substitution [<(...) or >(...)].
+  [[ $1 == (<0-9>|)(\<|\>)* ]] && [[ $1 != (\<|\>)$'\x28'* ]]
+}
+
+# Resolve alias.
+#
+# Takes a single argument.
+#
+# The result will be stored in REPLY.
+_zsh_highlight_main__resolve_alias() {
+  if zmodload -e zsh/parameter; then
+    REPLY=${aliases[$arg]}
+  else
+    REPLY="${"$(alias -- $arg)"#*=}"
+  fi
+}
+
+# Check that the top of $braces_stack has the expected value.  If it does, set
+# the style according to $2; otherwise, set style=unknown-token.
+#
+# $1: character expected to be at the top of $braces_stack
+# $2: assignment to execute it if matches
+_zsh_highlight_main__stack_pop() {
+  if [[ $braces_stack[1] == $1 ]]; then
+    braces_stack=${braces_stack:1}
+    eval "$2"
+  else
+    style=unknown-token
+  fi
 }
 
 # Main syntax highlighting function.
-_zsh_highlight_main_highlighter()
+_zsh_highlight_highlighter_main_paint()
 {
-  emulate -L zsh 
+  ## Before we even 'emulate -L', we must test a few options that would reset.
+  if [[ -o interactive_comments ]]; then
+    local interactive_comments= # set to empty
+  fi
+  if [[ -o ignore_braces ]] || eval '[[ -o ignore_close_braces ]] 2>/dev/null'; then
+    local right_brace_is_recognised_everywhere=false
+  else
+    local right_brace_is_recognised_everywhere=true
+  fi
+  if [[ -o path_dirs ]]; then
+    integer path_dirs_was_set=1
+  else
+    integer path_dirs_was_set=0
+  fi
+  if [[ -o multi_func_def ]]; then
+    integer multi_func_def=1
+  else
+    integer multi_func_def=0
+  fi
+  emulate -L zsh
   setopt localoptions extendedglob bareglobqual
-  local start_pos=0 end_pos highlight_glob=true new_expression=true arg style
+
+  # At the PS3 prompt and in vared, highlight nothing.
+  #
+  # (We can't check this in _zsh_highlight_highlighter_main_predicate because
+  # if the predicate returns false, the previous value of region_highlight
+  # would be reused.)
+  if [[ $CONTEXT == (select|vared) ]]; then
+    return
+  fi
+
+  ## Variable declarations and initializations
+  local start_pos=0 end_pos highlight_glob=true arg style
+  local in_array_assignment=false # true between 'a=(' and the matching ')'
   typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR
   typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS
-  typeset -a ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS
-  region_highlight=()
+  typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW
+  local -a options_to_set # used in callees
+  local buf="$PREBUFFER$BUFFER"
+  integer len="${#buf}"
+  integer pure_buf_len=$(( len - ${#PREBUFFER} ))   # == $#BUFFER, used e.g. in *_check_path
+
+  # "R" for round
+  # "Q" for square
+  # "Y" for curly
+  # "D" for do/done
+  # "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while)
+  local braces_stack
+
+  if (( path_dirs_was_set )); then
+    options_to_set+=( PATH_DIRS )
+  fi
+  unset path_dirs_was_set
 
   ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=(
     '|' '||' ';' '&' '&&'
+    '|&'
+    '&!' '&|'
+    # ### 'case' syntax, but followed by a pattern, not by a command
+    # ';;' ';&' ';|'
   )
   ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS=(
-    'builtin' 'command' 'exec' 'nocorrect' 'noglob' 'sudo'
+    'builtin' 'command' 'exec' 'nocorrect' 'noglob'
+    'pkexec' # immune to #121 because it's usually not passed --option flags
   )
-  # Tokens that are always immediately followed by a command.
-  ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS=(
-    $ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR $ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS
+
+  # Tokens that, at (naively-determined) "command position", are followed by
+  # a de jure command position.  All of these are reserved words.
+  ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW=(
+    $'\x7b' # block
+    $'\x28' # subshell
+    '()' # anonymous function
+    'while'
+    'until'
+    'if'
+    'then'
+    'elif'
+    'else'
+    'do'
+    'time'
+    'coproc'
+    '!' # reserved word; unrelated to $histchars[1]
   )
 
-  for arg in ${(z)BUFFER}; do
-    local substr_color=0
-    [[ $start_pos -eq 0 && $arg = 'noglob' ]] && highlight_glob=false
-    ((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]##[[:space:]]#}}))
-    ((end_pos=$start_pos+${#arg}))
-    if $new_expression; then
-      new_expression=false
+  local -a match mbegin mend
+
+  # State machine
+  #
+  # The states are:
+  # - :start:      Command word
+  # - :sudo_opt:   A leading-dash option to sudo (such as "-u" or "-i")
+  # - :sudo_arg:   The argument to a sudo leading-dash option that takes one,
+  #                when given as a separate word; i.e., "foo" in "-u foo" (two
+  #                words) but not in "-ufoo" (one word).
+  # - :regular:    "Not a command word", and command delimiters are permitted.
+  #                Mainly used to detect premature termination of commands.
+  # - :always:     The word 'always' in the «{ foo } always { bar }» syntax.
+  #
+  # When the kind of a word is not yet known, $this_word / $next_word may contain
+  # multiple states.  For example, after "sudo -i", the next word may be either
+  # another --flag or a command name, hence the state would include both :start:
+  # and :sudo_opt:.
+  #
+  # The tokens are always added with both leading and trailing colons to serve as
+  # word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/} 
+  # will DTRT regardless of how many elements or repetitions $x has..
+  #
+  # Handling of redirections: upon seeing a redirection token, we must stall
+  # the current state --- that is, the value of $this_word --- for two iterations
+  # (one for the redirection operator, one for the word following it representing
+  # the redirection target).  Therefore, we set $in_redirection to 2 upon seeing a
+  # redirection operator, decrement it each iteration, and stall the current state
+  # when it is non-zero.  Thus, upon reaching the next word (the one that follows
+  # the redirection operator and target), $this_word will still contain values
+  # appropriate for the word immediately following the word that preceded the
+  # redirection operator.
+  #
+  # The "the previous word was a redirection operator" state is not communicated
+  # to the next iteration via $next_word/$this_word as usual, but via
+  # $in_redirection.  The value of $next_word from the iteration that processed
+  # the operator is discarded.
+  #
+  local this_word=':start:' next_word
+  integer in_redirection
+  # Processing buffer
+  local proc_buf="$buf"
+  for arg in ${interactive_comments-${(z)buf}} \
+             ${interactive_comments+${(zZ+c+)buf}}; do
+    # Initialize $next_word.
+    if (( in_redirection )); then
+      (( --in_redirection ))
+    fi
+    if (( in_redirection == 0 )); then
+      # Initialize $next_word to its default value.
+      next_word=':regular:'
+    else
+      # Stall $next_word.
+    fi
+
+    # Initialize per-"simple command" [zshmisc(1)] variables:
+    #
+    #   $already_added       (see next paragraph)
+    #   $style               how to highlight $arg
+    #   $in_array_assignment boolean flag for "between '(' and ')' of array assignment"
+    #   $highlight_glob      boolean flag for "'noglob' is in effect"
+    #
+    # $already_added is set to 1 to disable adding an entry to region_highlight
+    # for this iteration.  Currently, that is done for "" and $'' strings,
+    # which add the entry early so escape sequences within the string override
+    # the string's color.
+    integer already_added=0
+    style=unknown-token
+    if [[ $this_word == *':start:'* ]]; then
+      in_array_assignment=false
+      if [[ $arg == 'noglob' ]]; then
+        highlight_glob=false
+      fi
+    fi
+
+    # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf.
+    if [[ $arg == ';' ]] ; then
+      # We're looking for either a semicolon or a newline, whichever comes
+      # first.  Both of these are rendered as a ";" (SEPER) by the ${(z)..}
+      # flag.
+      #
+      # We can't use the (Z+n+) flag because that elides the end-of-command
+      # token altogether, so 'echo foo\necho bar' (two commands) becomes
+      # indistinguishable from 'echo foo echo bar' (one command with three
+      # words for arguments).
+      local needle=$'[;\n]'
+      integer offset=$(( ${proc_buf[(i)$needle]} - 1 ))
+      (( start_pos += offset ))
+      (( end_pos = start_pos + $#arg ))
+    else
+      # The line was:
+      #
+      # integer offset=$(((len-start_pos)-${#${proc_buf##([[:space:]]|\\[[:space:]])#}}))
+      #
+      # - len-start_pos is length of current proc_buf; basically: initial length minus where
+      #   we are, and proc_buf is chopped to the "where we are" (compare the "previous value
+      #   of start_pos" below, and the len-(start_pos-offset) = len-start_pos+offset)
+      # - what's after main minus sign is: length of proc_buf without spaces at the beginning
+      # - so what the line actually did, was computing length of the spaces!
+      # - this can be done via (#b) flag, like below
+      if [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then
+          # The first, outer parenthesis
+          integer offset="${#match[1]}"
+      else
+          integer offset=0
+      fi
+      ((start_pos+=offset))
+      ((end_pos=$start_pos+${#arg}))
+    fi
+
+    # Compute the new $proc_buf. We advance it
+    # (chop off characters from the beginning)
+    # beyond what end_pos points to, by skipping
+    # as many characters as end_pos was advanced.
+    #
+    # end_pos was advanced by $offset (via start_pos)
+    # and by $#arg. Note the `start_pos=$end_pos`
+    # below.
+    #
+    # As for the [,len]. We could use [,len-start_pos+offset]
+    # here, but to make it easier on eyes, we use len and
+    # rely on the fact that Zsh simply handles that. The
+    # length of proc_buf is len-start_pos+offset because
+    # we're chopping it to match current start_pos, so its
+    # length matches the previous value of start_pos.
+    #
+    # Why [,-1] is slower than [,length] isn't clear.
+    proc_buf="${proc_buf[offset + $#arg + 1,len]}"
+
+    # Handle the INTERACTIVE_COMMENTS option.
+    #
+    # We use the (Z+c+) flag so the entire comment is presented as one token in $arg.
+    if [[ -n ${interactive_comments+'set'} && $arg[1] == $histchars[3] ]]; then
+      if [[ $this_word == *(':regular:'|':start:')* ]]; then
+        style=comment
+      else
+        style=unknown-token # prematurely terminated
+      fi
+      _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
+      already_added=1
+      start_pos=$end_pos
+      continue
+    fi
+
+    # Analyse the current word.
+    if _zsh_highlight_main__is_redirection $arg ; then
+      # A '<' or '>', possibly followed by a digit
+      in_redirection=2
+    fi
+
+    # Special-case the first word after 'sudo'.
+    if (( ! in_redirection )); then
+      if [[ $this_word == *':sudo_opt:'* ]] && [[ $arg != -* ]]; then
+        this_word=${this_word//:sudo_opt:/}
+      fi
+    fi
+
+    # Parse the sudo command line
+    if (( ! in_redirection )); then
+      if [[ $this_word == *':sudo_opt:'* ]]; then
+        case "$arg" in
+          # Flag that requires an argument
+          '-'[Cgprtu]) this_word=${this_word//:start:/};
+                       next_word=':sudo_arg:';;
+          # This prevents misbehavior with sudo -u -otherargument
+          '-'*)        this_word=${this_word//:start:/};
+                       next_word+=':start:';
+                       next_word+=':sudo_opt:';;
+          *)           ;;
+        esac
+      elif [[ $this_word == *':sudo_arg:'* ]]; then
+        next_word+=':sudo_opt:'
+        next_word+=':start:'
+      fi
+   fi
+
+   # The Great Fork: is this a command word?  Is this a non-command word?
+   if [[ $this_word == *':always:'* && $arg == 'always' ]]; then
+     # try-always construct
+     style=reserved-word # de facto a reserved word, although not de jure
+     next_word=':start:'
+   elif [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word
      if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then
-      style=$ZSH_HIGHLIGHT_STYLES[precommand]
+      style=precommand
+     elif [[ "$arg" = "sudo" ]]; then
+      style=precommand
+      next_word=${next_word//:regular:/}
+      next_word+=':sudo_opt:'
+      next_word+=':start:'
      else
-      res=$(LC_ALL=C builtin type -w $arg 2>/dev/null)
+      _zsh_highlight_main_highlighter_expand_path $arg
+      local expanded_arg="$REPLY"
+      _zsh_highlight_main__type ${expanded_arg}
+      local res="$REPLY"
+      () {
+        # Special-case: command word is '$foo', like that, without braces or anything.
+        #
+        # That's not entirely correct --- if the parameter's value happens to be a reserved
+        # word, the parameter expansion will be highlighted as a reserved word --- but that
+        # incorrectness is outweighed by the usability improvement of permitting the use of
+        # parameters that refer to commands, functions, and builtins.
+        local -a match mbegin mend
+        local MATCH; integer MBEGIN MEND
+        if [[ $res == none ]] && (( ${+parameters} )) &&
+           [[ ${arg[1]} == \$ ]] && [[ ${arg:1} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+)$ ]] &&
+           (( ${+parameters[${MATCH}]} ))
+           then
+          _zsh_highlight_main__type ${(P)MATCH}
+          res=$REPLY
+        fi
+      }
       case $res in
-        *': reserved')  style=$ZSH_HIGHLIGHT_STYLES[reserved-word];;
-        *': alias')     style=$ZSH_HIGHLIGHT_STYLES[alias]
-                        local aliased_command="${"$(alias $arg)"#*=}"
-                        [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS:#"$aliased_command"} && -z ${(M)ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS:#"$arg"} ]] && ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS+=($arg)
+        reserved)       # reserved word
+                        style=reserved-word
+                        case $arg in
+                          ($'\x7b')
+                            braces_stack='Y'"$braces_stack"
+                            ;;
+                          ($'\x7d')
+                            # We're at command word, so no need to check $right_brace_is_recognised_everywhere
+                            _zsh_highlight_main__stack_pop 'Y' style=reserved-word
+                            if [[ $style == reserved-word ]]; then
+                              next_word+=':always:'
+                            fi
+                            ;;
+                          ('do')
+                            braces_stack='D'"$braces_stack"
+                            ;;
+                          ('done')
+                            _zsh_highlight_main__stack_pop 'D' style=reserved-word
+                            ;;
+                          ('foreach')
+                            braces_stack='$'"$braces_stack"
+                            ;;
+                          ('end')
+                            _zsh_highlight_main__stack_pop '$' style=reserved-word
+                            ;;
+                        esac
+                        ;;
+        'suffix alias') style=suffix-alias;;
+        alias)          () {
+                          integer insane_alias
+                          case $arg in 
+                            # Issue #263: aliases with '=' on their LHS.
+                            #
+                            # There are three cases:
+                            #
+                            # - Unsupported, breaks 'alias -L' output, but invokable:
+                            ('='*) :;;
+                            # - Unsupported, not invokable:
+                            (*'='*) insane_alias=1;;
+                            # - The common case:
+                            (*) :;;
+                          esac
+                          if (( insane_alias )); then
+                            style=unknown-token
+                          else
+                            style=alias
+                            _zsh_highlight_main__resolve_alias $arg
+                            local alias_target="$REPLY"
+                            [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$alias_target"} && -z ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]] && ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS+=($arg)
+                          fi
+                        }
                         ;;
-        *': builtin')   style=$ZSH_HIGHLIGHT_STYLES[builtin];;
-        *': function')  style=$ZSH_HIGHLIGHT_STYLES[function];;
-        *': command')   style=$ZSH_HIGHLIGHT_STYLES[command];;
-        *': hashed')    style=$ZSH_HIGHLIGHT_STYLES[hashed-command];;
-        *)              if _zsh_highlight_main_highlighter_check_assign; then
-                          style=$ZSH_HIGHLIGHT_STYLES[assign]
-                          new_expression=true
-                        elif _zsh_highlight_main_highlighter_check_path; then
-                          style=$ZSH_HIGHLIGHT_STYLES[path]
-                        elif [[ $arg[0,1] = $histchars[0,1] ]]; then
-                          style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
+        builtin)        style=builtin;;
+        function)       style=function;;
+        command)        style=command;;
+        hashed)         style=hashed-command;;
+        none)           if _zsh_highlight_main_highlighter_check_assign; then
+                          style=assign
+                          if [[ $arg[-1] == '(' ]]; then
+                            in_array_assignment=true
+                          else
+                            # assignment to a scalar parameter.
+                            # (For array assignments, the command doesn't start until the ")" token.)
+                            next_word+=':start:'
+                          fi
+                        elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then
+                          style=history-expansion
+                        elif [[ $arg[0,1] == $histchars[2,2] ]]; then
+                          style=history-expansion
+                        elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
+                          if [[ $this_word == *':regular:'* ]]; then
+                            # This highlights empty commands (semicolon follows nothing) as an error.
+                            # Zsh accepts them, though.
+                            style=commandseparator
+                          else
+                            style=unknown-token
+                          fi
+                        elif (( in_redirection == 2 )); then
+                          style=redirection
+                        elif [[ $arg[1,2] == '((' ]]; then
+                          # Arithmetic evaluation.
+                          #
+                          # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...}
+                          # splitter would only output the '((' token if the matching '))' had
+                          # been typed.  Therefore, under those versions of zsh, BUFFER="(( 42"
+                          # would be highlighted as an error until the matching "))" are typed.
+                          #
+                          # We highlight just the opening parentheses, as a reserved word; this
+                          # is how [[ ... ]] is highlighted, too.
+                          style=reserved-word
+                          _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) $style
+                          already_added=1
+                          if [[ $arg[-2,-1] == '))' ]]; then
+                            _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos $style
+                            already_added=1
+                          fi
+                        elif [[ $arg == '()' ]]; then
+                          # anonymous function
+                          style=reserved-word
+                        elif [[ $arg == $'\x28' ]]; then
+                          # subshell
+                          style=reserved-word
+                          braces_stack='R'"$braces_stack"
+                        elif [[ $arg == $'\x29' ]]; then
+                          # end of subshell
+                          _zsh_highlight_main__stack_pop 'R' style=reserved-word
                         else
-                          style=$ZSH_HIGHLIGHT_STYLES[unknown-token]
+                          if _zsh_highlight_main_highlighter_check_path; then
+                            style=$REPLY
+                          else
+                            style=unknown-token
+                          fi
                         fi
                         ;;
+        *)              _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res arg0
+                        already_added=1
+                        ;;
       esac
      fi
-    else
+   fi
+   if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath
+      { (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] }
+   then # $arg is a non-command word
       case $arg in
-        '--'*)   style=$ZSH_HIGHLIGHT_STYLES[double-hyphen-option];;
-        '-'*)    style=$ZSH_HIGHLIGHT_STYLES[single-hyphen-option];;
-        "'"*"'") style=$ZSH_HIGHLIGHT_STYLES[single-quoted-argument];;
-        '"'*'"') style=$ZSH_HIGHLIGHT_STYLES[double-quoted-argument]
-                 region_highlight+=("$start_pos $end_pos $style")
+        $'\x29') # subshell or end of array assignment
+                 if $in_array_assignment; then
+                   style=assign
+                   in_array_assignment=false
+                   next_word+=':start:'
+                 else
+                   _zsh_highlight_main__stack_pop 'R' style=reserved-word
+                 fi;;
+        $'\x28\x29') # possibly a function definition
+                 if (( multi_func_def )) || false # TODO: or if the previous word was a command word
+                 then
+                   next_word+=':start:'
+                 fi
+                 style=reserved-word
+                 ;;
+        $'\x7d') # right brace
+                 #
+                 # Parsing rule: # {
+                 #
+                 #     Additionally, `tt(})' is recognized in any position if neither the
+                 #     tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set."""
+                 if $right_brace_is_recognised_everywhere; then
+                   _zsh_highlight_main__stack_pop 'Y' style=reserved-word
+                   if [[ $style == reserved-word ]]; then
+                     next_word+=':always:'
+                   fi
+                 else
+                   # Fall through to the catchall case at the end.
+                 fi
+                 ;|
+        '--'*)   style=double-hyphen-option;;
+        '-'*)    style=single-hyphen-option;;
+        "'"*)    style=single-quoted-argument;;
+        '"'*)    style=double-quoted-argument
+                 _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
                  _zsh_highlight_main_highlighter_highlight_string
-                 substr_color=1
+                 already_added=1
+                 ;;
+        \$\'*)   style=dollar-quoted-argument
+                 _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
+                 _zsh_highlight_main_highlighter_highlight_dollar_string
+                 already_added=1
                  ;;
-        '`'*'`') style=$ZSH_HIGHLIGHT_STYLES[back-quoted-argument];;
-        *"*"*)   $highlight_glob && style=$ZSH_HIGHLIGHT_STYLES[globbing] || style=$ZSH_HIGHLIGHT_STYLES[default];;
-        *)       if _zsh_highlight_main_highlighter_check_path; then
-                   style=$ZSH_HIGHLIGHT_STYLES[path]
-                 elif [[ $arg[0,1] = $histchars[0,1] ]]; then
-                   style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
+        '`'*)    style=back-quoted-argument;;
+        [*?]*|*[^\\][*?]*)
+                 $highlight_glob && style=globbing || style=default;;
+        *)       if false; then
+                 elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then
+                   # was handled by the $'\x7d' case above
+                 elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then
+                   style=history-expansion
                  elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
-                   style=$ZSH_HIGHLIGHT_STYLES[commandseparator]
+                   if [[ $this_word == *':regular:'* ]]; then
+                     style=commandseparator
+                   else
+                     style=unknown-token
+                   fi
+                 elif (( in_redirection == 2 )); then
+                   style=redirection
                  else
-                   style=$ZSH_HIGHLIGHT_STYLES[default]
+                   if _zsh_highlight_main_highlighter_check_path; then
+                     style=$REPLY
+                   else
+                     style=default
+                   fi
                  fi
                  ;;
       esac
     fi
-    [[ $substr_color = 0 ]] && region_highlight+=("$start_pos $end_pos $style")
-    [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS:#"$arg"} ]] && new_expression=true
+    if ! (( already_added )); then
+      _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
+      [[ $style == path || $style == path_prefix ]] && _zsh_highlight_main_highlighter_highlight_path_separators
+    fi
+    if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
+      if [[ $arg == ';' ]] && $in_array_assignment; then
+        # literal newline inside an array assignment
+        next_word=':regular:'
+      else
+        next_word=':start:'
+        highlight_glob=true
+      fi
+    elif
+       [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} && $this_word == *':start:'* ]] ||
+       [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} && $this_word == *':start:'* ]]; then
+      next_word=':start:'
+    elif [[ $arg == "repeat" && $this_word == *':start:'* ]]; then
+      # skip the repeat-count word
+      in_redirection=2
+      # The redirection mechanism assumes $this_word describes the word
+      # following the redirection.  Make it so.
+      #
+      # That word can be a command word with shortloops (`repeat 2 ls`)
+      # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`).
+      #
+      # The repeat-count word will be handled like a redirection target.
+      this_word=':start::regular:'
+    fi
     start_pos=$end_pos
+    if (( in_redirection == 0 )); then
+      # This is the default/common codepath.
+      this_word=$next_word
+    else
+      # Stall $this_word.
+    fi
   done
 }
 
-# Check if the argument is variable assignment
+# Check if $arg is variable assignment
 _zsh_highlight_main_highlighter_check_assign()
 {
     setopt localoptions extended_glob
-    [[ ${(Q)arg} == [[:alpha:]_]([[:alnum:]_])#=* ]]
+    [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] ||
+      [[ $arg == [0-9]##(|[+])=* ]]
+}
+
+_zsh_highlight_main_highlighter_highlight_path_separators()
+{
+  local pos style_pathsep
+  style_pathsep=${style}_pathseparator
+  [[ -z "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" || "$ZSH_HIGHLIGHT_STYLES[$style]" == "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0
+  for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do
+    if [[ $BUFFER[pos] == / ]]; then
+      _zsh_highlight_main_add_region_highlight $((pos - 1)) $pos $style_pathsep
+    fi
+  done
 }
 
-# Check if the argument is a path.
+# Check if $arg is a path.
+# If yes, return 0 and in $REPLY the style to use.
+# Else, return non-zero (and the contents of $REPLY is undefined).
 _zsh_highlight_main_highlighter_check_path()
 {
-  setopt localoptions nonomatch
-  local expanded_path; : ${expanded_path:=${(Q)~arg}}
+  _zsh_highlight_main_highlighter_expand_path $arg;
+  local expanded_path="$REPLY"
+
+  REPLY=path
+
   [[ -z $expanded_path ]] && return 1
+  [[ -L $expanded_path ]] && return 0
   [[ -e $expanded_path ]] && return 0
-  [[ ! -e ${expanded_path:h} ]] && return 1
-  [[ ${BUFFER[1]} != "-" && ${#BUFFER} == $end_pos && -n $(print ${expanded_path}*(N)) ]] && return 0
+
+  # Search the path in CDPATH
+  local cdpath_dir
+  for cdpath_dir in $cdpath ; do
+    [[ -e "$cdpath_dir/$expanded_path" ]] && return 0
+  done
+
+  # If dirname($arg) doesn't exist, neither does $arg.
+  [[ ! -d ${expanded_path:h} ]] && return 1
+
+  # If this word ends the buffer, check if it's the prefix of a valid path.
+  if [[ ${BUFFER[1]} != "-" && $pure_buf_len == $end_pos ]] &&
+     [[ $WIDGET != zle-line-finish ]]; then
+    local -a tmp
+    tmp=( ${expanded_path}*(N) )
+    (( $#tmp > 0 )) && REPLY=path_prefix && return 0
+  fi
+
+  # It's not a path.
   return 1
 }
 
@@ -167,19 +780,122 @@ _zsh_highlight_main_highlighter_check_path()
 _zsh_highlight_main_highlighter_highlight_string()
 {
   setopt localoptions noksharrays
+  local -a match mbegin mend
+  local MATCH; integer MBEGIN MEND
   local i j k style
   # Starting quote is at 1, so start parsing at offset 2 in the string.
   for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do
     (( j = i + start_pos - 1 ))
     (( k = j + 1 ))
     case "$arg[$i]" in
-      '$')  style=$ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument];;
-      "\\") style=$ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]
-            (( k += 1 )) # Color following char too.
-            (( i += 1 )) # Skip parsing the escaped char.
+      '$' ) style=dollar-double-quoted-argument
+            # Look for an alphanumeric parameter name.
+            if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then
+              (( k += $#MATCH )) # highlight the parameter name
+              (( i += $#MATCH )) # skip past it
+            elif [[ ${arg:$i} =~ ^[{]([A-Za-z_][A-Za-z0-9_]*|[0-9]+)[}] ]] ; then
+              (( k += $#MATCH )) # highlight the parameter name and braces
+              (( i += $#MATCH )) # skip past it
+            elif [[ $arg[i+1] == '$' ]]; then
+              # $$ - pid
+              (( k += 1 )) # highlight both dollar signs
+              (( i += 1 )) # don't consider the second one as introducing another parameter expansion
+            elif [[ $arg[i+1] == [-#*@?] ]]; then
+              # $#, $*, $@, $?, $- - like $$ above
+              (( k += 1 )) # highlight both dollar signs
+              (( i += 1 )) # don't consider the second one as introducing another parameter expansion
+            elif [[ $arg[i+1] == $'\x28' ]]; then
+              # Highlight just the '$'.
+            else
+              continue
+            fi
+            ;;
+      "\\") style=back-double-quoted-argument
+            if [[ \\\`\"\$${histchars[1]} == *$arg[$i+1]* ]]; then
+              (( k += 1 )) # Color following char too.
+              (( i += 1 )) # Skip parsing the escaped char.
+            else
+              continue
+            fi
+            ;;
+      *) continue ;;
+
+    esac
+    _zsh_highlight_main_add_region_highlight $j $k $style
+  done
+}
+
+# Highlight special chars inside dollar-quoted strings
+_zsh_highlight_main_highlighter_highlight_dollar_string()
+{
+  setopt localoptions noksharrays
+  local -a match mbegin mend
+  local MATCH; integer MBEGIN MEND
+  local i j k style
+  local AA
+  integer c
+  # Starting dollar-quote is at 1:2, so start parsing at offset 3 in the string.
+  for (( i = 3 ; i < end_pos - start_pos ; i += 1 )) ; do
+    (( j = i + start_pos - 1 ))
+    (( k = j + 1 ))
+    case "$arg[$i]" in
+      "\\") style=back-dollar-quoted-argument
+            for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do
+              [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break
+            done
+            AA=$arg[$i+1,$c-1]
+            # Matching for HEX and OCT values like \0xA6, \xA6 or \012
+            if [[    "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}"
+                  || "$AA" =~ "^[0-7]{1,3}"
+                  || "$AA" =~ "^u[0-9a-fA-F]{1,4}"
+                  || "$AA" =~ "^U[0-9a-fA-F]{1,8}"
+               ]]; then
+              (( k += $#MATCH ))
+              (( i += $#MATCH ))
+            else
+              if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then
+                # \x not followed by hex digits is probably an error
+                style=unknown-token
+              fi
+              (( k += 1 )) # Color following char too.
+              (( i += 1 )) # Skip parsing the escaped char.
+            fi
             ;;
-      *)    continue;;
+      *) continue ;;
+
     esac
-    region_highlight+=("$j $k $style")
+    _zsh_highlight_main_add_region_highlight $j $k $style
   done
 }
+
+# Called with a single positional argument.
+# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value.
+#
+# Does not perform filename generation (globbing).
+_zsh_highlight_main_highlighter_expand_path()
+{
+  (( $# == 1 )) || print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_main_highlighter_expand_path: called without argument"
+
+  # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}.
+  setopt localoptions nonomatch
+  unset REPLY
+  : ${REPLY:=${(Q)~1}}
+}
+
+# -------------------------------------------------------------------------------------------------
+# Main highlighter initialization
+# -------------------------------------------------------------------------------------------------
+
+_zsh_highlight_main__precmd_hook() {
+  _zsh_highlight_main__command_type_cache=()
+}
+
+autoload -U add-zsh-hook
+if add-zsh-hook precmd _zsh_highlight_main__precmd_hook 2>/dev/null; then
+  # Initialize command type cache
+  typeset -gA _zsh_highlight_main__command_type_cache
+else
+  print -r -- >&2 'zsh-syntax-highlighting: Failed to load add-zsh-hook. Some speed optimizations will not be used.'
+  # Make sure the cache is unset
+  unset _zsh_highlight_main__command_type_cache
+fi
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh
new file mode 100644 (file)
index 0000000..cf5be75
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+# Issue #263 (more-pathological case): aliases[x=y]=z works; the ${(z)} splitter considers
+# that a single word; but it's not looked up as an alias.  Hence, highlight it as an error.
+aliases[x=y]='lorem ipsum dolor sit amet'
+BUFFER='x=y ls'
+
+expected_region_highlight=(
+  "1 3 unknown-token" # x=y
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh
new file mode 100644 (file)
index 0000000..5129614
--- /dev/null
@@ -0,0 +1,50 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+alias alias1="unused expansion"
+alias -s alias2="echo"
+alias1() {} # to check that it's highlighted as an alias, not as a function
+
+BUFFER='x.alias2; alias1'
+
+# Set expected_region_highlight as a function of zsh version.
+#
+# Highlight of suffix alias requires zsh-5.1.1 or newer; see issue #126,
+# and commit 36403 to zsh itself.  Therefore, check if the requisite zsh
+# functionality is present, and skip verifying suffix-alias highlighting
+# if it isn't.
+expected_region_highlight=()
+if [[ "$(type -w x.alias2)" == *suffix* ]]; then
+  expected_region_highlight+=(
+    "1 8 suffix-alias" # x.alias2
+  )
+fi
+expected_region_highlight+=(
+  "11 16 alias" # alias1
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh
new file mode 100644 (file)
index 0000000..ae40a72
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='{ ls } always { pwd }'
+
+expected_region_highlight=(
+  '1 1 reserved-word' # {
+  '3 4 command' # ls
+  '6 6 reserved-word' # }
+  '8 13 reserved-word' # always
+  '15 15 reserved-word' # {
+  '17 19 builtin' # pwd
+  '21 21 reserved-word' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh
new file mode 100644 (file)
index 0000000..f5852c6
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'{\nls\n} always { pwd }'
+
+expected_region_highlight=(
+  '1 1 reserved-word' # {
+  '2 2 unknown-token' # \n
+  '3 4 command' # ls
+  '5 5 commandseparator' # \n
+  '6 6 reserved-word' # }
+  '8 13 reserved-word' # always
+  '15 15 reserved-word' # {
+  '17 19 builtin' # pwd
+  '21 21 reserved-word' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh
new file mode 100644 (file)
index 0000000..d41beeb
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+setopt ignorebraces
+BUFFER='echo { foo } always { bar }'
+
+expected_region_highlight=(
+  '1 4 builtin' # echo
+  '6 6 default' # {
+  '8 10 default' # foo
+  '12 12 default' # }
+  '14 19 default' # always
+  '21 21 default' # {
+  '23 25 default' # bar
+  '27 27 default' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh
new file mode 100644 (file)
index 0000000..5b8e0b6
--- /dev/null
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() echo hello; () { echo world } "argument"'
+
+expected_region_highlight=(
+  "1 2 reserved-word" # ()
+  "4 7 builtin" # echo
+  "9 13 default" # hello
+  "14 14 commandseparator" # ;
+  "16 17 reserved-word" # ()
+  "19 19 reserved-word" # {
+  "21 24 builtin" # echo
+  "34 43 double-quoted-argument" # "argument"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh
new file mode 100644 (file)
index 0000000..8955bd2
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=''\''x: /'
+
+expected_region_highlight=(
+  '1 5 unknown-token' # \'x: /
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh
new file mode 100644 (file)
index 0000000..e0eb6e7
--- /dev/null
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Must be at command word, since the word following 'if' isn't currently considered
+# a command word (issue #207).
+#
+# An opening '((' without matching '))' is highlighted correctly under zsh-5.1.1-52-g4bed2cf
+# or newer, only (issue #188).
+BUFFER='(( x == 42 ))'
+
+expected_region_highlight=(
+  "1 2 reserved-word" # ((
+  "12 13 reserved-word" # ))
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh
new file mode 100644 (file)
index 0000000..6485f0e
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='a+=(lorem ipsum)'
+
+expected_region_highlight=(
+  "1 4 assign" # a+=(
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh
new file mode 100644 (file)
index 0000000..fdf30aa
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='42=foo 43+=bar'
+
+expected_region_highlight=(
+  "1 6 assign" # 42=foo
+  "8 14 assign" # 43+=bar
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh
new file mode 100644 (file)
index 0000000..8995162
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(A=(hello world))'
+
+expected_region_highlight=(
+  "1 1 reserved-word" # (
+  "2 4 assign" # A=(
+  "16 16 assign" # )
+  "17 17 reserved-word" # )
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh
new file mode 100644 (file)
index 0000000..37ba372
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=(hello world) ls'
+
+expected_region_highlight=(
+  "1 3 assign" # A=(
+  "15 15 assign" # )
+  "17 18 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh
new file mode 100644 (file)
index 0000000..26c42e9
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=(hello world) b=42'
+
+expected_region_highlight=(
+  "1 3 assign" # A=(
+  "15 15 assign" # )
+  "17 20 assign" # b=42
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh
new file mode 100644 (file)
index 0000000..c2618b0
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=1; echo hello world'
+
+expected_region_highlight=(
+  "4 4 commandseparator" # ;
+  "6 9 builtin" # echo
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh
new file mode 100644 (file)
index 0000000..fc04f6b
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(A=1)'
+
+expected_region_highlight=(
+  "1 1 reserved-word" # (
+  "2 4 assign" # A=1
+  "5 5 reserved-word" # )
+)
index 0401bf4..713a5f2 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
-BUFFER='A=1'
+BUFFER='A=1 b=("foo" bar)'
 
 expected_region_highlight=(
-  "1 3 $ZSH_HIGHLIGHT_STYLES[assign]" # A=1
+  "1 3 assign" # A=1
+  "5 7 assign" # b=(
+  "8 12 double-quoted-argument" # "foo"
+  "14 16 default" # bar
+  "17 17 assign" # )
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh
new file mode 100644 (file)
index 0000000..f8329ea
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo `echo 42`'
+
+expected_region_highlight=(
+  "6 14 back-quoted-argument"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh
new file mode 100644 (file)
index 0000000..ebcf2e1
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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 \\\n'
+BUFFER='noglob'
+
+expected_region_highlight=(
+  "1 6 default" # 'noglob' highlighted as a string, not as a precomand
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh
new file mode 100644 (file)
index 0000000..3c5b1f0
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'() { echo }\n}'
+# no special setopts
+
+expected_region_highlight=(
+  '1 2 reserved-word' # ()
+  '4 4 reserved-word' # {
+  '6 9 builtin' # echo
+  '11 11 reserved-word' # }
+  '12 12 commandseparator' # \n
+  '13 13 unknown-token' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh
new file mode 100644 (file)
index 0000000..a3ea7c9
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'() { echo }\n}'
+setopt ignorebraces
+
+expected_region_highlight=(
+  '1 2 reserved-word' # ()
+  '4 4 reserved-word' # {
+  '6 9 builtin' # echo
+  '11 11 default' # }
+  '12 12 commandseparator' # \n
+  '13 13 reserved-word' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh
new file mode 100644 (file)
index 0000000..5e6e80f
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() { echo foo )'
+
+expected_region_highlight=(
+  '1 2 reserved-word' # ()
+  '4 4 reserved-word' # {
+  '6 9 builtin' # echo
+  '11 13 default' # foo
+  '15 15 unknown-token' # )
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh
new file mode 100644 (file)
index 0000000..2d98ac2
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() ( echo foo }'
+
+expected_region_highlight=(
+  '1 2 reserved-word' # ()
+  '4 4 reserved-word' # (
+  '6 9 builtin' # echo
+  '11 13 default' # foo
+  '15 15 unknown-token' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh
new file mode 100644 (file)
index 0000000..e33040a
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo )'
+
+expected_region_highlight=(
+  '1 4 builtin' # echo
+  '6 6 unknown-token' # )
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh
new file mode 100644 (file)
index 0000000..a9b15dc
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo }'
+
+expected_region_highlight=(
+  '1 4 builtin' # echo
+  '6 6 unknown-token' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh
new file mode 100644 (file)
index 0000000..21e8bb2
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo { }'
+
+expected_region_highlight=(
+  '1 4 builtin' # echo
+  '6 6 default' # {
+  '8 8 unknown-token' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh
new file mode 100644 (file)
index 0000000..9df8388
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(repeat 1; do)'
+
+expected_region_highlight=(
+  '1 1 reserved-word' # (
+  '2 7 reserved-word' # repeat
+  '9 9 default' # 1
+  '10 10 commandseparator' # ;
+  '12 13 reserved-word' # do
+  '14 14 unknown-token' # )
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh
new file mode 100644 (file)
index 0000000..27d5920
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2012 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='for n in *; do echo $n; end'
+
+expected_region_highlight=(
+  '1 3 reserved-word' # for
+  '5 5 default' # n
+  '7 8 default' # in
+  '10 10 globbing' # *
+  '11 11 commandseparator' # ;
+  '13 14 reserved-word' # do
+  '16 19 builtin' # echo
+  '21 22 default' # $n
+  '23 23 commandseparator' # ;
+  '25 27 unknown-token' # end
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh
new file mode 100644 (file)
index 0000000..07a42e3
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(ls&)'
+
+expected_region_highlight=(
+  '1 1 reserved-word' # (
+  '2 3 command' # ls
+  '4 4 commandseparator' # &
+  '5 5 reserved-word' # )
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh
new file mode 100644 (file)
index 0000000..e8d93a6
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=':; pwd &! ls'
+
+expected_region_highlight=(
+  "2 2 commandseparator" # ;
+  "4 6 builtin" # pwd
+  "8 9 commandseparator" # &!
+  "11 12 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh
new file mode 100644 (file)
index 0000000..af4e9b5
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+setopt interactivecomments
+BUFFER=$'# foo\ntrue'
+
+expected_region_highlight=(
+  '1 5 comment' # #
+  #'6 6 '"' # \n
+
+  '7 10 builtin' # true
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh
new file mode 100644 (file)
index 0000000..f750cc4
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+setopt interactive_comments
+
+BUFFER='# echo foo'
+
+expected_region_highlight=(
+  "1 1 comment" # #
+  "2 10 comment" # " echo foo"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh
new file mode 100644 (file)
index 0000000..0381bdb
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+unsetopt interactive_comments
+
+BUFFER='# echo foo'
+
+expected_region_highlight=(
+  "1 1 unknown-token" # #
+  "3 6 default" # " echo foo"
+  "8 10 default" # " echo foo"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh
new file mode 100644 (file)
index 0000000..3bb008e
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+setopt interactive_comments
+
+BUFFER='echo "foo #bar" #baz # quux'
+
+expected_region_highlight=(
+  "1 4 builtin" # echo
+  "6 15 double-quoted-argument" # "foo #bar"
+  "17 27 comment" # #baz # quux
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh
new file mode 100644 (file)
index 0000000..fb43e9e
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+x=/usr/bin/env
+BUFFER='$x "argument"'
+
+expected_region_highlight=(
+  "1 2 command" # $x
+  "4 13 double-quoted-argument" # "argument"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh
new file mode 100644 (file)
index 0000000..2f6a160
--- /dev/null
@@ -0,0 +1,50 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='while if echo Hello; then ls /; else ls; fi; do stat "x"; done; repeat 10 ls'
+
+expected_region_highlight+=(
+  "1 5 reserved-word" # while
+  "7 8 reserved-word" # if
+  "10 13 builtin" # echo
+  "15 19 default" # Hello
+  "22 25 reserved-word" # then
+  "27 28 command" # ls
+  "30 30 path" # /
+  "31 31 commandseparator" # ;
+  "33 36 reserved-word" # else
+  "38 39 command" # ls
+  "42 43 reserved-word" # fi
+  "46 47 reserved-word" # do
+  "49 52 command" # stat
+  "54 56 double-quoted-argument" # "x"
+  "59 62 reserved-word" # done
+  "65 70 reserved-word" # repeat
+  "75 76 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh
new file mode 100644 (file)
index 0000000..acf99e1
--- /dev/null
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='repeat 42; do ls; done'
+
+expected_region_highlight+=(
+  "1 6 reserved-word" # repeat
+  "8 9 default" # 42
+  "10 10 commandseparator" # ;
+  "12 13 reserved-word" # do
+  "15 16 command" # ls
+  "17 17 commandseparator" # ;
+  "19 22 reserved-word" # done
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh
new file mode 100644 (file)
index 0000000..58f507f
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='repeat 42; ls; pwd'
+
+expected_region_highlight+=(
+  "1 6 reserved-word" # repeat
+  "8 9 default" # 42
+  "10 10 commandseparator" # ;
+  "12 13 command" # ls
+  "14 14 commandseparator" # ;
+  "16 18 builtin" # pwd
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh
new file mode 100644 (file)
index 0000000..79d7f7d
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$$ $$foo"'
+
+expected_region_highlight=(
+  '1 1 builtin' # :
+  '3 3 double-quoted-argument' # "
+  '4 5 dollar-double-quoted-argument' # $$
+  '7 8 dollar-double-quoted-argument' # $$
+  '9 12 double-quoted-argument' # foo"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh
new file mode 100644 (file)
index 0000000..e900b02
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$- $# $* $@ $?"'
+
+expected_region_highlight=(
+  '1 1 builtin' # :
+  '3 3 double-quoted-argument' # "
+  '4 5 dollar-double-quoted-argument' # $-
+  '6 6 double-quoted-argument' # <space>
+  '7 8 dollar-double-quoted-argument' # $#
+  '9 9 double-quoted-argument' # <space>
+  '10 11 dollar-double-quoted-argument' # $*
+  '12 12 double-quoted-argument' # <space>
+  '13 14 dollar-double-quoted-argument' # $@
+  '15 15 double-quoted-argument' # <space>
+  '16 17 dollar-double-quoted-argument' # $?
+  '18 18 double-quoted-argument' # "
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh
new file mode 100644 (file)
index 0000000..354daa0
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$(:)"'
+
+expected_region_highlight=(
+  '1 1 builtin' # :
+  '3 3 double-quoted-argument' # "
+  '4 4 dollar-double-quoted-argument' # $
+  '5 8 double-quoted-argument' # (:)"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh
new file mode 100644 (file)
index 0000000..8c4c16f
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=": \$'*' 'foo'"
+
+expected_region_highlight=(
+  "3 6 dollar-quoted-argument" # $'*' - not a glob
+  "8 12 single-quoted-argument" # 'foo'
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh
new file mode 100644 (file)
index 0000000..a69373f
--- /dev/null
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=": \$'foo\xbar\udeadbeef\uzzzz'"
+
+expected_region_highlight=(
+  "3 7 dollar-quoted-argument" # $'foo
+  "8 11 back-dollar-quoted-argument" # \xba
+  "12 12 dollar-quoted-argument" # r
+  "13 18 back-dollar-quoted-argument" # \dead
+  "19 22 dollar-quoted-argument" # beef
+  "23 24 unknown-token" # \u
+  "25 29 dollar-quoted-argument" # zzzz'
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh
new file mode 100644 (file)
index 0000000..320cd94
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Similar to double-quoted2.zsh
+# This test checks that the '1' gets highlighted correctly.  Do not append to the BUFFER.
+BUFFER=": \$'\xa1"
+
+expected_region_highlight=(
+  "3 4 dollar-quoted-argument" # $'
+  "5 8 back-dollar-quoted-argument" # \xa1
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh
new file mode 100644 (file)
index 0000000..9728cd8
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='hello --world'
+
+expected_region_highlight=(
+  "7 13 double-hyphen-option" # --world
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh
new file mode 100644 (file)
index 0000000..7e379f8
--- /dev/null
@@ -0,0 +1,45 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "foo$bar:\`:\":\$:'
+BUFFER+=\\\\:\"
+
+expected_region_highlight=(
+  "3 6 double-quoted-argument" # "foo
+  "7 10 dollar-double-quoted-argument" # $bar
+  "11 11 double-quoted-argument" # :
+  "12 13 back-double-quoted-argument" # \`
+  "14 14 double-quoted-argument" # :
+  "15 16 back-double-quoted-argument" # \$
+  "17 17 double-quoted-argument" # :
+  "18 19 back-double-quoted-argument" # \"
+  "20 20 double-quoted-argument" # :
+  "21 22 back-double-quoted-argument" # \\
+  "23 24 double-quoted-argument" # :"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh
new file mode 100644 (file)
index 0000000..1538423
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Similar to dollar-quoted3.zsh
+# This test checks that the 'r' gets highlighted correctly.  Do not append to the BUFFER.
+BUFFER=': "foo$bar'
+
+expected_region_highlight=(
+  "3 6 double-quoted-argument" # "foo
+  "7 10 dollar-double-quoted-argument" # $bar
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh
new file mode 100644 (file)
index 0000000..39514e0
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$" "$42foo"'
+BUFFER+=\ \"\\\'\\x\"
+
+expected_region_highlight=(
+  "3 5 double-quoted-argument" # "$"
+  "7 7 double-quoted-argument" # "
+  "8 10 dollar-double-quoted-argument" # $42
+  "11 14 double-quoted-argument" # foo"
+  "16 21 double-quoted-argument" # "\'\x" - \' and \x are not escape sequences
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh
new file mode 100644 (file)
index 0000000..51bb25e
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "${foo}bar"'
+
+expected_region_highlight=(
+  "3 3 double-quoted-argument" # "
+  "4 9 dollar-double-quoted-argument" # ${foo}
+  "10 13 double-quoted-argument" # bar"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh
new file mode 100644 (file)
index 0000000..6e68184
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo; ;'
+
+expected_region_highlight=(
+  "5 5 commandseparator" # ;
+  "7 7 unknown-token" # ;
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh
new file mode 100644 (file)
index 0000000..698b3a7
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Same test data and expectations as empty-command.zsh; the only difference is:
+touch ';'
+
+BUFFER='echo; ;'
+
+expected_region_highlight=(
+  "5 5 commandseparator" # ;
+  "7 7 unknown-token" # ;
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh
new file mode 100644 (file)
index 0000000..caec2f1
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='exec {foo}>&/tmp ls'
+
+expected_region_highlight=(
+  "1 4 precommand" # exec
+  "6 10 redirection 'issue #238'" # {foo}
+  "11 12 redirection" # >&
+  "13 16 path" # /tmp
+  "18 19 command 'issue #238'" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh
new file mode 100644 (file)
index 0000000..c962ddb
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='f() pwd; f() { balanced braces }'
+
+expected_region_highlight=(
+  '1 1 TBD "issue #223"' # f
+  '2 3 reserved-word' # ()
+  '5 7 builtin' # pwd
+  '8 8 commandseparator' # ;
+  '10 10 TBD "issue #223"' # f
+  '11 12 reserved-word' # ()
+  '14 14 reserved-word' # {
+  '16 23 unknown-token' # balanced
+  '25 30 default' # braces
+  '32 32 reserved-word' # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh
new file mode 100644 (file)
index 0000000..e12fce6
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='f g h () pwd'
+
+expected_region_highlight=(
+  '1 1 TBD "issue #223"' # f
+  '3 3 TBD "issue #223"' # g
+  '5 5 TBD "issue #223"' # h
+  '7 8 reserved-word' # ()
+  '10 12 builtin' # pwd
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh
new file mode 100644 (file)
index 0000000..6876391
--- /dev/null
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+cd() {
+  builtin cd "$@"
+}
+ls() {
+  command ls "$@"
+}
+BUFFER='cd;ls'
+
+expected_region_highlight=(
+  "1 2 function" # cd
+  "4 5 function" # ls
+)
+
+# don't 'unfunction cd ls', since cd() and ls() should still be a functions
+# when _zsh_highlight runs.  Leaving the wrapper functions is harmless.
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh
new file mode 100644 (file)
index 0000000..2fd9c6f
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': foo* bar? *baz qux\?'
+
+expected_region_highlight=(
+  "1 1 builtin" # :
+  "3 6 globbing" # foo*
+  "8 11 globbing" # bar?
+  "13 16 globbing" # *baz
+  "18 22 default" # qux\?
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh
new file mode 100644 (file)
index 0000000..2983ef8
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+hash zsh_syntax_highlighting_hash=/doesnotexist
+BUFFER='zsh_syntax_highlighting_hash'
+
+expected_region_highlight=(
+  "1 28 hashed-command 'zsh/parameter cannot distinguish between hashed and command'"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh
new file mode 100644 (file)
index 0000000..c447a78
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "Hello\!"'
+
+expected_region_highlight=(
+  '1 4 builtin' # echo
+  '6 11 double-quoted-argument' # "Hello
+  '12 13 back-double-quoted-argument' # \!
+  '14 14 double-quoted-argument' # "Hello\!"
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh
new file mode 100644 (file)
index 0000000..3e23711
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='!foo bar !baz ! ; !'
+
+expected_region_highlight=(
+  "1 4 history-expansion" # !foo
+  "6 8 default" # bar
+  "10 13 history-expansion" # !baz
+  "15 15 default" # ! (before the semicolon)
+  "19 19 reserved-word" # ! (after the semicolon)
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh
new file mode 100644 (file)
index 0000000..386d0df
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='^foo^bar'
+
+expected_region_highlight=(
+  "1 8 history-expansion" # ^foo^bar
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh
new file mode 100644 (file)
index 0000000..e851ca3
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+_zsh_highlight_add_highlight()
+{
+  region_highlight+=("$1 $2 ${(j.,.)argv[3,-1]}")
+}
+
+BUFFER='type'
+
+expected_region_highlight=(
+  '1 4 builtin,arg0' # type
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh
new file mode 100644 (file)
index 0000000..3734c7a
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=(\nbar) env'
+
+expected_region_highlight=(
+  '1 5 assign' # foo=(
+  '6 6 commandseparator' # \n
+  '7 9 default' # bar
+  '10 10 assign' # )
+  '12 14 command' # env
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh
new file mode 100644 (file)
index 0000000..484c951
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# 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=(
+  "1 5 double-quoted-argument" # 'foo2"'
+  "7 8 path" # './'
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh
new file mode 100644 (file)
index 0000000..8ecce5b
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'echo "foo1\n'
+
+expected_region_highlight=(
+  "6 10 double-quoted-argument" # 'foo2"'
+)
index ac0606c..778e712 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
 BUFFER='ps aux | grep java | sort | uniq | tail | head'
 
 expected_region_highlight=(
-  "1  2  $ZSH_HIGHLIGHT_STYLES[command]" # ps
-  "4  6  $ZSH_HIGHLIGHT_STYLES[default]" # aux
-  "8  8  $ZSH_HIGHLIGHT_STYLES[default]" # |
-  "10 13 $ZSH_HIGHLIGHT_STYLES[command]" # grep
-  "15 18 $ZSH_HIGHLIGHT_STYLES[default]" # java
-  "20 20 $ZSH_HIGHLIGHT_STYLES[default]" # |
-  "22 25 $ZSH_HIGHLIGHT_STYLES[command]" # sort
-  "27 27 $ZSH_HIGHLIGHT_STYLES[default]" # |
-  "29 32 $ZSH_HIGHLIGHT_STYLES[command]" # uniq
-  "34 34 $ZSH_HIGHLIGHT_STYLES[default]" # |
-  "36 39 $ZSH_HIGHLIGHT_STYLES[command]" # tail
-  "41 41 $ZSH_HIGHLIGHT_STYLES[default]" # |
-  "43 46 $ZSH_HIGHLIGHT_STYLES[command]" # head
+  "1  2  command" # ps
+  "4  6  default" # aux
+  "8  8  commandseparator" # |
+  "10 13 command" # grep
+  "15 18 default" # java
+  "20 20 commandseparator" # |
+  "22 25 command" # sort
+  "27 27 commandseparator" # |
+  "29 32 command" # uniq
+  "34 34 commandseparator" # |
+  "36 39 command" # tail
+  "41 41 commandseparator" # |
+  "43 46 command" # head
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh
new file mode 100644 (file)
index 0000000..6f3a7f7
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+alias x=command
+BUFFER='x ls'
+
+expected_region_highlight=(
+  "3 4 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh
new file mode 100644 (file)
index 0000000..ea70a83
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=':; noglob echo *'
+
+expected_region_highlight=(
+  "16 16 default" # *
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh
new file mode 100644 (file)
index 0000000..6d7a940
--- /dev/null
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='noglob echo *; echo *'
+
+expected_region_highlight=(
+  "13 13 default" # *
+  "21 21 globbing" # *
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh
new file mode 100644 (file)
index 0000000..550c09f
--- /dev/null
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+alias a=A
+f() {}
+
+BUFFER='a;f;'
+
+expected_region_highlight=(
+  "1 1 alias" # f
+  "2 2 commandseparator" # ;
+  "3 3 function" # g
+  "4 4 commandseparator" # ;
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh
new file mode 100644 (file)
index 0000000..1f3002a
--- /dev/null
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+## setup
+setopt PATH_DIRS
+mkdir -p foo/bar
+touch foo/bar/testing-issue-228
+chmod  +x foo/bar/testing-issue-228
+path+=( "$PWD"/foo )
+
+BUFFER='bar/testing-issue-228'
+
+expected_region_highlight=(
+  "1 21 command" # bar/testing-issue-228
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh
new file mode 100644 (file)
index 0000000..84c7d59
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+ln -s /nonexistent broken-symlink
+BUFFER=': broken-symlink'
+CURSOR=5 # to make path_prefix ineligible
+
+expected_region_highlight=(
+  "3 16 path" # broken-symlink
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh
new file mode 100644 (file)
index 0000000..3485b45
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+lambda="''"
+touch \$lambda
+BUFFER=': \$lambda'
+
+expected_region_highlight=(
+  "3 8 path" # \$lambda
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh
new file mode 100644 (file)
index 0000000..cf13dad
--- /dev/null
@@ -0,0 +1,53 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values.
+# Make sure the relevant ones are set to something.
+ZSH_HIGHLIGHT_STYLES[path_pathseparator]=set
+ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]=set
+
+mkdir A
+touch A/mu
+BUFFER='ls /bin/ / A/mu A/m'
+
+expected_region_highlight=(
+  "4 4 path_pathseparator"           # /
+  "5 7 path"                         # bin
+  "8 8 path_pathseparator"           # /
+
+  "10 10 path_pathseparator"         # /
+
+  "12 12 path"                       # A
+  "13 13 path_pathseparator"         # /
+  "14 15 path"                       # mu
+
+  "17 17 path_prefix"                # A
+  "18 18 path_prefix_pathseparator"  # /
+  "19 19 path_prefix"                # m
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh
new file mode 100644 (file)
index 0000000..db4e706
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values.
+# For this test, make sure both these styles are set and identical:
+ZSH_HIGHLIGHT_STYLES[path]=value
+ZSH_HIGHLIGHT_STYLES[path_pathseparator]=value
+
+BUFFER='ls /bin/'
+
+expected_region_highlight=(
+  "4 8 path"    # /bin/
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh
new file mode 100644 (file)
index 0000000..67a26fd
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 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
+# -------------------------------------------------------------------------------------------------
+
+mkdir A
+touch "A/mu with spaces"
+BUFFER='ls A/mu\ with\ spaces'
+
+expected_region_highlight=(
+  "1 2  command" # ls
+  "4 19 path"    # A/mu\ with\ spaces
+)
index 14f8e18..8b1c680 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
+HOME="."
 BUFFER='ls ~'
 
 expected_region_highlight=(
-  "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
-  "4 4 $ZSH_HIGHLIGHT_STYLES[path]"    # ~
+  "1 2 command" # ls
+  "4 4 path"    # ~
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh
new file mode 100644 (file)
index 0000000..3f7b820
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+HOME="/nonexistent"
+BUFFER='ls ~'
+
+expected_region_highlight=(
+  "1 2 command" # ls
+  "4 4 default"    # ~
+)
+
index 38b2bb5..335b3fd 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
-hash -d D=highlighters/main/test-data
+mkdir mydir
+touch mydir/path-tilde-named.test
+hash -d D=mydir
 
-BUFFER='ls ~D/path-tilde-named.zsh'
+BUFFER='ls ~D/path-tilde-named.test'
 
 expected_region_highlight=(
-  "1 2  $ZSH_HIGHLIGHT_STYLES[command]" # ls
-  "4 23 $ZSH_HIGHLIGHT_STYLES[path]"    # ~D/path-tilde-named.zsh
+  "1 2  command" # ls
+  "4 27 path"    # ~D/path-tilde-named.test
 )
index 52e3af1..d387eff 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
 # vim: ft=zsh sw=2 ts=2 et
 # -------------------------------------------------------------------------------------------------
 
-BUFFER='ls highlighters/main/test-data/path.zsh'
+mkdir A
+touch A/mu
+BUFFER='ls A/mu'
 
 expected_region_highlight=(
-  "1 2  $ZSH_HIGHLIGHT_STYLES[command]" # ls
-  "4 39 $ZSH_HIGHLIGHT_STYLES[path]"    # highlighters/main/test-data/path.zsh
+  "1 2 command" # ls
+  "4 7 path"     # A/mu
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh
new file mode 100644 (file)
index 0000000..12fb30b
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Assumes that '/bin/sh' exists and '/bin/s' does not exist.
+# Related to path_prefix2.zsh
+
+BUFFER='ls /bin/s'
+
+expected_region_highlight=(
+  "4 9 path_prefix"    # /bin/s
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh
new file mode 100644 (file)
index 0000000..501928a
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Assumes that '/bin/sh' exists and '/bin/s' does not exist.
+# Related to path_prefix.zsh
+
+BUFFER='ls /bin/s'
+WIDGET=zle-line-finish
+
+expected_region_highlight=(
+  "4 9 default"    # /bin/s
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh
new file mode 100644 (file)
index 0000000..a03b331
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': command zzzzzz'
+
+expected_region_highlight=(
+  "1 1 builtin" # :
+  "3 9 default" # not precommand
+  "11 16 default" # not unknown-token (since 'zzzzzz' is not a command)
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh
new file mode 100644 (file)
index 0000000..3d8f332
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='command -v ls'
+
+expected_region_highlight=(
+  "1 7 precommand" # command
+  "9 10 single-hyphen-option 'issue #343'" # -v
+  "12 13 command 'issue #343'" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh
new file mode 100644 (file)
index 0000000..5a5c0e2
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='>/tmp >/tmp sudo echo >/tmp foo'
+
+expected_region_highlight=(
+  "2  5  path"       # /tmp
+  "8  11 path"       # /tmp
+  "13 16 precommand" # sudo
+  "18 21 builtin"    # echo
+  "24 27 path"       # /tmp
+  "29 31 default"    # foo
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh
new file mode 100644 (file)
index 0000000..5086082
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Redirection before and after the command word are implemented differently; test both.
+BUFFER='<<<foo echo >>&!bar'
+
+expected_region_highlight=(
+  "1 3 redirection" # <<<
+  "13 16 redirection" # >>&!
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh
new file mode 100644 (file)
index 0000000..83f7c08
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='ls >(wc) | nl'
+
+expected_region_highlight=(
+  "1 2 command" # ls
+  "10 10 commandseparator" # |
+  "12 13 command" # nl
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh
new file mode 100644 (file)
index 0000000..e71fe0a
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='repeat "1" do done'
+
+expected_region_highlight=(
+  "1 6 reserved-word" # repeat
+  "8 10 double-quoted-argument" # "1"
+  "12 13 reserved-word" # do
+  "15 18 reserved-word" # done
+)
index 4227c80..8bb41fd 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
@@ -31,5 +30,5 @@
 BUFFER='ls'
 
 expected_region_highlight=(
-  "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
+  "1 2 command" # ls
 )
index 055b1cb..e8c25e5 100644 (file)
@@ -1,6 +1,5 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
-# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are permitted
@@ -31,9 +30,9 @@
 BUFFER='ps aux | grep java'
 
 expected_region_highlight=(
-  "1  2  $ZSH_HIGHLIGHT_STYLES[command]" # ps
-  "4  6  $ZSH_HIGHLIGHT_STYLES[default]" # aux
-  "8  8  $ZSH_HIGHLIGHT_STYLES[default]" # |
-  "9  12 $ZSH_HIGHLIGHT_STYLES[command]" # grep
-  "14 17 $ZSH_HIGHLIGHT_STYLES[default]" # java
+  "1  2  command" # ps
+  "4  6  default" # aux
+  "8  8  commandseparator" # |
+  "10 13 command" # grep
+  "15 18 default" # java
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh
new file mode 100644 (file)
index 0000000..0080ad2
--- /dev/null
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='tar cf - * | (cd /target; tar xfp -) | { cat }'
+
+expected_region_highlight=(
+  "1 3 command" # tar
+  "14 14 reserved-word" # (
+  "15 16 builtin" # cd
+  "27 29 command" # tar
+  "36 36 reserved-word" # )
+  "40 40 reserved-word" # {
+  "42 44 command" # cat
+  "46 46 reserved-word" # }
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh
new file mode 100644 (file)
index 0000000..3183a23
--- /dev/null
@@ -0,0 +1,47 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+# Tests three codepaths:
+# * -i  (no argument)
+# * -C3 (pasted argument)
+# * -u otheruser (non-pasted argument)
+BUFFER='sudo -C3 -u otheruser -i ls /; sudo ; sudo -u ; sudo notacommand'
+
+expected_region_highlight=(
+  "1 4 precommand" # sudo
+  "6 8 single-hyphen-option" # -C3
+  "10 11 single-hyphen-option" # -u
+  "13 21 default" # otheruser
+  "23 24 single-hyphen-option" # -i
+  "26 27 command" # ls
+  "29 29 path" # /
+  "37 37 unknown-token" # ;, error because empty command
+  "47 47 unknown-token" # ;, error because incomplete command
+  "54 64 unknown-token" # notacommand - doesn't falls back to "not a command word" codepath
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh
new file mode 100644 (file)
index 0000000..856567b
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+setopt interactive_comments
+BUFFER='sudo -u # comment'
+
+expected_region_highlight=(
+  "1 4 precommand" # sudo
+  "6 7 single-hyphen-option" # -u
+  "9 17 unknown-token" # "# comment" - error because argument missed
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh
new file mode 100644 (file)
index 0000000..f507899
--- /dev/null
@@ -0,0 +1,46 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='sudo -u >/tmp otheruser ls; sudo ls; sudo -i ls'
+
+expected_region_highlight=(
+  "1 4 precommand" # sudo
+  "6 7 single-hyphen-option" # -u
+  "9 9 redirection" # >
+  "10 13 path" # /tmp
+  "15 23 default" # otheruser
+  "25 26 command" # ls
+  "27 27 commandseparator" # ;
+  "29 32 precommand" # sudo
+  "34 35 command" # ls
+  "36 36 commandseparator" # ;
+  "38 41 precommand" # sudo
+  "43 44 single-hyphen-option" # -i
+  "46 47 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh
new file mode 100644 (file)
index 0000000..30f6ff8
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='sudo >/tmp -u otheruser ls'
+
+expected_region_highlight=(
+  "1 4 precommand" # sudo
+  "6 6 redirection" # >
+  "7 10 path" # /tmp
+  "12 13 single-hyphen-option" # -u
+  "15 23 default" # otheruser
+  "25 26 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh
new file mode 100644 (file)
index 0000000..fdd426d
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='sudo 2>./. -u otheruser ls'
+
+expected_region_highlight=(
+  "1 4 precommand" # sudo
+  "6 7 redirection" # 2>
+  "8 10 path" # ./. # a 3-character path, for alignment with sudo-redirection2.zsh
+  "12 13 single-hyphen-option" # -u
+  "15 23 default" # otheruser
+  "25 26 command" # ls
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh
new file mode 100644 (file)
index 0000000..67c996c
--- /dev/null
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+hash -d D=/usr/bin
+
+BUFFER='~D/env foo'
+
+expected_region_highlight=(
+  "1 6  command" # ~D/env [= /usr/bin/env
+  "8 10 default" # foo
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh
new file mode 100644 (file)
index 0000000..c8dfbd4
--- /dev/null
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# 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
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='\sh'
+
+expected_region_highlight=(
+  "1 3 command" # \sh (runs 'sh', bypassing aliases)
+)
index 74854d4..e71faec 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
@@ -31,5 +30,5 @@
 BUFFER='azertyuiop'
 
 expected_region_highlight=(
-  "1  10  $ZSH_HIGHLIGHT_STYLES[unknown-token]" # azertyuiop
+  "1  10  unknown-token" # azertyuiop
 )
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh
new file mode 100644 (file)
index 0000000..bd60ad4
--- /dev/null
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# 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 foo; echo bar\n\n\n'
+BUFFER=' echo baz; echo qux'
+
+expected_region_highlight=(
+  "2 5 builtin" # echo
+  "7 9 default" # baz
+  "10 10 commandseparator" # semicolon
+  "12 15 builtin" # echo
+  "17 19 default" # qux
+)
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh b/.zsh/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh
new file mode 100644 (file)
index 0000000..4b77766
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+# See issue #267 for the magic numbers
+BUFFER=$'foo foo\nbar bar'
+REGION_ACTIVE=2
+CURSOR=4
+MARK=12
+
+expected_region_highlight=(
+  "1 3 standout" # foo
+)
index 82a7c65..3ad5f24 100644 (file)
@@ -1,21 +1,19 @@
 zsh-syntax-highlighting / highlighters / pattern
-================================================
+------------------------------------------------
 
-This is the ***pattern*** highlighter, that highlights user defined patterns.
+This is the `pattern` highlighter, that highlights user-defined patterns.
 
 
-How to activate it
-------------------
-To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`:
+### How to tweak it
 
-    ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] pattern)
-
-
-How to tweak it
----------------
-To use this highlighter, associate patterns with styles in the `ZSH_HIGHLIGHT_PATTERNS` array, for example in `~/.zshrc`:
+To use this highlighter, associate patterns with styles in the
+`ZSH_HIGHLIGHT_PATTERNS` associative array, for example in `~/.zshrc`:
 
     # To have commands starting with `rm -rf` in red:
     ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
 
-The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135).
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
index 1cf6ef1..054eff7 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
 typeset -gA ZSH_HIGHLIGHT_PATTERNS
 
 # Whether the pattern highlighter should be called or not.
-_zsh_highlight_pattern_highlighter_predicate()
+_zsh_highlight_highlighter_pattern_predicate()
 {
   _zsh_highlight_buffer_modified
 }
 
 # Pattern syntax highlighting function.
-_zsh_highlight_pattern_highlighter()
+_zsh_highlight_highlighter_pattern_paint()
 {
   setopt localoptions extendedglob
   local pattern
@@ -53,6 +52,7 @@ _zsh_highlight_pattern_highlighter_loop()
   # This does *not* do its job syntactically, sorry.
   local buf="$1" pat="$2"
   local -a match mbegin mend
+  local MATCH; integer MBEGIN MEND
   if [[ "$buf" == (#b)(*)(${~pat})* ]]; then
     region_highlight+=("$((mbegin[2] - 1)) $mend[2] $ZSH_HIGHLIGHT_PATTERNS[$pat]")
     "$0" "$match[1]" "$pat"; return $?
diff --git a/.zsh/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh b/.zsh/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh
new file mode 100644 (file)
index 0000000..2f76929
--- /dev/null
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+
+BUFFER='rm -rf /'
+
+expected_region_highlight=(
+  "1 8 fg=white,bold,bg=red" # rm -rf /
+)
index 53c871b..0b0d41f 100644 (file)
@@ -1,24 +1,23 @@
 zsh-syntax-highlighting / highlighters / root
-=================================================
+---------------------------------------------
 
-This is the ***root*** highlighter, that highlights the whole line if the current user is root.
+This is the `root` highlighter, that highlights the whole line if the current
+user is root.
 
 
-How to activate it
-------------------
-To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`:
+### How to tweak it
 
-    ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] root)
-
-
-How to tweak it
----------------
 This highlighter defines the following styles:
 
 * `root` - the style for the whole line if the current user is root.
 
-To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`:
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
 
     ZSH_HIGHLIGHT_STYLES[root]='bg=red'
 
-The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135).
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
index 4ef8762..3718c44 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env zsh
 # -------------------------------------------------------------------------------------------------
 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 # All rights reserved.
 : ${ZSH_HIGHLIGHT_STYLES[root]:=standout}
 
 # Whether the root highlighter should be called or not.
-_zsh_highlight_root_highlighter_predicate()
+_zsh_highlight_highlighter_root_predicate()
 {
   _zsh_highlight_buffer_modified
 }
 
 # root highlighting function.
-_zsh_highlight_root_highlighter()
+_zsh_highlight_highlighter_root_paint()
 {
-  [[ $(command id -u) -eq 0 ]] && region_highlight+=("0 $#BUFFER $ZSH_HIGHLIGHT_STYLES[root]")
+  if (( EUID == 0 )) { _zsh_highlight_add_highlight 0 $#BUFFER root }
 }
index f8cac48..5526612 100644 (file)
@@ -3,18 +3,85 @@ zsh-syntax-highlighting / tests
 
 Utility scripts for testing zsh-syntax-highlighting highlighters.
 
-The tests expect the highlighter directory to contain a `test-data` directory with test data files. See the [main highlighter](../highlighters/main/test-data) for examples.
+The tests harness expects the highlighter directory to contain a `test-data`
+directory with test data files.
+See the [main highlighter](../highlighters/main/test-data) for examples.
 
+Each test should define the string `$BUFFER` that is to be highlighted and the
+array parameter `$expected_region_highlight`.
+The value of that parameter is a list of strings of the form  `"$i $j $style"`.
+or `"$i $j $style $todo"`.
+Each string specifies the highlighting that `$BUFFER[$i,$j]` should have;
+that is, `$i` and `$j` specify a range, 1-indexed, inclusive of both endpoints.
+`$style` is either a key of `$ZSH_HIGHLIGHT_STYLES` or `NONE` to specify no
+highlighting should be observed.
+If `$todo` exists, the test point is marked as TODO (the failure of that test
+point will not fail the test), and `$todo` is used as the explanation.
 
-highlighting test
+**Note**: `$region_highlight` uses the same `"$i $j $style"` syntax but
+interprets the indexes differently.
+
+**Isolation**: Each test is run in a separate subshell, so any variables,
+aliases, functions, etc., it defines will be visible to the tested code (that
+computes `$region_highlight`), but will not affect subsequent tests.  The
+current working directory of tests is set to a newly-created empty directory,
+which is automatically cleaned up after the test exits. For example:
+
+    setopt PATH_DIRS
+    mkdir -p foo/bar
+    touch foo/bar/testing-issue-228
+    chmod  +x foo/bar/testing-issue-228
+    path+=( "$PWD"/foo )
+
+    BUFFER='bar/testing-issue-228'
+
+    expected_region_highlight=(
+      "1 21 command" # bar/testing-issue-228
+    )
+
+
+Writing new tests
 -----------------
-[`test-highlighting.zsh`](tests/test-highlighting.zsh) tests the correctness of the highlighting. Usage:
+
+An experimental tool is available to generate test files:
+
+    zsh -f tests/generate.zsh 'ls -x' acme newfile
+
+This generates a `highlighters/acme/test-data/newfile.zsh` test file based on
+the current highlighting of the given `$BUFFER` (in this case, `ls -x`).
+
+_This tool is experimental._  Its interface may change.  In particular it may
+grow ways to set `$PREBUFFER` to inject free-form code into the generated file.
+
+
+Highlighting test
+-----------------
+
+[`test-highlighting.zsh`](tests/test-highlighting.zsh) tests the correctness of
+the highlighting. Usage:
 
     zsh test-highlighting.zsh <HIGHLIGHTER NAME>
 
+All tests may be run with
+
+    make test
+
+which will run all highlighting tests and report results in [TAP format][TAP].
+By default, the results of all tests will be printed; to show only "interesting"
+results (tests that failed but were expected to succeed, or vice-versa), run
+`make quiet-test` (or `make test QUIET=y`).
 
-performance test
+[TAP]: http://testanything.org/
+
+
+Performance test
 ----------------
-[`test-perfs.zsh`](tests/test-perfs.zsh) measures the time spent doing the highlighting. Usage:
+
+[`test-perfs.zsh`](tests/test-perfs.zsh) measures the time spent doing the
+highlighting. Usage:
 
     zsh test-perfs.zsh <HIGHLIGHTER NAME>
+
+All tests may be run with
+
+    make perf
diff --git a/.zsh/zsh-syntax-highlighting/tests/generate.zsh b/.zsh/zsh-syntax-highlighting/tests/generate.zsh
new file mode 100755 (executable)
index 0000000..64a1ede
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 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
+# -------------------------------------------------------------------------------------------------
+
+emulate -LR zsh
+setopt localoptions extendedglob
+
+# Argument parsing.
+if (( $# != 3 )) || [[ $1 == -* ]]; then
+  print -r -- >&2 "$0: usage: $0 BUFFER HIGHLIGHTER BASENAME"
+  print -r -- >&2 ""
+  print -r -- >&2 "Generate highlighters/HIGHLIGHTER/test-data/BASENAME.zsh based on the"
+  print -r -- >&2 "current highlighting of BUFFER."
+  exit 1
+fi
+buffer=$1
+ZSH_HIGHLIGHT_HIGHLIGHTERS=( $2 )
+fname=${0:A:h:h}/highlighters/$2/test-data/${3%.zsh}.zsh
+
+# Load the main script.
+. ${0:A:h:h}/zsh-syntax-highlighting.zsh
+
+# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style
+_zsh_highlight_add_highlight()
+{
+  region_highlight+=("$1 $2 $3")
+}
+
+
+# Copyright block
+year="`LC_ALL=C date +%Y`"
+if ! read -q "?Set copyright year to $year? "; then
+  year="YYYY"
+fi
+exec >$fname
+<$0 sed -n -e '1,/^$/p' | sed -e "s/2[0-9][0-9][0-9]/${year}/"
+# Assumes stdout is line-buffered
+git add -- $fname
+
+# Buffer
+print -n 'BUFFER='
+if [[ $buffer != (#s)[$'\t -~']#(#e) ]]; then
+  print -r -- ${(qqqq)buffer}
+else
+  print -r -- ${(qq)buffer}
+fi
+echo ""
+
+# Expectations
+print 'expected_region_highlight=('
+() {
+  local i
+  local PREBUFFER
+  local BUFFER
+  
+  PREBUFFER=""
+  BUFFER="$buffer"
+  region_highlight=()
+  # TODO: use run_test() from tests/test-highlighting.zsh (to get a tempdir)
+  _zsh_highlight
+
+  for ((i=1; i<=${#region_highlight}; i++)); do
+    local -a highlight_zone; highlight_zone=( ${(z)region_highlight[$i]} )
+    integer start=$highlight_zone[1] end=$highlight_zone[2]
+    if (( start < end )) # region_highlight ranges are half-open
+    then
+      (( --end )) # convert to closed range, like expected_region_highlight
+      (( ++start, ++end )) # region_highlight is 0-indexed; expected_region_highlig