diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/OldHope.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/OldHope.vim
new file mode 100644
index 00000000..ff78290c
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/OldHope.vim
@@ -0,0 +1,44 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/OldHope.vim
+" Author: tomb0y
+" License: MIT License
+" Last Change: 2017/10/15 06:20:54.
+" =============================================================================
+
+let s:yellow = [ '#e5cd52' , 221 ]
+let s:blue = [ '#4fb4d8' , 39 ]
+let s:red = [ '#f92672' , 161 ]
+let s:green = [ '#78bd65' , 41 ]
+let s:orange = [ '#ef7c2a' , 202 ]
+let s:white = [ '#ffffff' , 15 ]
+let s:lightGray = [ '#848794' , 245 ]
+let s:gray = [ '#686b78' , 242 ]
+let s:darkGray = [ '#45474f' , 238 ]
+let s:veryDarkGray = [ '#1c1d21' , 234 ]
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+let s:p.normal.left = [ [ s:white, s:blue ], [ s:white, s:gray ] ]
+let s:p.insert.left = [ [ s:white, s:green ], [ s:white, s:gray ] ]
+let s:p.visual.left = [ [ s:white, s:orange ], [ s:white, s:gray ] ]
+let s:p.replace.left = [ [ s:white, s:red ], [ s:white, s:gray ] ]
+
+let s:p.inactive.right = [ [ s:darkGray, s:gray ], [ s:darkGray, s:gray ] ]
+let s:p.inactive.left = [ [ s:lightGray, s:darkGray ], [ s:white, s:darkGray ] ]
+let s:p.inactive.middle = [ [ s:white, s:darkGray ] ]
+
+let s:p.normal.middle = [ [ s:white, s:darkGray ] ]
+let s:p.normal.error = [ [ s:red, s:darkGray ] ]
+let s:p.normal.warning = [ [ s:orange, s:darkGray ] ]
+
+let s:p.tabline.left = [ [ s:lightGray, s:darkGray ] ]
+let s:p.tabline.tabsel = [ [ s:darkGray, s:yellow ] ]
+let s:p.tabline.middle = [ [ s:yellow, s:veryDarkGray ] ]
+
+let s:p.normal.right = copy(s:p.normal.left)
+let s:p.insert.right = copy(s:p.insert.left)
+let s:p.visual.right = copy(s:p.visual.left)
+let s:p.replace.right = copy(s:p.replace.left)
+let s:p.tabline.right = copy(s:p.tabline.left)
+
+let g:lightline#colorscheme#OldHope#palette = lightline#colorscheme#flatten(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/materia.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/materia.vim
new file mode 100644
index 00000000..ba44f3db
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/materia.vim
@@ -0,0 +1,63 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/materia.vim
+" Author: Lokesh Krishna
+" License: MIT License
+" Last Change: 2017/10/21 11:32:27.
+" =============================================================================
+
+" Common colors
+let s:fg = '#d5dbe5'
+let s:blue = '#89ddff'
+let s:green = '#8bd649'
+let s:purple = '#82aaff'
+let s:red1 = '#ec5f67'
+let s:red2 = '#ec5f67'
+let s:yellow = '#ffcc00'
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+if &background ==# 'light'
+ " Light variant
+ let s:bg = '#ffffff'
+ let s:gray1 = '#2c393f'
+ let s:gray2 = '#d5dbe5'
+ let s:gray3 = '#707880'
+
+ let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.inactive.middle = [ [ s:gray3, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.insert.left = [ [ s:bg, s:blue, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ]
+else
+ " Dark variant
+ let s:bg = '#263238'
+ let s:gray1 = '#37474f'
+ let s:gray2 = '#2c393f'
+ let s:gray3 = '#37474f'
+
+ let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:fg, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.inactive.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.insert.left = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ]
+endif
+
+" Common
+let s:p.normal.right = [ [ s:bg, s:green, 'bold' ], [ s:bg, s:green, 'bold' ] ]
+let s:p.normal.error = [ [ s:red2, s:bg ] ]
+let s:p.normal.warning = [ [ s:yellow, s:bg ] ]
+let s:p.insert.right = [ [ s:bg, s:blue, 'bold' ], [ s:bg, s:blue, 'bold' ] ]
+let s:p.replace.right = [ [ s:bg, s:red1, 'bold' ], [ s:bg, s:red1, 'bold' ] ]
+let s:p.visual.right = [ [ s:bg, s:purple, 'bold' ], [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.left = [ [ s:bg, s:gray3 ] ]
+let s:p.tabline.tabsel = [ [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ]
+let s:p.tabline.right = copy(s:p.normal.right)
+
+let g:lightline#colorscheme#materia#palette = lightline#colorscheme#fill(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/material.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/material.vim
new file mode 100644
index 00000000..eb2428fd
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/material.vim
@@ -0,0 +1,63 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/material.vim
+" Author: Lokesh Krishna
+" License: MIT License
+" Last Change: 2017/10/30 16:35:27.
+" =============================================================================
+
+" Common colors
+let s:fg = '#eeffff'
+let s:blue = '#82aaff'
+let s:green = '#c3e88d'
+let s:purple = '#c792ea'
+let s:red1 = '#f07178'
+let s:red2 = '#ff5370'
+let s:yellow = '#ffcb6b'
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+if &background ==# 'light'
+ " Light variant
+ let s:bg = '#ffffff'
+ let s:gray1 = '#2e3c43'
+ let s:gray2 = '#eeffff'
+ let s:gray3 = '#546e7a'
+
+ let s:p.normal.left = [ [ s:bg, s:blue, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.inactive.middle = [ [ s:gray3, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.insert.left = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ]
+else
+ " Dark variant
+ let s:bg = '#263238'
+ let s:gray1 = '#314549'
+ let s:gray2 = '#2E3C43'
+ let s:gray3 = '#314549'
+
+ let s:p.normal.left = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:fg, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.inactive.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.insert.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ]
+endif
+
+" Common
+let s:p.normal.right = [ [ s:bg, s:blue, 'bold' ], [ s:bg, s:blue, 'bold' ] ]
+let s:p.normal.error = [ [ s:red2, s:bg ] ]
+let s:p.normal.warning = [ [ s:yellow, s:bg ] ]
+let s:p.insert.right = [ [ s:bg, s:green, 'bold' ], [ s:bg, s:green, 'bold' ] ]
+let s:p.replace.right = [ [ s:bg, s:red1, 'bold' ], [ s:bg, s:red1, 'bold' ] ]
+let s:p.visual.right = [ [ s:bg, s:purple, 'bold' ], [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.left = [ [ s:fg, s:gray3 ] ]
+let s:p.tabline.tabsel = [ [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ]
+let s:p.tabline.right = [ [ s:bg, s:red1, 'bold' ] ]
+
+let g:lightline#colorscheme#material#palette = lightline#colorscheme#fill(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/nord.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/nord.vim
new file mode 100644
index 00000000..c46cd066
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/nord.vim
@@ -0,0 +1,46 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/nord.vim
+" Author: arcticicestudio
+" License: MIT
+" Last Change: 2017/11/12 20:27:51
+" =============================================================================
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+let s:nord0 = ["#2E3440", "NONE"]
+let s:nord1 = ["#3B4252", 0]
+let s:nord2 = ["#434C5E", "NONE"]
+let s:nord3 = ["#4C566A", 8]
+let s:nord4 = ["#D8DEE9", "NONE"]
+let s:nord5 = ["#E5E9F0", 7]
+let s:nord6 = ["#ECEFF4", 15]
+let s:nord7 = ["#8FBCBB", 14]
+let s:nord8 = ["#88C0D0", 6]
+let s:nord9 = ["#81A1C1", 4]
+let s:nord10 = ["#5E81AC", 12]
+let s:nord11 = ["#BF616A", 1]
+let s:nord12 = ["#D08770", 11]
+let s:nord13 = ["#EBCB8B", 3]
+let s:nord14 = ["#A3BE8C", 2]
+let s:nord15 = ["#B48EAD", 5]
+
+let s:p.normal.left = [ [ s:nord1, s:nord8 ], [ s:nord5, s:nord1 ] ]
+let s:p.normal.middle = [ [ s:nord5, s:nord3 ] ]
+let s:p.normal.right = [ [ s:nord5, s:nord1 ], [ s:nord5, s:nord1 ] ]
+let s:p.normal.warning = [ [ s:nord1, s:nord13 ] ]
+let s:p.normal.error = [ [ s:nord1, s:nord11 ] ]
+
+let s:p.inactive.left = [ [ s:nord1, s:nord8 ], [ s:nord5, s:nord1 ] ]
+let s:p.inactive.middle = [ [ s:nord5, s:nord0 ] ]
+let s:p.inactive.right = [ [ s:nord5, s:nord1 ], [ s:nord5, s:nord1 ] ]
+
+let s:p.insert.left = [ [ s:nord1, s:nord6 ], [ s:nord5, s:nord1 ] ]
+let s:p.replace.left = [ [ s:nord1, s:nord13 ], [ s:nord5, s:nord1 ] ]
+let s:p.visual.left = [ [ s:nord1, s:nord7 ], [ s:nord5, s:nord1 ] ]
+
+let s:p.tabline.left = [ [ s:nord5, s:nord3 ] ]
+let s:p.tabline.middle = [ [ s:nord5, s:nord3 ] ]
+let s:p.tabline.right = [ [ s:nord5, s:nord3 ] ]
+let s:p.tabline.tabsel = [ [ s:nord1, s:nord8 ] ]
+
+let g:lightline#colorscheme#nord#palette = lightline#colorscheme#flatten(s:p)
diff --git a/sources_non_forked/nginx.vim/CHANGELOG.md b/sources_non_forked/nginx.vim/CHANGELOG.md
new file mode 100644
index 00000000..0a8ec60a
--- /dev/null
+++ b/sources_non_forked/nginx.vim/CHANGELOG.md
@@ -0,0 +1,19 @@
+nginx.vim CHANGELOG
+=====================
+
+This file is used to list changes made in each version of the [nginx](https://github.com/chr4/nginx.vim) plugin for the [Vim](http://www.vim.org/) editor.
+
+1.1.0
+-----
+
+- Do not highlight `SHA` ciphers, as usage as HMAC is still considered secure
+
+1.0.1
+-----
+
+- Highlight `gzip on` as insecure (as it might be vulnerable to BREACH/ CRIME)
+
+1.0.0
+-----
+
+- Initial release
diff --git a/sources_non_forked/nginx.vim/LICENSE b/sources_non_forked/nginx.vim/LICENSE
new file mode 100644
index 00000000..536790d3
--- /dev/null
+++ b/sources_non_forked/nginx.vim/LICENSE
@@ -0,0 +1,675 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ Vim plugin that highlights insecure SSL/TLS cipher suites and protocols.
+ Copyright (C) 2017 Chris Aumann
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ nginx.vim Copyright (C) 2017 Chris Aumann
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
+
diff --git a/sources_non_forked/nginx.vim/README.md b/sources_non_forked/nginx.vim/README.md
new file mode 100644
index 00000000..9f045f04
--- /dev/null
+++ b/sources_non_forked/nginx.vim/README.md
@@ -0,0 +1,92 @@
+# nginx.vim
+
+## Description
+[Vim](http://www.vim.org/) plugin for [Nginx](http://www.nginx.org)
+
+## Features
+The plugin is based on the recent vim-plugin distributed with `nginx-1.12.0` and additionally features the following syntax improvements:
+
+- Highlight IPv4 and IPv6 addresses
+- Mark insecure `ssl_protocols` as errors
+- Inline template syntax highlight for **ERB** and **Jinja**
+- Inline syntax highlight for **LUA**
+- Improve integer matching
+- Syntax highlighting for `proxy_next_upstream` options
+- Syntax highlighting for `sticky` options
+- Syntax highlighting for `upstream` `server` options
+- More to come!
+
+Furthermore:
+
+- Remove annoying delimiters, resulting in strange word-boundaries
+
+*Note: Also check out [sslsecure.vim](https://github.com/chr4/sslsecure.vim): it supports highlighting insecure SSL/TLS cipher suites and protocols in all your files!*
+
+
+## Screenshots
+A `server` block with highlighting of insecure `ssl_protocol` options:
+![nginx server block with SSL configuration](https://chr4.org/images/nginx_ssl.png)
+
+An `upstream` block with highlighted options:
+![nginx upstream configuration](https://chr4.org/images/nginx_upstream.png)
+
+Embedded highlighting for ERB and Jinja templates:
+![Embedded highlighting for ERB and Jinja templates](https://chr4.org/images/nginx_templating.png)
+
+Embedded LUA syntax highlighting:
+![Embedded LUA syntax highlighting](https://chr4.org/images/nginx_lua.png)
+
+
+## Snippets
+The plugin comes with useful snippets which can be accessed using e.g. [vim-snipmate](https://github.com/garbas/vim-snipmate).
+
+Select a decent cipher for your requirements (all of them can provide [SSLLabs A+ ratings](https://www.ssllabs.com/ssltest/analyze.html))
+
+- `ciphers-paranoid`: Even-more-secure ciphers (elliptic curves, no GCM), not compatible with IE < 11, OpenSSL-0.9.8, Safari < 7, Android != 4.4
+- **`ciphers-modern`: High-security ciphers (elliptic curves), not compatible with IE < 11, OpenSSL-0.9.8, Safari < 7, Android < 4.4 (recommended)**
+- `ciphers-compat`: Medium-security ciphers with good compatibility (No IE on WinXP) but TLSv1 and SHA required
+- `ciphers-old`: Low-security ciphers (using weak DES and SHA ciphers, TLSv1), but compatible with everything but IE6 and Java6
+- `ssl-options`: Bootstrap secure SSL options
+
+Example:
+```nginx
+# High-security ciphers (elliptic curves), less compatibility
+# No IE < 10, OpenSSL-0.9.8, Safari < 7, Android < 4.4
+ssl_protocols TLSv1.1 TLSv1.2;
+ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
+```
+
+Or add a robots.txt file with `robots.txt`:
+```nginx
+# Tell bots to not index this site
+location /robots.txt {
+ default_type text/plain;
+ return 200 'User-agent: *\nDisallow: /\n';
+}
+```
+
+It also has auto-completion for location and server blocks with `location` resp. `server`, and [many more](https://github.com/chr4/nginx.vim/blob/master/snippets/nginx.snippets)!
+
+- Add useful [snippets](https://github.com/chr4/nginx.vim/blob/master/snippets/nginx.snippets)
+
+## References
+- Based on the original `nginx-1.12.0/contrib/vim`
+- IPv4 and IPv6 address highlighting, based on expressions found in [this forum post](http://vim.1045645.n5.nabble.com/IPv6-support-for-quot-dns-quot-zonefile-syntax-highlighting-td1197292.html)
+- [Blog post](https://chr4.org/blog/2017/04/14/better-syntax-highlighting-and-snippets-for-nginx-in-vim/) introducing this plugin including some more examples
+
+## Installation
+
+Just plug it into your favorite Vim package manager:
+
+```vim
+" Plug
+Plug 'chr4/nginx.vim'
+
+" Dein.vim
+call dein#add('chr4/nginx.vim')
+
+" Vundle
+Plugin 'chr4/nginx.vim'
+```
+
+Optionally, if you like [Jinja](http://jinja.pocoo.org/) template syntax highlighting, install `lepture/vim-jinja`, too.
diff --git a/sources_non_forked/nginx.vim/ftdetect/nginx.vim b/sources_non_forked/nginx.vim/ftdetect/nginx.vim
new file mode 100644
index 00000000..cae77e4c
--- /dev/null
+++ b/sources_non_forked/nginx.vim/ftdetect/nginx.vim
@@ -0,0 +1,5 @@
+au BufRead,BufNewFile *.nginx set ft=nginx
+au BufRead,BufNewFile nginx*.conf set ft=nginx
+au BufRead,BufNewFile *nginx.conf set ft=nginx
+au BufRead,BufNewFile */etc/nginx/* set ft=nginx
+au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx
diff --git a/sources_non_forked/nginx.vim/ftplugin/nginx.vim b/sources_non_forked/nginx.vim/ftplugin/nginx.vim
new file mode 100644
index 00000000..463eea98
--- /dev/null
+++ b/sources_non_forked/nginx.vim/ftplugin/nginx.vim
@@ -0,0 +1 @@
+setlocal commentstring=#\ %s
diff --git a/sources_non_forked/nginx.vim/indent/nginx.vim b/sources_non_forked/nginx.vim/indent/nginx.vim
new file mode 100644
index 00000000..86013668
--- /dev/null
+++ b/sources_non_forked/nginx.vim/indent/nginx.vim
@@ -0,0 +1,11 @@
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=
+
+" cindent actually works for nginx' simple file structure
+setlocal cindent
+" Just make sure that the comments are not reset as defs would be.
+setlocal cinkeys-=0#
diff --git a/sources_non_forked/nginx.vim/snippets/nginx.snippets b/sources_non_forked/nginx.vim/snippets/nginx.snippets
new file mode 100644
index 00000000..68b1118a
--- /dev/null
+++ b/sources_non_forked/nginx.vim/snippets/nginx.snippets
@@ -0,0 +1,166 @@
+# vim: ft=nginx
+snippet l80
+ listen [::]:80 ipv6only=off;
+ $0
+
+# Listen statements when using multiple http server blocks
+snippet l80-multi
+ listen [::]:80 default_server;
+ listen 80 default_server;
+ $0
+
+snippet l443
+ listen [::]:443 ipv6only=off ssl http2 default_server;
+ $0
+
+# Listen statements when using multiple ssl server blocks
+snippet l443-multi
+ listen [::]:443 ssl http2 default_server;
+ listen 443 ssl http2 default_server;
+ $0
+
+# Cipher suites are taken and adapted from Mozilla's recommendations
+# https://wiki.mozilla.org/Security/Server_Side_TLS
+#
+# Paranoid mode
+snippet ciphers-paranoid
+ # Paranoid ciphers, 256bit minimum, prefer ChaCha20/ Poly1305, bad compatibility
+ # No Android 5+6 (4.4 works), Chrome < 51, Firefox < 49, IE < 11, Java 6-8, GoogleBot
+ ssl_protocols TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
+ $0
+
+# Mozilla modern
+snippet ciphers-modern
+ # High-security ciphers (elliptic curves), less compatibility
+ # No IE < 10, OpenSSL-0.9.8, Safari < 7, Android < 4.4
+ ssl_protocols TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
+ $0
+
+# Mozilla intermediate (Removed DES for more security)
+snippet ciphers-compat
+ # Medium-security ciphers with good compatibility (Weak: SHA)
+ # No IE on WinXP
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS';
+ $0
+
+# Mozilla old (Removed DSS, HIGH, SEED for more security)
+snippet ciphers-low
+ # Low-security ciphers (Weak: DES, SHA)
+ # No IE6, Java6
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:!SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!KRB5-DES-CBC3-SHA:!SRP:!DSS';
+ $0
+
+snippet ssl-options
+ # SSL certificate
+ ssl_certificate /etc/nginx/certs/${4:www.example.com}.crt;
+ ssl_certificate_key /etc/nginx/certs/${5:www.example.com}.key;
+ # ssl_dhparam /etc/nginx/certs/dhparam.pem;
+
+ ssl_prefer_server_ciphers on;
+ ssl_stapling off;
+ ssl_stapling_verify off;
+ ssl_session_cache 'shared:SSL:10m';
+ ssl_session_tickets off;
+
+ # Enable HSTS (1 year) and some security options
+ add_header Strict-Transport-Security 'max-age=31536000 includeSubDomains; preload;';
+ $0
+
+snippet security-headers
+ add_header X-Frame-Options 'DENY';
+ add_header X-Content-Type-Options 'nosniff';
+ add_header X-Frame-Options 'SAMEORIGIN';
+ add_header X-XSS-Protection '1; mode=block';
+ add_header X-Robots-Tag 'none';
+ add_header X-Download-Options 'noopen';
+ add_header X-Permitted-Cross-Domain-Policies 'none';
+ $0
+
+snippet robots.txt
+ # Tell bots to not index this site
+ location /robots.txt {
+ default_type text/plain;
+ return 200 'User-agent: *\nDisallow: /\n';
+ }
+ $0
+
+snippet basic-auth
+ auth_basic 'Restricted';
+ auth_basic_user_file ${1:/etc/nginx/htpasswd};
+ $0
+
+snippet proxy_pass
+ proxy_pass_header Date;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://${1:backend};
+ $0
+
+snippet php-fpm
+ location ~ \.php$ {
+ include fastcgi_params;
+ fastcgi_split_path_info ^(.+\.php)(/.+)$;
+ fastcgi_index index.php;
+ fastcgi_intercept_errors on;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_pass ${1:127.0.0.1:9000};
+ }
+ $0
+
+snippet php-uwsgi
+ location ~ \.php$ {
+ include uwsgi_params;
+ uwsgi_max_temp_file_size 4096m;
+ uwsgi_modifier1 14;
+ uwsgi_read_timeout 900;
+ uwsgi_send_timeout 900;
+ uwsgi_pass ${1:unix:///run/uwsgi/php.sock};
+ }
+ $0
+
+snippet redirect-ssl
+ location / {
+ return 301 https://$http_host$request_uri;
+ }
+ $0
+
+snippet redirect-other
+ # Redirect other requested hosts
+ if ($host != '${1:DOMAIN}') {
+ return 301 https://${2:DOMAIN}$request_uri;
+ }
+ $0
+
+snippet letsencrypt
+ listen [::]:80 ipv6only=off;
+
+ # Serve well-known path for letsencrypt
+ location /.well-known/acme-challenge {
+ root /etc/nginx/certs/acme;
+ default_type text/plain;
+ }
+
+ location / {
+ return 301 https://$http_host$request_uri;
+ }
+ $0
+
+snippet cut-trailing-slash
+ rewrite ^/(.*)/$ $scheme://$http_host:$server_port/$1 permanent;
+ $0
+
+snippet location
+ location ${1:/} {
+ ${0:${VISUAL}}
+ }
+
+snippet server
+ server {
+ ${0:${VISUAL}}
+ }
diff --git a/sources_non_forked/nginx.vim/syntax/nginx.vim b/sources_non_forked/nginx.vim/syntax/nginx.vim
new file mode 100644
index 00000000..ba484434
--- /dev/null
+++ b/sources_non_forked/nginx.vim/syntax/nginx.vim
@@ -0,0 +1,2304 @@
+" Vim syntax file
+" Language: nginx.conf
+" Maintainer: Chris Aumann
+" Last Change: Apr 15, 2017
+
+if exists("b:current_syntax")
+ finish
+end
+
+let b:current_syntax = "nginx"
+
+syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
+syn match ngxVariableBlock '\$\(\w\+\|{\w\+}\)' contained
+syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
+syn region ngxBlock start=+^+ end=+{+ skip=+\${\|{{\|{%+ contains=ngxComment,ngxInteger,ngxIPaddr,ngxDirectiveBlock,ngxVariableBlock,ngxString,ngxThirdPartyLuaBlock oneline
+syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString,ngxSSLCipherInsecure
+syn match ngxComment ' *#.*$'
+
+" These regular expressions where taken (and adapted) from
+" http://vim.1045645.n5.nabble.com/IPv6-support-for-quot-dns-quot-zonefile-syntax-highlighting-td1197292.html
+syn match ngxInteger '\W\zs\(\d[0-9.]*\|[0-9.]*\d\)\w\?\ze\W'
+syn match ngxIPaddr '\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{6}\(\x\{1,4}:\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[::\(\(\x\{1,4}:\)\{,6}\x\{1,4}\|\(\x\{1,4}:\)\{,5}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{1}:\(\(\x\{1,4}:\)\{,5}\x\{1,4}\|\(\x\{1,4}:\)\{,4}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{2}:\(\(\x\{1,4}:\)\{,4}\x\{1,4}\|\(\x\{1,4}:\)\{,3}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{3}:\(\(\x\{1,4}:\)\{,3}\x\{1,4}\|\(\x\{1,4}:\)\{,2}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{4}:\(\(\x\{1,4}:\)\{,2}\x\{1,4}\|\(\x\{1,4}:\)\{,1}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{5}:\(\(\x\{1,4}:\)\{,1}\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{6}:\x\{1,4}\]'
+
+" Highlight wildcard listening signs also as IPaddr
+syn match ngxIPaddr '\s\zs\[::]'
+syn match ngxIPaddr '\s\zs\*'
+
+syn keyword ngxBoolean on
+syn keyword ngxBoolean off
+
+syn keyword ngxDirectiveBlock http contained
+syn keyword ngxDirectiveBlock mail contained
+syn keyword ngxDirectiveBlock events contained
+syn keyword ngxDirectiveBlock server contained
+syn keyword ngxDirectiveBlock match contained
+syn keyword ngxDirectiveBlock types contained
+syn keyword ngxDirectiveBlock location contained
+syn keyword ngxDirectiveBlock upstream contained
+syn keyword ngxDirectiveBlock charset_map contained
+syn keyword ngxDirectiveBlock limit_except contained
+syn keyword ngxDirectiveBlock if contained
+syn keyword ngxDirectiveBlock geo contained
+syn keyword ngxDirectiveBlock map contained
+syn keyword ngxDirectiveBlock split_clients contained
+
+syn keyword ngxDirectiveImportant include
+syn keyword ngxDirectiveImportant root
+syn keyword ngxDirectiveImportant server contained
+syn region ngxDirectiveImportantServer matchgroup=ngxDirectiveImportant start=+^\s*\zsserver\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxUpstreamServerOptions,ngxString,ngxIPaddr,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxDirectiveImportant server_name
+syn keyword ngxDirectiveImportant listen contained
+syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxString,ngxIPaddr,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxDirectiveImportant internal
+syn keyword ngxDirectiveImportant proxy_pass
+syn keyword ngxDirectiveImportant memcached_pass
+syn keyword ngxDirectiveImportant fastcgi_pass
+syn keyword ngxDirectiveImportant scgi_pass
+syn keyword ngxDirectiveImportant uwsgi_pass
+syn keyword ngxDirectiveImportant try_files
+syn keyword ngxDirectiveImportant error_page
+syn keyword ngxDirectiveImportant post_action
+
+syn keyword ngxUpstreamServerOptions weight contained
+syn keyword ngxUpstreamServerOptions max_conns contained
+syn keyword ngxUpstreamServerOptions max_fails contained
+syn keyword ngxUpstreamServerOptions fail_timeout contained
+syn keyword ngxUpstreamServerOptions backup contained
+syn keyword ngxUpstreamServerOptions down contained
+syn keyword ngxUpstreamServerOptions resolve contained
+syn keyword ngxUpstreamServerOptions route contained
+syn keyword ngxUpstreamServerOptions service contained
+syn keyword ngxUpstreamServerOptions default_server contained
+syn keyword ngxUpstreamServerOptions slow_start contained
+
+syn keyword ngxListenOptions default_server contained
+syn keyword ngxListenOptions ssl contained
+syn keyword ngxListenOptions http2 contained
+syn keyword ngxListenOptions spdy contained
+syn keyword ngxListenOptions proxy_protocol contained
+syn keyword ngxListenOptions setfib contained
+syn keyword ngxListenOptions fastopen contained
+syn keyword ngxListenOptions backlog contained
+syn keyword ngxListenOptions rcvbuf contained
+syn keyword ngxListenOptions sndbuf contained
+syn keyword ngxListenOptions accept_filter contained
+syn keyword ngxListenOptions deferred contained
+syn keyword ngxListenOptions bind contained
+syn keyword ngxListenOptions ipv6only contained
+syn keyword ngxListenOptions reuseport contained
+syn keyword ngxListenOptions so_keepalive contained
+syn keyword ngxListenOptions keepidle contained
+
+syn keyword ngxDirectiveControl break
+syn keyword ngxDirectiveControl return
+syn keyword ngxDirectiveControl rewrite
+syn keyword ngxDirectiveControl set
+
+syn keyword ngxDirectiveDeprecated connections
+syn keyword ngxDirectiveDeprecated imap
+syn keyword ngxDirectiveDeprecated limit_zone
+syn keyword ngxDirectiveDeprecated mysql_test
+syn keyword ngxDirectiveDeprecated open_file_cache_retest
+syn keyword ngxDirectiveDeprecated optimize_server_names
+syn keyword ngxDirectiveDeprecated satisfy_any
+syn keyword ngxDirectiveDeprecated so_keepalive
+
+syn keyword ngxDirective absolute_redirect
+syn keyword ngxDirective accept_mutex
+syn keyword ngxDirective accept_mutex_delay
+syn keyword ngxDirective acceptex_read
+syn keyword ngxDirective access_log
+syn keyword ngxDirective add_after_body
+syn keyword ngxDirective add_before_body
+syn keyword ngxDirective add_header
+syn keyword ngxDirective addition_types
+syn keyword ngxDirective aio
+syn keyword ngxDirective aio_write
+syn keyword ngxDirective alias
+syn keyword ngxDirective allow
+syn keyword ngxDirective ancient_browser
+syn keyword ngxDirective ancient_browser_value
+syn keyword ngxDirective auth_basic
+syn keyword ngxDirective auth_basic_user_file
+syn keyword ngxDirective auth_http
+syn keyword ngxDirective auth_http_header
+syn keyword ngxDirective auth_http_pass_client_cert
+syn keyword ngxDirective auth_http_timeout
+syn keyword ngxDirective auth_jwt
+syn keyword ngxDirective auth_jwt_key_file
+syn keyword ngxDirective auth_request
+syn keyword ngxDirective auth_request_set
+syn keyword ngxDirective autoindex
+syn keyword ngxDirective autoindex_exact_size
+syn keyword ngxDirective autoindex_format
+syn keyword ngxDirective autoindex_localtime
+syn keyword ngxDirective charset
+syn keyword ngxDirective charset_map
+syn keyword ngxDirective charset_types
+syn keyword ngxDirective chunked_transfer_encoding
+syn keyword ngxDirective client_body_buffer_size
+syn keyword ngxDirective client_body_in_file_only
+syn keyword ngxDirective client_body_in_single_buffer
+syn keyword ngxDirective client_body_temp_path
+syn keyword ngxDirective client_body_timeout
+syn keyword ngxDirective client_header_buffer_size
+syn keyword ngxDirective client_header_timeout
+syn keyword ngxDirective client_max_body_size
+syn keyword ngxDirective connection_pool_size
+syn keyword ngxDirective create_full_put_path
+syn keyword ngxDirective daemon
+syn keyword ngxDirective dav_access
+syn keyword ngxDirective dav_methods
+syn keyword ngxDirective debug_connection
+syn keyword ngxDirective debug_points
+syn keyword ngxDirective default_type
+syn keyword ngxDirective degradation
+syn keyword ngxDirective degrade
+syn keyword ngxDirective deny
+syn keyword ngxDirective devpoll_changes
+syn keyword ngxDirective devpoll_events
+syn keyword ngxDirective directio
+syn keyword ngxDirective directio_alignment
+syn keyword ngxDirective disable_symlinks
+syn keyword ngxDirective empty_gif
+syn keyword ngxDirective env
+syn keyword ngxDirective epoll_events
+syn keyword ngxDirective error_log
+syn keyword ngxDirective etag
+syn keyword ngxDirective eventport_events
+syn keyword ngxDirective expires
+syn keyword ngxDirective f4f
+syn keyword ngxDirective f4f_buffer_size
+syn keyword ngxDirective fastcgi_bind
+syn keyword ngxDirective fastcgi_buffer_size
+syn keyword ngxDirective fastcgi_buffering
+syn keyword ngxDirective fastcgi_buffers
+syn keyword ngxDirective fastcgi_busy_buffers_size
+syn keyword ngxDirective fastcgi_cache
+syn keyword ngxDirective fastcgi_cache_bypass
+syn keyword ngxDirective fastcgi_cache_key
+syn keyword ngxDirective fastcgi_cache_lock
+syn keyword ngxDirective fastcgi_cache_lock_age
+syn keyword ngxDirective fastcgi_cache_lock_timeout
+syn keyword ngxDirective fastcgi_cache_max_range_offset
+syn keyword ngxDirective fastcgi_cache_methods
+syn keyword ngxDirective fastcgi_cache_min_uses
+syn keyword ngxDirective fastcgi_cache_path
+syn keyword ngxDirective fastcgi_cache_purge
+syn keyword ngxDirective fastcgi_cache_revalidate
+syn keyword ngxDirective fastcgi_cache_use_stale
+syn keyword ngxDirective fastcgi_cache_valid
+syn keyword ngxDirective fastcgi_catch_stderr
+syn keyword ngxDirective fastcgi_connect_timeout
+syn keyword ngxDirective fastcgi_force_ranges
+syn keyword ngxDirective fastcgi_hide_header
+syn keyword ngxDirective fastcgi_ignore_client_abort
+syn keyword ngxDirective fastcgi_ignore_headers
+syn keyword ngxDirective fastcgi_index
+syn keyword ngxDirective fastcgi_intercept_errors
+syn keyword ngxDirective fastcgi_keep_conn
+syn keyword ngxDirective fastcgi_limit_rate
+syn keyword ngxDirective fastcgi_max_temp_file_size
+syn keyword ngxDirective fastcgi_next_upstream
+syn keyword ngxDirective fastcgi_next_upstream_timeout
+syn keyword ngxDirective fastcgi_next_upstream_tries
+syn keyword ngxDirective fastcgi_no_cache
+syn keyword ngxDirective fastcgi_param
+syn keyword ngxDirective fastcgi_pass_header
+syn keyword ngxDirective fastcgi_pass_request_body
+syn keyword ngxDirective fastcgi_pass_request_headers
+syn keyword ngxDirective fastcgi_read_timeout
+syn keyword ngxDirective fastcgi_request_buffering
+syn keyword ngxDirective fastcgi_send_lowat
+syn keyword ngxDirective fastcgi_send_timeout
+syn keyword ngxDirective fastcgi_split_path_info
+syn keyword ngxDirective fastcgi_store
+syn keyword ngxDirective fastcgi_store_access
+syn keyword ngxDirective fastcgi_temp_file_write_size
+syn keyword ngxDirective fastcgi_temp_path
+syn keyword ngxDirective flv
+syn keyword ngxDirective geoip_city
+syn keyword ngxDirective geoip_country
+syn keyword ngxDirective geoip_org
+syn keyword ngxDirective geoip_proxy
+syn keyword ngxDirective geoip_proxy_recursive
+syn keyword ngxDirective google_perftools_profiles
+syn keyword ngxDirective gunzip
+syn keyword ngxDirective gunzip_buffers
+syn keyword ngxDirective gzip nextgroup=ngxGzipOn,ngxGzipOff skipwhite
+syn keyword ngxGzipOn on contained
+syn keyword ngxGzipOff off contained
+syn keyword ngxDirective gzip_buffers
+syn keyword ngxDirective gzip_comp_level
+syn keyword ngxDirective gzip_disable
+syn keyword ngxDirective gzip_hash
+syn keyword ngxDirective gzip_http_version
+syn keyword ngxDirective gzip_min_length
+syn keyword ngxDirective gzip_no_buffer
+syn keyword ngxDirective gzip_proxied
+syn keyword ngxDirective gzip_static
+syn keyword ngxDirective gzip_types
+syn keyword ngxDirective gzip_vary
+syn keyword ngxDirective gzip_window
+syn keyword ngxDirective hash
+syn keyword ngxDirective health_check
+syn keyword ngxDirective health_check_timeout
+syn keyword ngxDirective hls
+syn keyword ngxDirective hls_buffers
+syn keyword ngxDirective hls_forward_args
+syn keyword ngxDirective hls_fragment
+syn keyword ngxDirective hls_mp4_buffer_size
+syn keyword ngxDirective hls_mp4_max_buffer_size
+syn keyword ngxDirective http2_chunk_size
+syn keyword ngxDirective http2_body_preread_size
+syn keyword ngxDirective http2_idle_timeout
+syn keyword ngxDirective http2_max_concurrent_streams
+syn keyword ngxDirective http2_max_field_size
+syn keyword ngxDirective http2_max_header_size
+syn keyword ngxDirective http2_max_requests
+syn keyword ngxDirective http2_recv_buffer_size
+syn keyword ngxDirective http2_recv_timeout
+syn keyword ngxDirective if_modified_since
+syn keyword ngxDirective ignore_invalid_headers
+syn keyword ngxDirective image_filter
+syn keyword ngxDirective image_filter_buffer
+syn keyword ngxDirective image_filter_interlace
+syn keyword ngxDirective image_filter_jpeg_quality
+syn keyword ngxDirective image_filter_sharpen
+syn keyword ngxDirective image_filter_transparency
+syn keyword ngxDirective image_filter_webp_quality
+syn keyword ngxDirective imap_auth
+syn keyword ngxDirective imap_capabilities
+syn keyword ngxDirective imap_client_buffer
+syn keyword ngxDirective index
+syn keyword ngxDirective iocp_threads
+syn keyword ngxDirective ip_hash
+syn keyword ngxDirective js_access
+syn keyword ngxDirective js_content
+syn keyword ngxDirective js_filter
+syn keyword ngxDirective js_include
+syn keyword ngxDirective js_preread
+syn keyword ngxDirective js_set
+syn keyword ngxDirective keepalive
+syn keyword ngxDirective keepalive_disable
+syn keyword ngxDirective keepalive_requests
+syn keyword ngxDirective keepalive_timeout
+syn keyword ngxDirective kqueue_changes
+syn keyword ngxDirective kqueue_events
+syn keyword ngxDirective large_client_header_buffers
+syn keyword ngxDirective least_conn
+syn keyword ngxDirective least_time
+syn keyword ngxDirective limit_conn
+syn keyword ngxDirective limit_conn_log_level
+syn keyword ngxDirective limit_conn_status
+syn keyword ngxDirective limit_conn_zone
+syn keyword ngxDirective limit_rate
+syn keyword ngxDirective limit_rate_after
+syn keyword ngxDirective limit_req
+syn keyword ngxDirective limit_req_log_level
+syn keyword ngxDirective limit_req_status
+syn keyword ngxDirective limit_req_zone
+syn keyword ngxDirective lingering_close
+syn keyword ngxDirective lingering_time
+syn keyword ngxDirective lingering_timeout
+syn keyword ngxDirective load_module
+syn keyword ngxDirective lock_file
+syn keyword ngxDirective log_format
+syn keyword ngxDirective log_not_found
+syn keyword ngxDirective log_subrequest
+syn keyword ngxDirective map_hash_bucket_size
+syn keyword ngxDirective map_hash_max_size
+syn keyword ngxDirective master_process
+syn keyword ngxDirective max_ranges
+syn keyword ngxDirective memcached_bind
+syn keyword ngxDirective memcached_buffer_size
+syn keyword ngxDirective memcached_connect_timeout
+syn keyword ngxDirective memcached_force_ranges
+syn keyword ngxDirective memcached_gzip_flag
+syn keyword ngxDirective memcached_next_upstream
+syn keyword ngxDirective memcached_next_upstream_timeout
+syn keyword ngxDirective memcached_next_upstream_tries
+syn keyword ngxDirective memcached_read_timeout
+syn keyword ngxDirective memcached_send_timeout
+syn keyword ngxDirective merge_slashes
+syn keyword ngxDirective min_delete_depth
+syn keyword ngxDirective modern_browser
+syn keyword ngxDirective modern_browser_value
+syn keyword ngxDirective mp4
+syn keyword ngxDirective mp4_buffer_size
+syn keyword ngxDirective mp4_max_buffer_size
+syn keyword ngxDirective mp4_limit_rate
+syn keyword ngxDirective mp4_limit_rate_after
+syn keyword ngxDirective msie_padding
+syn keyword ngxDirective msie_refresh
+syn keyword ngxDirective multi_accept
+syn keyword ngxDirective ntlm
+syn keyword ngxDirective open_file_cache
+syn keyword ngxDirective open_file_cache_errors
+syn keyword ngxDirective open_file_cache_events
+syn keyword ngxDirective open_file_cache_min_uses
+syn keyword ngxDirective open_file_cache_valid
+syn keyword ngxDirective open_log_file_cache
+syn keyword ngxDirective output_buffers
+syn keyword ngxDirective override_charset
+syn keyword ngxDirective pcre_jit
+syn keyword ngxDirective perl
+syn keyword ngxDirective perl_modules
+syn keyword ngxDirective perl_require
+syn keyword ngxDirective perl_set
+syn keyword ngxDirective pid
+syn keyword ngxDirective pop3_auth
+syn keyword ngxDirective pop3_capabilities
+syn keyword ngxDirective port_in_redirect
+syn keyword ngxDirective post_acceptex
+syn keyword ngxDirective postpone_gzipping
+syn keyword ngxDirective postpone_output
+syn keyword ngxDirective preread_buffer_size
+syn keyword ngxDirective preread_timeout
+syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
+syn keyword ngxMailProtocol imap pop3 smtp contained
+syn keyword ngxDirective proxy
+syn keyword ngxDirective proxy_bind
+syn keyword ngxDirective proxy_buffer
+syn keyword ngxDirective proxy_buffer_size
+syn keyword ngxDirective proxy_buffering
+syn keyword ngxDirective proxy_buffers
+syn keyword ngxDirective proxy_busy_buffers_size
+syn keyword ngxDirective proxy_cache
+syn keyword ngxDirective proxy_cache_bypass
+syn keyword ngxDirective proxy_cache_convert_head
+syn keyword ngxDirective proxy_cache_key
+syn keyword ngxDirective proxy_cache_lock
+syn keyword ngxDirective proxy_cache_lock_age
+syn keyword ngxDirective proxy_cache_lock_timeout
+syn keyword ngxDirective proxy_cache_max_range_offset
+syn keyword ngxDirective proxy_cache_methods
+syn keyword ngxDirective proxy_cache_min_uses
+syn keyword ngxDirective proxy_cache_path
+syn keyword ngxDirective proxy_cache_purge
+syn keyword ngxDirective proxy_cache_revalidate
+syn keyword ngxDirective proxy_cache_use_stale
+syn keyword ngxDirective proxy_cache_valid
+syn keyword ngxDirective proxy_connect_timeout
+syn keyword ngxDirective proxy_cookie_domain
+syn keyword ngxDirective proxy_cookie_path
+syn keyword ngxDirective proxy_download_rate
+syn keyword ngxDirective proxy_force_ranges
+syn keyword ngxDirective proxy_headers_hash_bucket_size
+syn keyword ngxDirective proxy_headers_hash_max_size
+syn keyword ngxDirective proxy_hide_header
+syn keyword ngxDirective proxy_http_version
+syn keyword ngxDirective proxy_ignore_client_abort
+syn keyword ngxDirective proxy_ignore_headers
+syn keyword ngxDirective proxy_intercept_errors
+syn keyword ngxDirective proxy_limit_rate
+syn keyword ngxDirective proxy_max_temp_file_size
+syn keyword ngxDirective proxy_method
+syn keyword ngxDirective proxy_next_upstream contained
+syn region ngxDirectiveProxyNextUpstream matchgroup=ngxDirective start=+^\s*\zsproxy_next_upstream\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxProxyNextUpstreamOptions,ngxString,ngxTemplateVar
+syn keyword ngxDirective proxy_next_upstream_timeout
+syn keyword ngxDirective proxy_next_upstream_tries
+syn keyword ngxDirective proxy_no_cache
+syn keyword ngxDirective proxy_pass_error_message
+syn keyword ngxDirective proxy_pass_header
+syn keyword ngxDirective proxy_pass_request_body
+syn keyword ngxDirective proxy_pass_request_headers
+syn keyword ngxDirective proxy_protocol
+syn keyword ngxDirective proxy_protocol_timeout
+syn keyword ngxDirective proxy_read_timeout
+syn keyword ngxDirective proxy_redirect
+syn keyword ngxDirective proxy_request_buffering
+syn keyword ngxDirective proxy_responses
+syn keyword ngxDirective proxy_send_lowat
+syn keyword ngxDirective proxy_send_timeout
+syn keyword ngxDirective proxy_set_body
+syn keyword ngxDirective proxy_set_header
+syn keyword ngxDirective proxy_ssl_certificate
+syn keyword ngxDirective proxy_ssl_certificate_key
+syn keyword ngxDirective proxy_ssl_ciphers
+syn keyword ngxDirective proxy_ssl_crl
+syn keyword ngxDirective proxy_ssl_name
+syn keyword ngxDirective proxy_ssl_password_file
+syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective proxy_ssl_server_name
+syn keyword ngxDirective proxy_ssl_session_reuse
+syn keyword ngxDirective proxy_ssl_trusted_certificate
+syn keyword ngxDirective proxy_ssl_verify
+syn keyword ngxDirective proxy_ssl_verify_depth
+syn keyword ngxDirective proxy_store
+syn keyword ngxDirective proxy_store_access
+syn keyword ngxDirective proxy_temp_file_write_size
+syn keyword ngxDirective proxy_temp_path
+syn keyword ngxDirective proxy_timeout
+syn keyword ngxDirective proxy_upload_rate
+syn keyword ngxDirective queue
+syn keyword ngxDirective random_index
+syn keyword ngxDirective read_ahead
+syn keyword ngxDirective real_ip_header
+syn keyword ngxDirective real_ip_recursive
+syn keyword ngxDirective recursive_error_pages
+syn keyword ngxDirective referer_hash_bucket_size
+syn keyword ngxDirective referer_hash_max_size
+syn keyword ngxDirective request_pool_size
+syn keyword ngxDirective reset_timedout_connection
+syn keyword ngxDirective resolver
+syn keyword ngxDirective resolver_timeout
+syn keyword ngxDirective rewrite_log
+syn keyword ngxDirective rtsig_overflow_events
+syn keyword ngxDirective rtsig_overflow_test
+syn keyword ngxDirective rtsig_overflow_threshold
+syn keyword ngxDirective rtsig_signo
+syn keyword ngxDirective satisfy
+syn keyword ngxDirective scgi_bind
+syn keyword ngxDirective scgi_buffer_size
+syn keyword ngxDirective scgi_buffering
+syn keyword ngxDirective scgi_buffers
+syn keyword ngxDirective scgi_busy_buffers_size
+syn keyword ngxDirective scgi_cache
+syn keyword ngxDirective scgi_cache_bypass
+syn keyword ngxDirective scgi_cache_key
+syn keyword ngxDirective scgi_cache_lock
+syn keyword ngxDirective scgi_cache_lock_age
+syn keyword ngxDirective scgi_cache_lock_timeout
+syn keyword ngxDirective scgi_cache_max_range_offset
+syn keyword ngxDirective scgi_cache_methods
+syn keyword ngxDirective scgi_cache_min_uses
+syn keyword ngxDirective scgi_cache_path
+syn keyword ngxDirective scgi_cache_purge
+syn keyword ngxDirective scgi_cache_revalidate
+syn keyword ngxDirective scgi_cache_use_stale
+syn keyword ngxDirective scgi_cache_valid
+syn keyword ngxDirective scgi_connect_timeout
+syn keyword ngxDirective scgi_force_ranges
+syn keyword ngxDirective scgi_hide_header
+syn keyword ngxDirective scgi_ignore_client_abort
+syn keyword ngxDirective scgi_ignore_headers
+syn keyword ngxDirective scgi_intercept_errors
+syn keyword ngxDirective scgi_limit_rate
+syn keyword ngxDirective scgi_max_temp_file_size
+syn keyword ngxDirective scgi_next_upstream
+syn keyword ngxDirective scgi_next_upstream_timeout
+syn keyword ngxDirective scgi_next_upstream_tries
+syn keyword ngxDirective scgi_no_cache
+syn keyword ngxDirective scgi_param
+syn keyword ngxDirective scgi_pass_header
+syn keyword ngxDirective scgi_pass_request_body
+syn keyword ngxDirective scgi_pass_request_headers
+syn keyword ngxDirective scgi_read_timeout
+syn keyword ngxDirective scgi_request_buffering
+syn keyword ngxDirective scgi_send_timeout
+syn keyword ngxDirective scgi_store
+syn keyword ngxDirective scgi_store_access
+syn keyword ngxDirective scgi_temp_file_write_size
+syn keyword ngxDirective scgi_temp_path
+syn keyword ngxDirective secure_link
+syn keyword ngxDirective secure_link_md5
+syn keyword ngxDirective secure_link_secret
+syn keyword ngxDirective send_lowat
+syn keyword ngxDirective send_timeout
+syn keyword ngxDirective sendfile
+syn keyword ngxDirective sendfile_max_chunk
+syn keyword ngxDirective server_name_in_redirect
+syn keyword ngxDirective server_names_hash_bucket_size
+syn keyword ngxDirective server_names_hash_max_size
+syn keyword ngxDirective server_tokens
+syn keyword ngxDirective session_log
+syn keyword ngxDirective session_log_format
+syn keyword ngxDirective session_log_zone
+syn keyword ngxDirective set_real_ip_from
+syn keyword ngxDirective slice
+syn keyword ngxDirective smtp_auth
+syn keyword ngxDirective smtp_capabilities
+syn keyword ngxDirective smtp_client_buffer
+syn keyword ngxDirective smtp_greeting_delay
+syn keyword ngxDirective source_charset
+syn keyword ngxDirective spdy_chunk_size
+syn keyword ngxDirective spdy_headers_comp
+syn keyword ngxDirective spdy_keepalive_timeout
+syn keyword ngxDirective spdy_max_concurrent_streams
+syn keyword ngxDirective spdy_pool_size
+syn keyword ngxDirective spdy_recv_buffer_size
+syn keyword ngxDirective spdy_recv_timeout
+syn keyword ngxDirective spdy_streams_index_size
+syn keyword ngxDirective ssi
+syn keyword ngxDirective ssi_ignore_recycled_buffers
+syn keyword ngxDirective ssi_last_modified
+syn keyword ngxDirective ssi_min_file_chunk
+syn keyword ngxDirective ssi_silent_errors
+syn keyword ngxDirective ssi_types
+syn keyword ngxDirective ssi_value_length
+syn keyword ngxDirective ssl
+syn keyword ngxDirective ssl_buffer_size
+syn keyword ngxDirective ssl_certificate
+syn keyword ngxDirective ssl_certificate_key
+syn keyword ngxDirective ssl_ciphers
+syn keyword ngxDirective ssl_client_certificate
+syn keyword ngxDirective ssl_crl
+syn keyword ngxDirective ssl_dhparam
+syn keyword ngxDirective ssl_ecdh_curve
+syn keyword ngxDirective ssl_engine
+syn keyword ngxDirective ssl_handshake_timeout
+syn keyword ngxDirective ssl_password_file
+syn keyword ngxDirective ssl_prefer_server_ciphers nextgroup=ngxSSLPreferServerCiphersOff,ngxSSLPreferServerCiphersOn skipwhite
+syn keyword ngxSSLPreferServerCiphersOn on contained
+syn keyword ngxSSLPreferServerCiphersOff off contained
+syn keyword ngxDirective ssl_preread
+syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn match ngxSSLProtocol 'TLSv1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn match ngxSSLProtocol 'TLSv1\.1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn match ngxSSLProtocol 'TLSv1\.2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+
+" Do not enable highlighting of insecure protocols if sslecure is loaded
+if !exists('g:loaded_sslsecure')
+ syn keyword ngxSSLProtocolDeprecated SSLv2 SSLv3 contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+else
+ syn match ngxSSLProtocol 'SSLv2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+ syn match ngxSSLProtocol 'SSLv3' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+endif
+
+syn keyword ngxDirective ssl_session_cache
+syn keyword ngxDirective ssl_session_ticket_key
+syn keyword ngxDirective ssl_session_tickets nextgroup=ngxSSLSessionTicketsOn,ngxSSLSessionTicketsOff skipwhite
+syn keyword ngxSSLSessionTicketsOn on contained
+syn keyword ngxSSLSessionTicketsOff off contained
+syn keyword ngxDirective ssl_session_timeout
+syn keyword ngxDirective ssl_stapling
+syn keyword ngxDirective ssl_stapling_file
+syn keyword ngxDirective ssl_stapling_responder
+syn keyword ngxDirective ssl_stapling_verify
+syn keyword ngxDirective ssl_trusted_certificate
+syn keyword ngxDirective ssl_verify_client
+syn keyword ngxDirective ssl_verify_depth
+syn keyword ngxDirective starttls
+syn keyword ngxDirective state
+syn keyword ngxDirective status
+syn keyword ngxDirective status_format
+syn keyword ngxDirective status_zone
+syn keyword ngxDirective sticky contained
+syn keyword ngxDirective sticky_cookie_insert contained
+syn region ngxDirectiveSticky matchgroup=ngxDirective start=+^\s*\zssticky\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxCookieOptions,ngxString,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxDirective stub_status
+syn keyword ngxDirective sub_filter
+syn keyword ngxDirective sub_filter_last_modified
+syn keyword ngxDirective sub_filter_once
+syn keyword ngxDirective sub_filter_types
+syn keyword ngxDirective tcp_nodelay
+syn keyword ngxDirective tcp_nopush
+syn keyword ngxDirective thread_pool
+syn keyword ngxDirective thread_stack_size
+syn keyword ngxDirective timeout
+syn keyword ngxDirective timer_resolution
+syn keyword ngxDirective types_hash_bucket_size
+syn keyword ngxDirective types_hash_max_size
+syn keyword ngxDirective underscores_in_headers
+syn keyword ngxDirective uninitialized_variable_warn
+syn keyword ngxDirective upstream_conf
+syn keyword ngxDirective use
+syn keyword ngxDirective user
+syn keyword ngxDirective userid
+syn keyword ngxDirective userid_domain
+syn keyword ngxDirective userid_expires
+syn keyword ngxDirective userid_mark
+syn keyword ngxDirective userid_name
+syn keyword ngxDirective userid_p3p
+syn keyword ngxDirective userid_path
+syn keyword ngxDirective userid_service
+syn keyword ngxDirective uwsgi_bind
+syn keyword ngxDirective uwsgi_buffer_size
+syn keyword ngxDirective uwsgi_buffering
+syn keyword ngxDirective uwsgi_buffers
+syn keyword ngxDirective uwsgi_busy_buffers_size
+syn keyword ngxDirective uwsgi_cache
+syn keyword ngxDirective uwsgi_cache_bypass
+syn keyword ngxDirective uwsgi_cache_key
+syn keyword ngxDirective uwsgi_cache_lock
+syn keyword ngxDirective uwsgi_cache_lock_age
+syn keyword ngxDirective uwsgi_cache_lock_timeout
+syn keyword ngxDirective uwsgi_cache_methods
+syn keyword ngxDirective uwsgi_cache_min_uses
+syn keyword ngxDirective uwsgi_cache_path
+syn keyword ngxDirective uwsgi_cache_purge
+syn keyword ngxDirective uwsgi_cache_revalidate
+syn keyword ngxDirective uwsgi_cache_use_stale
+syn keyword ngxDirective uwsgi_cache_valid
+syn keyword ngxDirective uwsgi_connect_timeout
+syn keyword ngxDirective uwsgi_force_ranges
+syn keyword ngxDirective uwsgi_hide_header
+syn keyword ngxDirective uwsgi_ignore_client_abort
+syn keyword ngxDirective uwsgi_ignore_headers
+syn keyword ngxDirective uwsgi_intercept_errors
+syn keyword ngxDirective uwsgi_limit_rate
+syn keyword ngxDirective uwsgi_max_temp_file_size
+syn keyword ngxDirective uwsgi_modifier1
+syn keyword ngxDirective uwsgi_modifier2
+syn keyword ngxDirective uwsgi_next_upstream
+syn keyword ngxDirective uwsgi_next_upstream_timeout
+syn keyword ngxDirective uwsgi_next_upstream_tries
+syn keyword ngxDirective uwsgi_no_cache
+syn keyword ngxDirective uwsgi_param
+syn keyword ngxDirective uwsgi_pass
+syn keyword ngxDirective uwsgi_pass_header
+syn keyword ngxDirective uwsgi_pass_request_body
+syn keyword ngxDirective uwsgi_pass_request_headers
+syn keyword ngxDirective uwsgi_read_timeout
+syn keyword ngxDirective uwsgi_request_buffering
+syn keyword ngxDirective uwsgi_send_timeout
+syn keyword ngxDirective uwsgi_ssl_certificate
+syn keyword ngxDirective uwsgi_ssl_certificate_key
+syn keyword ngxDirective uwsgi_ssl_ciphers
+syn keyword ngxDirective uwsgi_ssl_crl
+syn keyword ngxDirective uwsgi_ssl_name
+syn keyword ngxDirective uwsgi_ssl_password_file
+syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective uwsgi_ssl_server_name
+syn keyword ngxDirective uwsgi_ssl_session_reuse
+syn keyword ngxDirective uwsgi_ssl_trusted_certificate
+syn keyword ngxDirective uwsgi_ssl_verify
+syn keyword ngxDirective uwsgi_ssl_verify_depth
+syn keyword ngxDirective uwsgi_store
+syn keyword ngxDirective uwsgi_store_access
+syn keyword ngxDirective uwsgi_string
+syn keyword ngxDirective uwsgi_temp_file_write_size
+syn keyword ngxDirective uwsgi_temp_path
+syn keyword ngxDirective valid_referers
+syn keyword ngxDirective variables_hash_bucket_size
+syn keyword ngxDirective variables_hash_max_size
+syn keyword ngxDirective worker_aio_requests
+syn keyword ngxDirective worker_connections
+syn keyword ngxDirective worker_cpu_affinity
+syn keyword ngxDirective worker_priority
+syn keyword ngxDirective worker_processes
+syn keyword ngxDirective worker_rlimit_core
+syn keyword ngxDirective worker_rlimit_nofile
+syn keyword ngxDirective worker_rlimit_sigpending
+syn keyword ngxDirective worker_threads
+syn keyword ngxDirective working_directory
+syn keyword ngxDirective xclient
+syn keyword ngxDirective xml_entities
+syn keyword ngxDirective xslt_last_modified
+syn keyword ngxDirective xslt_param
+syn keyword ngxDirective xslt_string_param
+syn keyword ngxDirective xslt_stylesheet
+syn keyword ngxDirective xslt_types
+syn keyword ngxDirective zone
+
+" Do not enable highlighting of insecure ciphers if sslecure is loaded
+if !exists('g:loaded_sslsecure')
+ " Mark insecure SSL Ciphers (Note: List might not not complete)
+ " Reference: https://www.openssl.org/docs/man1.0.2/apps/ciphers.html
+ syn match ngxSSLCipherInsecure '[^!]\zsSSLv3'
+ syn match ngxSSLCipherInsecure '[^!]\zsSSLv2'
+ syn match ngxSSLCipherInsecure '[^!]\zsHIGH'
+ syn match ngxSSLCipherInsecure '[^!]\zsMEDIUM'
+ syn match ngxSSLCipherInsecure '[^!]\zsLOW'
+ syn match ngxSSLCipherInsecure '[^!]\zsDEFAULT'
+ syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFDEFAULT'
+ syn match ngxSSLCipherInsecure '[^!]\zsALL'
+ syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL'
+
+ " SHA ciphers are only used in HMAC with all known OpenSSL/ LibreSSL cipher suites and MAC
+ " usage is still considered safe
+ " syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D' " Match SHA1 without matching SHA256+
+ " syn match ngxSSLCipherInsecure '[^!]\zsSHA1'
+ syn match ngxSSLCipherInsecure '[^!]\zsMD5'
+ syn match ngxSSLCipherInsecure '[^!]\zsRC2'
+ syn match ngxSSLCipherInsecure '[^!]\zsRC4'
+ syn match ngxSSLCipherInsecure '[^!]\zs3DES'
+ syn match ngxSSLCipherInsecure '[^!3]\zsDES'
+ syn match ngxSSLCipherInsecure '[^!]\zsaDSS'
+ syn match ngxSSLCipherInsecure '[^!a]\zsDSS'
+ syn match ngxSSLCipherInsecure '[^!]\zsPSK'
+ syn match ngxSSLCipherInsecure '[^!]\zsIDEA'
+ syn match ngxSSLCipherInsecure '[^!]\zsSEED'
+ syn match ngxSSLCipherInsecure '[^!]\zsEXP\w*' " Match all EXPORT ciphers
+ syn match ngxSSLCipherInsecure '[^!]\zsaGOST\w*' " Match all GOST ciphers
+ syn match ngxSSLCipherInsecure '[^!]\zskGOST\w*'
+ syn match ngxSSLCipherInsecure '[^!ak]\zsGOST\w*'
+ syn match ngxSSLCipherInsecure '[^!]\zs[kae]\?FZA' " Not implemented
+ syn match ngxSSLCipherInsecure '[^!]\zsECB'
+ syn match ngxSSLCipherInsecure '[^!]\zs[aes]NULL'
+
+ " Anonymous cipher suites should never be used
+ syn match ngxSSLCipherInsecure '[^!ECa]\zsDH\ze[^E]' " Try to match DH without DHE, EDH, EECDH, etc.
+ syn match ngxSSLCipherInsecure '[^!EA]\zsECDH\ze[^E]' " Do not match EECDH, ECDHE
+ syn match ngxSSLCipherInsecure '[^!]\zsADH'
+ syn match ngxSSLCipherInsecure '[^!]\zskDHE'
+ syn match ngxSSLCipherInsecure '[^!]\zskEDH'
+ syn match ngxSSLCipherInsecure '[^!]\zskECDHE'
+ syn match ngxSSLCipherInsecure '[^!]\zskEECDH'
+ syn match ngxSSLCipherInsecure '[^!E]\zsAECDH'
+endif
+
+syn keyword ngxProxyNextUpstreamOptions error contained
+syn keyword ngxProxyNextUpstreamOptions timeout contained
+syn keyword ngxProxyNextUpstreamOptions invalid_header contained
+syn keyword ngxProxyNextUpstreamOptions http_500 contained
+syn keyword ngxProxyNextUpstreamOptions http_502 contained
+syn keyword ngxProxyNextUpstreamOptions http_503 contained
+syn keyword ngxProxyNextUpstreamOptions http_504 contained
+syn keyword ngxProxyNextUpstreamOptions http_403 contained
+syn keyword ngxProxyNextUpstreamOptions http_404 contained
+syn keyword ngxProxyNextUpstreamOptions http_429 contained
+syn keyword ngxProxyNextUpstreamOptions non_idempotent contained
+syn keyword ngxProxyNextUpstreamOptions off contained
+
+syn keyword ngxStickyOptions cookie contained
+syn region ngxStickyOptionsCookie matchgroup=ngxStickyOptions start=+^\s*\zssticky\s\s*cookie\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxCookieOptions,ngxString,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxStickyOptions route contained
+syn keyword ngxStickyOptions learn contained
+
+syn keyword ngxCookieOptions expires contained
+syn keyword ngxCookieOptions domain contained
+syn keyword ngxCookieOptions httponly contained
+syn keyword ngxCookieOptions secure contained
+syn keyword ngxCookieOptions path contained
+
+" 3rd party module list:
+" https://www.nginx.com/resources/wiki/modules/
+
+" Accept Language Module
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty set_from_accept_language
+
+" Access Key Module (DEPRECATED)
+" Denies access unless the request URL contains an access key.
+syn keyword ngxDirectiveDeprecated accesskey
+syn keyword ngxDirectiveDeprecated accesskey_arg
+syn keyword ngxDirectiveDeprecated accesskey_hashmethod
+syn keyword ngxDirectiveDeprecated accesskey_signature
+
+" Asynchronous FastCGI Module
+" Primarily a modified version of the Nginx FastCGI module which implements multiplexing of connections, allowing a single FastCGI server to handle many concurrent requests.
+" syn keyword ngxDirectiveThirdParty fastcgi_bind
+" syn keyword ngxDirectiveThirdParty fastcgi_buffer_size
+" syn keyword ngxDirectiveThirdParty fastcgi_buffers
+" syn keyword ngxDirectiveThirdParty fastcgi_busy_buffers_size
+" syn keyword ngxDirectiveThirdParty fastcgi_cache
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_key
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_methods
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_min_uses
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_path
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_use_stale
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_valid
+" syn keyword ngxDirectiveThirdParty fastcgi_catch_stderr
+" syn keyword ngxDirectiveThirdParty fastcgi_connect_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_hide_header
+" syn keyword ngxDirectiveThirdParty fastcgi_ignore_client_abort
+" syn keyword ngxDirectiveThirdParty fastcgi_ignore_headers
+" syn keyword ngxDirectiveThirdParty fastcgi_index
+" syn keyword ngxDirectiveThirdParty fastcgi_intercept_errors
+" syn keyword ngxDirectiveThirdParty fastcgi_max_temp_file_size
+" syn keyword ngxDirectiveThirdParty fastcgi_next_upstream
+" syn keyword ngxDirectiveThirdParty fastcgi_param
+" syn keyword ngxDirectiveThirdParty fastcgi_pass
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_header
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_body
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_headers
+" syn keyword ngxDirectiveThirdParty fastcgi_read_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_send_lowat
+" syn keyword ngxDirectiveThirdParty fastcgi_send_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_split_path_info
+" syn keyword ngxDirectiveThirdParty fastcgi_store
+" syn keyword ngxDirectiveThirdParty fastcgi_store_access
+" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
+" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
+syn keyword ngxDirectiveDeprecated fastcgi_upstream_fail_timeout
+syn keyword ngxDirectiveDeprecated fastcgi_upstream_max_fails
+
+" Akamai G2O Module
+" Nginx Module for Authenticating Akamai G2O requests
+syn keyword ngxDirectiveThirdParty g2o
+syn keyword ngxDirectiveThirdParty g2o_nonce
+syn keyword ngxDirectiveThirdParty g2o_key
+
+" Lua Module
+" You can be very simple to execute lua code for nginx
+syn keyword ngxDirectiveThirdParty lua_file
+
+" Array Variable Module
+" Add support for array-typed variables to nginx config files
+syn keyword ngxDirectiveThirdParty array_split
+syn keyword ngxDirectiveThirdParty array_join
+syn keyword ngxDirectiveThirdParty array_map
+syn keyword ngxDirectiveThirdParty array_map_op
+
+" Nginx Audio Track for HTTP Live Streaming
+" This nginx module generates audio track for hls streams on the fly.
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_rootpath
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_format
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_header
+
+" AWS Proxy Module
+" Nginx module to proxy to authenticated AWS services
+syn keyword ngxDirectiveThirdParty aws_access_key
+syn keyword ngxDirectiveThirdParty aws_key_scope
+syn keyword ngxDirectiveThirdParty aws_signing_key
+syn keyword ngxDirectiveThirdParty aws_endpoint
+syn keyword ngxDirectiveThirdParty aws_s3_bucket
+syn keyword ngxDirectiveThirdParty aws_sign
+
+" Backtrace module
+" A Nginx module to dump backtrace when a worker process exits abnormally
+syn keyword ngxDirectiveThirdParty backtrace_log
+syn keyword ngxDirectiveThirdParty backtrace_max_stack_size
+
+" Brotli Module
+" Nginx module for Brotli compression
+syn keyword ngxDirectiveThirdParty brotli_static
+syn keyword ngxDirectiveThirdParty brotli
+syn keyword ngxDirectiveThirdParty brotli_types
+syn keyword ngxDirectiveThirdParty brotli_buffers
+syn keyword ngxDirectiveThirdParty brotli_comp_level
+syn keyword ngxDirectiveThirdParty brotli_window
+syn keyword ngxDirectiveThirdParty brotli_min_length
+
+" Cache Purge Module
+" Adds ability to purge content from FastCGI, proxy, SCGI and uWSGI caches.
+syn keyword ngxDirectiveThirdParty fastcgi_cache_purge
+syn keyword ngxDirectiveThirdParty proxy_cache_purge
+" syn keyword ngxDirectiveThirdParty scgi_cache_purge
+" syn keyword ngxDirectiveThirdParty uwsgi_cache_purge
+
+" Chunkin Module (DEPRECATED)
+" HTTP 1.1 chunked-encoding request body support for Nginx.
+syn keyword ngxDirectiveDeprecated chunkin
+syn keyword ngxDirectiveDeprecated chunkin_keepalive
+syn keyword ngxDirectiveDeprecated chunkin_max_chunks_per_buf
+syn keyword ngxDirectiveDeprecated chunkin_resume
+
+" Circle GIF Module
+" Generates simple circle images with the colors and size specified in the URL.
+syn keyword ngxDirectiveThirdParty circle_gif
+syn keyword ngxDirectiveThirdParty circle_gif_max_radius
+syn keyword ngxDirectiveThirdParty circle_gif_min_radius
+syn keyword ngxDirectiveThirdParty circle_gif_step_radius
+
+" Nginx-Clojure Module
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty jvm_path
+syn keyword ngxDirectiveThirdParty jvm_var
+syn keyword ngxDirectiveThirdParty jvm_classpath
+syn keyword ngxDirectiveThirdParty jvm_classpath_check
+syn keyword ngxDirectiveThirdParty jvm_workers
+syn keyword ngxDirectiveThirdParty jvm_options
+syn keyword ngxDirectiveThirdParty jvm_handler_type
+syn keyword ngxDirectiveThirdParty jvm_init_handler_name
+syn keyword ngxDirectiveThirdParty jvm_init_handler_code
+syn keyword ngxDirectiveThirdParty jvm_exit_handler_name
+syn keyword ngxDirectiveThirdParty jvm_exit_handler_code
+syn keyword ngxDirectiveThirdParty handlers_lazy_init
+syn keyword ngxDirectiveThirdParty auto_upgrade_ws
+syn keyword ngxDirectiveThirdParty content_handler_type
+syn keyword ngxDirectiveThirdParty content_handler_name
+syn keyword ngxDirectiveThirdParty content_handler_code
+syn keyword ngxDirectiveThirdParty rewrite_handler_type
+syn keyword ngxDirectiveThirdParty rewrite_handler_name
+syn keyword ngxDirectiveThirdParty rewrite_handler_code
+syn keyword ngxDirectiveThirdParty access_handler_type
+syn keyword ngxDirectiveThirdParty access_handler_name
+syn keyword ngxDirectiveThirdParty access_handler_code
+syn keyword ngxDirectiveThirdParty header_filter_type
+syn keyword ngxDirectiveThirdParty header_filter_name
+syn keyword ngxDirectiveThirdParty header_filter_code
+syn keyword ngxDirectiveThirdParty content_handler_property
+syn keyword ngxDirectiveThirdParty rewrite_handler_property
+syn keyword ngxDirectiveThirdParty access_handler_property
+syn keyword ngxDirectiveThirdParty header_filter_property
+syn keyword ngxDirectiveThirdParty always_read_body
+syn keyword ngxDirectiveThirdParty shared_map
+syn keyword ngxDirectiveThirdParty write_page_size
+
+" Upstream Consistent Hash
+" A load balancer that uses an internal consistent hash ring to select the right backend node.
+syn keyword ngxDirectiveThirdParty consistent_hash
+
+" Nginx Development Kit
+" The NDK is an Nginx module that is designed to extend the core functionality of the excellent Nginx webserver in a way that can be used as a basis of other Nginx modules.
+" NDK_UPSTREAM_LIST
+" This submodule provides a directive that creates a list of upstreams, with optional weighting. This list can then be used by other modules to hash over the upstreams however they choose.
+syn keyword ngxDirectiveThirdParty upstream_list
+
+" Drizzle Module
+" Upstream module for talking to MySQL and Drizzle directly
+syn keyword ngxDirectiveThirdParty drizzle_server
+syn keyword ngxDirectiveThirdParty drizzle_keepalive
+syn keyword ngxDirectiveThirdParty drizzle_query
+syn keyword ngxDirectiveThirdParty drizzle_pass
+syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
+syn keyword ngxDirectiveThirdParty drizzle_send_query_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_cols_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_rows_timeout
+syn keyword ngxDirectiveThirdParty drizzle_buffer_size
+syn keyword ngxDirectiveThirdParty drizzle_module_header
+syn keyword ngxDirectiveThirdParty drizzle_status
+
+" Dynamic ETags Module
+" Attempt at handling ETag / If-None-Match on proxied content.
+syn keyword ngxDirectiveThirdParty dynamic_etags
+
+" Echo Module
+" Bringing the power of "echo", "sleep", "time" and more to Nginx's config file
+syn keyword ngxDirectiveThirdParty echo
+syn keyword ngxDirectiveThirdParty echo_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_blocking_sleep
+syn keyword ngxDirectiveThirdParty echo_reset_timer
+syn keyword ngxDirectiveThirdParty echo_read_request_body
+syn keyword ngxDirectiveThirdParty echo_location_async
+syn keyword ngxDirectiveThirdParty echo_location
+syn keyword ngxDirectiveThirdParty echo_subrequest_async
+syn keyword ngxDirectiveThirdParty echo_subrequest
+syn keyword ngxDirectiveThirdParty echo_foreach_split
+syn keyword ngxDirectiveThirdParty echo_end
+syn keyword ngxDirectiveThirdParty echo_request_body
+syn keyword ngxDirectiveThirdParty echo_exec
+syn keyword ngxDirectiveThirdParty echo_status
+syn keyword ngxDirectiveThirdParty echo_before_body
+syn keyword ngxDirectiveThirdParty echo_after_body
+
+" Encrypted Session Module
+" Encrypt and decrypt nginx variable values
+syn keyword ngxDirectiveThirdParty encrypted_session_key
+syn keyword ngxDirectiveThirdParty encrypted_session_iv
+syn keyword ngxDirectiveThirdParty encrypted_session_expires
+syn keyword ngxDirectiveThirdParty set_encrypt_session
+syn keyword ngxDirectiveThirdParty set_decrypt_session
+
+" Enhanced Memcached Module
+" This module is based on the standard Nginx Memcached module, with some additonal features
+syn keyword ngxDirectiveThirdParty enhanced_memcached_pass
+syn keyword ngxDirectiveThirdParty enhanced_memcached_hash_keys_with_md5
+syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_put
+syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_delete
+syn keyword ngxDirectiveThirdParty enhanced_memcached_stats
+syn keyword ngxDirectiveThirdParty enhanced_memcached_flush
+syn keyword ngxDirectiveThirdParty enhanced_memcached_flush_namespace
+syn keyword ngxDirectiveThirdParty enhanced_memcached_bind
+syn keyword ngxDirectiveThirdParty enhanced_memcached_connect_timeout
+syn keyword ngxDirectiveThirdParty enhanced_memcached_send_timeout
+syn keyword ngxDirectiveThirdParty enhanced_memcached_buffer_size
+syn keyword ngxDirectiveThirdParty enhanced_memcached_read_timeout
+
+" Events Module (DEPRECATED)
+" Provides options for start/stop events.
+syn keyword ngxDirectiveDeprecated on_start
+syn keyword ngxDirectiveDeprecated on_stop
+
+" EY Balancer Module
+" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream.
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
+syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
+
+" Upstream Fair Balancer
+" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin.
+syn keyword ngxDirectiveThirdParty fair
+syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
+
+" Fancy Indexes Module
+" Like the built-in autoindex module, but fancier.
+syn keyword ngxDirectiveThirdParty fancyindex
+syn keyword ngxDirectiveThirdParty fancyindex_default_sort
+syn keyword ngxDirectiveThirdParty fancyindex_directories_first
+syn keyword ngxDirectiveThirdParty fancyindex_css_href
+syn keyword ngxDirectiveThirdParty fancyindex_exact_size
+syn keyword ngxDirectiveThirdParty fancyindex_name_length
+syn keyword ngxDirectiveThirdParty fancyindex_footer
+syn keyword ngxDirectiveThirdParty fancyindex_header
+syn keyword ngxDirectiveThirdParty fancyindex_show_path
+syn keyword ngxDirectiveThirdParty fancyindex_ignore
+syn keyword ngxDirectiveThirdParty fancyindex_hide_symlinks
+syn keyword ngxDirectiveThirdParty fancyindex_localtime
+syn keyword ngxDirectiveThirdParty fancyindex_time_format
+
+" Form Auth Module
+" Provides authentication and authorization with credentials submitted via POST request
+syn keyword ngxDirectiveThirdParty form_auth
+syn keyword ngxDirectiveThirdParty form_auth_pam_service
+syn keyword ngxDirectiveThirdParty form_auth_login
+syn keyword ngxDirectiveThirdParty form_auth_password
+syn keyword ngxDirectiveThirdParty form_auth_remote_user
+
+" Form Input Module
+" Reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded" and parses the arguments into nginx variables.
+syn keyword ngxDirectiveThirdParty set_form_input
+syn keyword ngxDirectiveThirdParty set_form_input_multi
+
+" GeoIP Module (DEPRECATED)
+" Country code lookups via the MaxMind GeoIP API.
+syn keyword ngxDirectiveDeprecated geoip_country_file
+
+" GeoIP 2 Module
+" Creates variables with values from the maxmind geoip2 databases based on the client IP
+syn keyword ngxDirectiveThirdParty geoip2
+
+" GridFS Module
+" Nginx module for serving files from MongoDB's GridFS
+syn keyword ngxDirectiveThirdParty gridfs
+
+" Headers More Module
+" Set and clear input and output headers...more than "add"!
+syn keyword ngxDirectiveThirdParty more_clear_headers
+syn keyword ngxDirectiveThirdParty more_clear_input_headers
+syn keyword ngxDirectiveThirdParty more_set_headers
+syn keyword ngxDirectiveThirdParty more_set_input_headers
+
+" Health Checks Upstreams Module
+" Polls backends and if they respond with HTTP 200 + an optional request body, they are marked good. Otherwise, they are marked bad.
+syn keyword ngxDirectiveThirdParty healthcheck_enabled
+syn keyword ngxDirectiveThirdParty healthcheck_delay
+syn keyword ngxDirectiveThirdParty healthcheck_timeout
+syn keyword ngxDirectiveThirdParty healthcheck_failcount
+syn keyword ngxDirectiveThirdParty healthcheck_send
+syn keyword ngxDirectiveThirdParty healthcheck_expected
+syn keyword ngxDirectiveThirdParty healthcheck_buffer
+syn keyword ngxDirectiveThirdParty healthcheck_status
+
+" HTTP Accounting Module
+" Add traffic stat function to nginx. Useful for http accounting based on nginx configuration logic
+syn keyword ngxDirectiveThirdParty http_accounting
+syn keyword ngxDirectiveThirdParty http_accounting_log
+syn keyword ngxDirectiveThirdParty http_accounting_id
+syn keyword ngxDirectiveThirdParty http_accounting_interval
+syn keyword ngxDirectiveThirdParty http_accounting_perturb
+
+" Nginx Digest Authentication module
+" Digest Authentication for Nginx
+syn keyword ngxDirectiveThirdParty auth_digest
+syn keyword ngxDirectiveThirdParty auth_digest_user_file
+syn keyword ngxDirectiveThirdParty auth_digest_timeout
+syn keyword ngxDirectiveThirdParty auth_digest_expires
+syn keyword ngxDirectiveThirdParty auth_digest_replays
+syn keyword ngxDirectiveThirdParty auth_digest_shm_size
+
+" Auth PAM Module
+" HTTP Basic Authentication using PAM.
+syn keyword ngxDirectiveThirdParty auth_pam
+syn keyword ngxDirectiveThirdParty auth_pam_service_name
+
+" HTTP Auth Request Module
+" Implements client authorization based on the result of a subrequest
+" syn keyword ngxDirectiveThirdParty auth_request
+" syn keyword ngxDirectiveThirdParty auth_request_set
+
+" HTTP Concatenation module for Nginx
+" A Nginx module for concatenating files in a given context: CSS and JS files usually
+syn keyword ngxDirectiveThirdParty concat
+syn keyword ngxDirectiveThirdParty concat_types
+syn keyword ngxDirectiveThirdParty concat_unique
+syn keyword ngxDirectiveThirdParty concat_max_files
+syn keyword ngxDirectiveThirdParty concat_delimiter
+syn keyword ngxDirectiveThirdParty concat_ignore_file_error
+
+" HTTP Dynamic Upstream Module
+" Update upstreams' config by restful interface
+syn keyword ngxDirectiveThirdParty dyups_interface
+syn keyword ngxDirectiveThirdParty dyups_read_msg_timeout
+syn keyword ngxDirectiveThirdParty dyups_shm_zone_size
+syn keyword ngxDirectiveThirdParty dyups_upstream_conf
+syn keyword ngxDirectiveThirdParty dyups_trylock
+
+" HTTP Footer If Filter Module
+" The ngx_http_footer_if_filter_module is used to add given content to the end of the response according to the condition specified.
+syn keyword ngxDirectiveThirdParty footer_if
+
+" HTTP Footer Filter Module
+" This module implements a body filter that adds a given string to the page footer.
+syn keyword ngxDirectiveThirdParty footer
+syn keyword ngxDirectiveThirdParty footer_types
+
+" HTTP Internal Redirect Module
+" Make an internal redirect to the uri specified according to the condition specified.
+syn keyword ngxDirectiveThirdParty internal_redirect_if
+syn keyword ngxDirectiveThirdParty internal_redirect_if_no_postponed
+
+" HTTP JavaScript Module
+" Embedding SpiderMonkey. Nearly full port on Perl module.
+syn keyword ngxDirectiveThirdParty js
+syn keyword ngxDirectiveThirdParty js_filter
+syn keyword ngxDirectiveThirdParty js_filter_types
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_maxmem
+syn keyword ngxDirectiveThirdParty js_require
+syn keyword ngxDirectiveThirdParty js_set
+syn keyword ngxDirectiveThirdParty js_utf8
+
+" HTTP Push Module (DEPRECATED)
+" Turn Nginx into an adept long-polling HTTP Push (Comet) server.
+syn keyword ngxDirectiveDeprecated push_buffer_size
+syn keyword ngxDirectiveDeprecated push_listener
+syn keyword ngxDirectiveDeprecated push_message_timeout
+syn keyword ngxDirectiveDeprecated push_queue_messages
+syn keyword ngxDirectiveDeprecated push_sender
+
+" HTTP Redis Module
+" Redis support.
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
+
+" Iconv Module
+" A character conversion nginx module using libiconv
+syn keyword ngxDirectiveThirdParty set_iconv
+syn keyword ngxDirectiveThirdParty iconv_buffer_size
+syn keyword ngxDirectiveThirdParty iconv_filter
+
+" IP Blocker Module
+" An efficient shared memory IP blocking system for nginx.
+syn keyword ngxDirectiveThirdParty ip_blocker
+
+" IP2Location Module
+" Allows user to lookup for geolocation information using IP2Location database
+syn keyword ngxDirectiveThirdParty ip2location_database
+
+" JS Module
+" Reflect the nginx functionality in JS
+syn keyword ngxDirectiveThirdParty js
+syn keyword ngxDirectiveThirdParty js_access
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_set
+
+" Limit Upload Rate Module
+" Limit client-upload rate when they are sending request bodies to you
+syn keyword ngxDirectiveThirdParty limit_upload_rate
+syn keyword ngxDirectiveThirdParty limit_upload_rate_after
+
+" Limit Upstream Module
+" Limit the number of connections to upstream for NGINX
+syn keyword ngxDirectiveThirdParty limit_upstream_zone
+syn keyword ngxDirectiveThirdParty limit_upstream_conn
+syn keyword ngxDirectiveThirdParty limit_upstream_log_level
+
+" Log If Module
+" Conditional accesslog for nginx
+syn keyword ngxDirectiveThirdParty access_log_bypass_if
+
+" Log Request Speed (DEPRECATED)
+" Log the time it took to process each request.
+syn keyword ngxDirectiveDeprecated log_request_speed_filter
+syn keyword ngxDirectiveDeprecated log_request_speed_filter_timeout
+
+" Log ZeroMQ Module
+" ZeroMQ logger module for nginx
+syn keyword ngxDirectiveThirdParty log_zmq_server
+syn keyword ngxDirectiveThirdParty log_zmq_endpoint
+syn keyword ngxDirectiveThirdParty log_zmq_format
+syn keyword ngxDirectiveThirdParty log_zmq_off
+
+" Lower/UpperCase Module
+" This module simply uppercases or lowercases a string and saves it into a new variable.
+syn keyword ngxDirectiveThirdParty lower
+syn keyword ngxDirectiveThirdParty upper
+
+" Lua Upstream Module
+" Nginx C module to expose Lua API to ngx_lua for Nginx upstreams
+
+" Lua Module
+" Embed the Power of Lua into NGINX HTTP servers
+syn keyword ngxDirectiveThirdParty lua_use_default_type
+syn keyword ngxDirectiveThirdParty lua_malloc_trim
+syn keyword ngxDirectiveThirdParty lua_code_cache
+syn keyword ngxDirectiveThirdParty lua_regex_cache_max_entries
+syn keyword ngxDirectiveThirdParty lua_regex_match_limit
+syn keyword ngxDirectiveThirdParty lua_package_path
+syn keyword ngxDirectiveThirdParty lua_package_cpath
+syn keyword ngxDirectiveThirdParty init_by_lua
+syn keyword ngxDirectiveThirdParty init_by_lua_file
+syn keyword ngxDirectiveThirdParty init_worker_by_lua
+syn keyword ngxDirectiveThirdParty init_worker_by_lua_file
+syn keyword ngxDirectiveThirdParty set_by_lua
+syn keyword ngxDirectiveThirdParty set_by_lua_file
+syn keyword ngxDirectiveThirdParty content_by_lua
+syn keyword ngxDirectiveThirdParty content_by_lua_file
+syn keyword ngxDirectiveThirdParty rewrite_by_lua
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_file
+syn keyword ngxDirectiveThirdParty access_by_lua
+syn keyword ngxDirectiveThirdParty access_by_lua_file
+syn keyword ngxDirectiveThirdParty header_filter_by_lua
+syn keyword ngxDirectiveThirdParty header_filter_by_lua_file
+syn keyword ngxDirectiveThirdParty body_filter_by_lua
+syn keyword ngxDirectiveThirdParty body_filter_by_lua_file
+syn keyword ngxDirectiveThirdParty log_by_lua
+syn keyword ngxDirectiveThirdParty log_by_lua_file
+syn keyword ngxDirectiveThirdParty balancer_by_lua_file
+syn keyword ngxDirectiveThirdParty lua_need_request_body
+syn keyword ngxDirectiveThirdParty ssl_certificate_by_lua_file
+syn keyword ngxDirectiveThirdParty ssl_session_fetch_by_lua_file
+syn keyword ngxDirectiveThirdParty ssl_session_store_by_lua_file
+syn keyword ngxDirectiveThirdParty lua_shared_dict
+syn keyword ngxDirectiveThirdParty lua_socket_connect_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_send_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_send_lowat
+syn keyword ngxDirectiveThirdParty lua_socket_read_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_buffer_size
+syn keyword ngxDirectiveThirdParty lua_socket_pool_size
+syn keyword ngxDirectiveThirdParty lua_socket_keepalive_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_log_errors
+syn keyword ngxDirectiveThirdParty lua_ssl_ciphers
+syn keyword ngxDirectiveThirdParty lua_ssl_crl
+syn keyword ngxDirectiveThirdParty lua_ssl_protocols
+syn keyword ngxDirectiveThirdParty lua_ssl_trusted_certificate
+syn keyword ngxDirectiveThirdParty lua_ssl_verify_depth
+syn keyword ngxDirectiveThirdParty lua_http10_buffering
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_no_postpone
+syn keyword ngxDirectiveThirdParty access_by_lua_no_postpone
+syn keyword ngxDirectiveThirdParty lua_transform_underscores_in_response_headers
+syn keyword ngxDirectiveThirdParty lua_check_client_abort
+syn keyword ngxDirectiveThirdParty lua_max_pending_timers
+syn keyword ngxDirectiveThirdParty lua_max_running_timers
+
+" MD5 Filter Module
+" A content filter for nginx, which returns the md5 hash of the content otherwise returned.
+syn keyword ngxDirectiveThirdParty md5_filter
+
+" Memc Module
+" An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands.
+syn keyword ngxDirectiveThirdParty memc_buffer_size
+syn keyword ngxDirectiveThirdParty memc_cmds_allowed
+syn keyword ngxDirectiveThirdParty memc_connect_timeout
+syn keyword ngxDirectiveThirdParty memc_flags_to_last_modified
+syn keyword ngxDirectiveThirdParty memc_next_upstream
+syn keyword ngxDirectiveThirdParty memc_pass
+syn keyword ngxDirectiveThirdParty memc_read_timeout
+syn keyword ngxDirectiveThirdParty memc_send_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_fail_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_max_fails
+
+" Mod Security Module
+" ModSecurity is an open source, cross platform web application firewall (WAF) engine
+syn keyword ngxDirectiveThirdParty ModSecurityConfig
+syn keyword ngxDirectiveThirdParty ModSecurityEnabled
+syn keyword ngxDirectiveThirdParty pool_context
+syn keyword ngxDirectiveThirdParty pool_context_hash_size
+
+" Mogilefs Module
+" MogileFS client for nginx web server.
+syn keyword ngxDirectiveThirdParty mogilefs_pass
+syn keyword ngxDirectiveThirdParty mogilefs_methods
+syn keyword ngxDirectiveThirdParty mogilefs_domain
+syn keyword ngxDirectiveThirdParty mogilefs_class
+syn keyword ngxDirectiveThirdParty mogilefs_tracker
+syn keyword ngxDirectiveThirdParty mogilefs_noverify
+syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
+
+" Mongo Module
+" Upstream module that allows nginx to communicate directly with MongoDB database.
+syn keyword ngxDirectiveThirdParty mongo_auth
+syn keyword ngxDirectiveThirdParty mongo_pass
+syn keyword ngxDirectiveThirdParty mongo_query
+syn keyword ngxDirectiveThirdParty mongo_json
+syn keyword ngxDirectiveThirdParty mongo_bind
+syn keyword ngxDirectiveThirdParty mongo_connect_timeout
+syn keyword ngxDirectiveThirdParty mongo_send_timeout
+syn keyword ngxDirectiveThirdParty mongo_read_timeout
+syn keyword ngxDirectiveThirdParty mongo_buffering
+syn keyword ngxDirectiveThirdParty mongo_buffer_size
+syn keyword ngxDirectiveThirdParty mongo_buffers
+syn keyword ngxDirectiveThirdParty mongo_busy_buffers_size
+syn keyword ngxDirectiveThirdParty mongo_next_upstream
+
+" MP4 Streaming Lite Module
+" Will seek to a certain time within H.264/MP4 files when provided with a 'start' parameter in the URL.
+" syn keyword ngxDirectiveThirdParty mp4
+
+" NAXSI Module
+" NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX
+syn keyword ngxDirectiveThirdParty DeniedUrl denied_url
+syn keyword ngxDirectiveThirdParty LearningMode learning_mode
+syn keyword ngxDirectiveThirdParty SecRulesEnabled rules_enabled
+syn keyword ngxDirectiveThirdParty SecRulesDisabled rules_disabled
+syn keyword ngxDirectiveThirdParty CheckRule check_rule
+syn keyword ngxDirectiveThirdParty BasicRule basic_rule
+syn keyword ngxDirectiveThirdParty MainRule main_rule
+syn keyword ngxDirectiveThirdParty LibInjectionSql libinjection_sql
+syn keyword ngxDirectiveThirdParty LibInjectionXss libinjection_xss
+
+" Nchan Module
+" Fast, horizontally scalable, multiprocess pub/sub queuing server and proxy for HTTP, long-polling, Websockets and EventSource (SSE)
+syn keyword ngxDirectiveThirdParty nchan_channel_id
+syn keyword ngxDirectiveThirdParty nchan_channel_id_split_delimiter
+syn keyword ngxDirectiveThirdParty nchan_eventsource_event
+syn keyword ngxDirectiveThirdParty nchan_longpoll_multipart_response
+syn keyword ngxDirectiveThirdParty nchan_publisher
+syn keyword ngxDirectiveThirdParty nchan_publisher_channel_id
+syn keyword ngxDirectiveThirdParty nchan_publisher_upstream_request
+syn keyword ngxDirectiveThirdParty nchan_pubsub
+syn keyword ngxDirectiveThirdParty nchan_subscribe_request
+syn keyword ngxDirectiveThirdParty nchan_subscriber
+syn keyword ngxDirectiveThirdParty nchan_subscriber_channel_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_compound_etag_message_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_first_message
+syn keyword ngxDirectiveThirdParty nchan_subscriber_http_raw_stream_separator
+syn keyword ngxDirectiveThirdParty nchan_subscriber_last_message_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_message_id_custom_etag_header
+syn keyword ngxDirectiveThirdParty nchan_subscriber_timeout
+syn keyword ngxDirectiveThirdParty nchan_unsubscribe_request
+syn keyword ngxDirectiveThirdParty nchan_websocket_ping_interval
+syn keyword ngxDirectiveThirdParty nchan_authorize_request
+syn keyword ngxDirectiveThirdParty nchan_max_reserved_memory
+syn keyword ngxDirectiveThirdParty nchan_message_buffer_length
+syn keyword ngxDirectiveThirdParty nchan_message_timeout
+syn keyword ngxDirectiveThirdParty nchan_redis_idle_channel_cache_timeout
+syn keyword ngxDirectiveThirdParty nchan_redis_namespace
+syn keyword ngxDirectiveThirdParty nchan_redis_pass
+syn keyword ngxDirectiveThirdParty nchan_redis_ping_interval
+syn keyword ngxDirectiveThirdParty nchan_redis_server
+syn keyword ngxDirectiveThirdParty nchan_redis_storage_mode
+syn keyword ngxDirectiveThirdParty nchan_redis_url
+syn keyword ngxDirectiveThirdParty nchan_store_messages
+syn keyword ngxDirectiveThirdParty nchan_use_redis
+syn keyword ngxDirectiveThirdParty nchan_access_control_allow_origin
+syn keyword ngxDirectiveThirdParty nchan_channel_group
+syn keyword ngxDirectiveThirdParty nchan_channel_group_accounting
+syn keyword ngxDirectiveThirdParty nchan_group_location
+syn keyword ngxDirectiveThirdParty nchan_group_max_channels
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages_disk
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages_memory
+syn keyword ngxDirectiveThirdParty nchan_group_max_subscribers
+syn keyword ngxDirectiveThirdParty nchan_subscribe_existing_channels_only
+syn keyword ngxDirectiveThirdParty nchan_channel_event_string
+syn keyword ngxDirectiveThirdParty nchan_channel_events_channel_id
+syn keyword ngxDirectiveThirdParty nchan_stub_status
+syn keyword ngxDirectiveThirdParty nchan_max_channel_id_length
+syn keyword ngxDirectiveThirdParty nchan_max_channel_subscribers
+syn keyword ngxDirectiveThirdParty nchan_channel_timeout
+syn keyword ngxDirectiveThirdParty nchan_storage_engine
+
+" Nginx Notice Module
+" Serve static file to POST requests.
+syn keyword ngxDirectiveThirdParty notice
+syn keyword ngxDirectiveThirdParty notice_type
+
+" OCSP Proxy Module
+" Nginx OCSP processing module designed for response caching
+syn keyword ngxDirectiveThirdParty ocsp_proxy
+syn keyword ngxDirectiveThirdParty ocsp_cache_timeout
+
+" Eval Module
+" Module for nginx web server evaluates response of proxy or memcached module into variables.
+syn keyword ngxDirectiveThirdParty eval
+syn keyword ngxDirectiveThirdParty eval_escalate
+syn keyword ngxDirectiveThirdParty eval_buffer_size
+syn keyword ngxDirectiveThirdParty eval_override_content_type
+syn keyword ngxDirectiveThirdParty eval_subrequest_in_memory
+
+" OpenSSL Version Module
+" Nginx OpenSSL version check at startup
+syn keyword ngxDirectiveThirdParty openssl_version_minimum
+syn keyword ngxDirectiveThirdParty openssl_builddate_minimum
+
+" Owner Match Module
+" Control access for specific owners and groups of files
+syn keyword ngxDirectiveThirdParty omallow
+syn keyword ngxDirectiveThirdParty omdeny
+
+" Accept Language Module
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty pagespeed
+
+" PHP Memcache Standard Balancer Module
+" Loadbalancer that is compatible to the standard loadbalancer in the php-memcache module
+syn keyword ngxDirectiveThirdParty hash_key
+
+" PHP Session Module
+" Nginx module to parse php sessions
+syn keyword ngxDirectiveThirdParty php_session_parse
+syn keyword ngxDirectiveThirdParty php_session_strip_formatting
+
+" Phusion Passenger Module
+" Passenger is an open source web application server.
+syn keyword ngxDirectiveThirdParty passenger_root
+syn keyword ngxDirectiveThirdParty passenger_enabled
+syn keyword ngxDirectiveThirdParty passenger_base_uri
+syn keyword ngxDirectiveThirdParty passenger_document_root
+syn keyword ngxDirectiveThirdParty passenger_ruby
+syn keyword ngxDirectiveThirdParty passenger_python
+syn keyword ngxDirectiveThirdParty passenger_nodejs
+syn keyword ngxDirectiveThirdParty passenger_meteor_app_settings
+syn keyword ngxDirectiveThirdParty passenger_app_env
+syn keyword ngxDirectiveThirdParty passenger_app_root
+syn keyword ngxDirectiveThirdParty passenger_app_group_name
+syn keyword ngxDirectiveThirdParty passenger_app_type
+syn keyword ngxDirectiveThirdParty passenger_startup_file
+syn keyword ngxDirectiveThirdParty passenger_restart_dir
+syn keyword ngxDirectiveThirdParty passenger_spawn_method
+syn keyword ngxDirectiveThirdParty passenger_env_var
+syn keyword ngxDirectiveThirdParty passenger_load_shell_envvars
+syn keyword ngxDirectiveThirdParty passenger_rolling_restarts
+syn keyword ngxDirectiveThirdParty passenger_resist_deployment_errors
+syn keyword ngxDirectiveThirdParty passenger_user_switching
+syn keyword ngxDirectiveThirdParty passenger_user
+syn keyword ngxDirectiveThirdParty passenger_group
+syn keyword ngxDirectiveThirdParty passenger_default_user
+syn keyword ngxDirectiveThirdParty passenger_default_group
+syn keyword ngxDirectiveThirdParty passenger_show_version_in_header
+syn keyword ngxDirectiveThirdParty passenger_friendly_error_pages
+syn keyword ngxDirectiveThirdParty passenger_disable_security_update_check
+syn keyword ngxDirectiveThirdParty passenger_security_update_check_proxy
+syn keyword ngxDirectiveThirdParty passenger_max_pool_size
+syn keyword ngxDirectiveThirdParty passenger_min_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
+syn keyword ngxDirectiveThirdParty passenger_pool_idle_time
+syn keyword ngxDirectiveThirdParty passenger_max_preloader_idle_time
+syn keyword ngxDirectiveThirdParty passenger_force_max_concurrent_requests_per_process
+syn keyword ngxDirectiveThirdParty passenger_start_timeout
+syn keyword ngxDirectiveThirdParty passenger_concurrency_model
+syn keyword ngxDirectiveThirdParty passenger_thread_count
+syn keyword ngxDirectiveThirdParty passenger_max_requests
+syn keyword ngxDirectiveThirdParty passenger_max_request_time
+syn keyword ngxDirectiveThirdParty passenger_memory_limit
+syn keyword ngxDirectiveThirdParty passenger_stat_throttle_rate
+syn keyword ngxDirectiveThirdParty passenger_core_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_app_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_pre_start
+syn keyword ngxDirectiveThirdParty passenger_set_header
+syn keyword ngxDirectiveThirdParty passenger_max_request_queue_size
+syn keyword ngxDirectiveThirdParty passenger_request_queue_overflow_status_code
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions_cookie_name
+syn keyword ngxDirectiveThirdParty passenger_abort_websockets_on_process_shutdown
+syn keyword ngxDirectiveThirdParty passenger_ignore_client_abort
+syn keyword ngxDirectiveThirdParty passenger_intercept_errors
+syn keyword ngxDirectiveThirdParty passenger_pass_header
+syn keyword ngxDirectiveThirdParty passenger_ignore_headers
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_bucket_size
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_max_size
+syn keyword ngxDirectiveThirdParty passenger_buffer_response
+syn keyword ngxDirectiveThirdParty passenger_response_buffer_high_watermark
+syn keyword ngxDirectiveThirdParty passenger_buffer_size, passenger_buffers, passenger_busy_buffers_size
+syn keyword ngxDirectiveThirdParty passenger_socket_backlog
+syn keyword ngxDirectiveThirdParty passenger_log_level
+syn keyword ngxDirectiveThirdParty passenger_log_file
+syn keyword ngxDirectiveThirdParty passenger_file_descriptor_log_file
+syn keyword ngxDirectiveThirdParty passenger_debugger
+syn keyword ngxDirectiveThirdParty passenger_instance_registry_dir
+syn keyword ngxDirectiveThirdParty passenger_data_buffer_dir
+syn keyword ngxDirectiveThirdParty passenger_fly_with
+syn keyword ngxDirectiveThirdParty union_station_support
+syn keyword ngxDirectiveThirdParty union_station_key
+syn keyword ngxDirectiveThirdParty union_station_proxy_address
+syn keyword ngxDirectiveThirdParty union_station_filter
+syn keyword ngxDirectiveThirdParty union_station_gateway_address
+syn keyword ngxDirectiveThirdParty union_station_gateway_port
+syn keyword ngxDirectiveThirdParty union_station_gateway_cert
+syn keyword ngxDirectiveDeprecated rails_spawn_method
+syn keyword ngxDirectiveDeprecated passenger_debug_log_file
+
+" Postgres Module
+" Upstream module that allows nginx to communicate directly with PostgreSQL database.
+syn keyword ngxDirectiveThirdParty postgres_server
+syn keyword ngxDirectiveThirdParty postgres_keepalive
+syn keyword ngxDirectiveThirdParty postgres_pass
+syn keyword ngxDirectiveThirdParty postgres_query
+syn keyword ngxDirectiveThirdParty postgres_rewrite
+syn keyword ngxDirectiveThirdParty postgres_output
+syn keyword ngxDirectiveThirdParty postgres_set
+syn keyword ngxDirectiveThirdParty postgres_escape
+syn keyword ngxDirectiveThirdParty postgres_connect_timeout
+syn keyword ngxDirectiveThirdParty postgres_result_timeout
+
+" Pubcookie Module
+" Authorizes users using encrypted cookies
+syn keyword ngxDirectiveThirdParty pubcookie_inactive_expire
+syn keyword ngxDirectiveThirdParty pubcookie_hard_expire
+syn keyword ngxDirectiveThirdParty pubcookie_app_id
+syn keyword ngxDirectiveThirdParty pubcookie_dir_depth
+syn keyword ngxDirectiveThirdParty pubcookie_catenate_app_ids
+syn keyword ngxDirectiveThirdParty pubcookie_app_srv_id
+syn keyword ngxDirectiveThirdParty pubcookie_login
+syn keyword ngxDirectiveThirdParty pubcookie_login_method
+syn keyword ngxDirectiveThirdParty pubcookie_post
+syn keyword ngxDirectiveThirdParty pubcookie_domain
+syn keyword ngxDirectiveThirdParty pubcookie_granting_cert_file
+syn keyword ngxDirectiveThirdParty pubcookie_session_key_file
+syn keyword ngxDirectiveThirdParty pubcookie_session_cert_file
+syn keyword ngxDirectiveThirdParty pubcookie_crypt_key_file
+syn keyword ngxDirectiveThirdParty pubcookie_end_session
+syn keyword ngxDirectiveThirdParty pubcookie_encryption
+syn keyword ngxDirectiveThirdParty pubcookie_session_reauth
+syn keyword ngxDirectiveThirdParty pubcookie_auth_type_names
+syn keyword ngxDirectiveThirdParty pubcookie_no_prompt
+syn keyword ngxDirectiveThirdParty pubcookie_on_demand
+syn keyword ngxDirectiveThirdParty pubcookie_addl_request
+syn keyword ngxDirectiveThirdParty pubcookie_no_obscure_cookies
+syn keyword ngxDirectiveThirdParty pubcookie_no_clean_creds
+syn keyword ngxDirectiveThirdParty pubcookie_egd_device
+syn keyword ngxDirectiveThirdParty pubcookie_no_blank
+syn keyword ngxDirectiveThirdParty pubcookie_super_debug
+syn keyword ngxDirectiveThirdParty pubcookie_set_remote_user
+
+" Push Stream Module
+" A pure stream http push technology for your Nginx setup
+syn keyword ngxDirectiveThirdParty push_stream_channels_statistics
+syn keyword ngxDirectiveThirdParty push_stream_publisher
+syn keyword ngxDirectiveThirdParty push_stream_subscriber
+syn keyword ngxDirectiveThirdParty push_stream_shared_memory_size
+syn keyword ngxDirectiveThirdParty push_stream_channel_deleted_message_text
+syn keyword ngxDirectiveThirdParty push_stream_channel_inactivity_time
+syn keyword ngxDirectiveThirdParty push_stream_ping_message_text
+syn keyword ngxDirectiveThirdParty push_stream_timeout_with_body
+syn keyword ngxDirectiveThirdParty push_stream_message_ttl
+syn keyword ngxDirectiveThirdParty push_stream_max_subscribers_per_channel
+syn keyword ngxDirectiveThirdParty push_stream_max_messages_stored_per_channel
+syn keyword ngxDirectiveThirdParty push_stream_max_channel_id_length
+syn keyword ngxDirectiveThirdParty push_stream_max_number_of_channels
+syn keyword ngxDirectiveThirdParty push_stream_max_number_of_wildcard_channels
+syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_prefix
+syn keyword ngxDirectiveThirdParty push_stream_events_channel_id
+syn keyword ngxDirectiveThirdParty push_stream_channels_path
+syn keyword ngxDirectiveThirdParty push_stream_store_messages
+syn keyword ngxDirectiveThirdParty push_stream_channel_info_on_publish
+syn keyword ngxDirectiveThirdParty push_stream_authorized_channels_only
+syn keyword ngxDirectiveThirdParty push_stream_header_template_file
+syn keyword ngxDirectiveThirdParty push_stream_header_template
+syn keyword ngxDirectiveThirdParty push_stream_message_template
+syn keyword ngxDirectiveThirdParty push_stream_footer_template
+syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_max_qtd
+syn keyword ngxDirectiveThirdParty push_stream_ping_message_interval
+syn keyword ngxDirectiveThirdParty push_stream_subscriber_connection_ttl
+syn keyword ngxDirectiveThirdParty push_stream_longpolling_connection_ttl
+syn keyword ngxDirectiveThirdParty push_stream_websocket_allow_publish
+syn keyword ngxDirectiveThirdParty push_stream_last_received_message_time
+syn keyword ngxDirectiveThirdParty push_stream_last_received_message_tag
+syn keyword ngxDirectiveThirdParty push_stream_last_event_id
+syn keyword ngxDirectiveThirdParty push_stream_user_agent
+syn keyword ngxDirectiveThirdParty push_stream_padding_by_user_agent
+syn keyword ngxDirectiveThirdParty push_stream_allowed_origins
+syn keyword ngxDirectiveThirdParty push_stream_allow_connections_to_events_channel
+
+" rDNS Module
+" Make a reverse DNS (rDNS) lookup for incoming connection and provides simple access control of incoming hostname by allow/deny rules
+syn keyword ngxDirectiveThirdParty rdns
+syn keyword ngxDirectiveThirdParty rdns_allow
+syn keyword ngxDirectiveThirdParty rdns_deny
+
+" RDS CSV Module
+" Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV)
+syn keyword ngxDirectiveThirdParty rds_csv
+syn keyword ngxDirectiveThirdParty rds_csv_row_terminator
+syn keyword ngxDirectiveThirdParty rds_csv_field_separator
+syn keyword ngxDirectiveThirdParty rds_csv_field_name_header
+syn keyword ngxDirectiveThirdParty rds_csv_content_type
+syn keyword ngxDirectiveThirdParty rds_csv_buffer_size
+
+" RDS JSON Module
+" An output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON
+syn keyword ngxDirectiveThirdParty rds_json
+syn keyword ngxDirectiveThirdParty rds_json_buffer_size
+syn keyword ngxDirectiveThirdParty rds_json_format
+syn keyword ngxDirectiveThirdParty rds_json_root
+syn keyword ngxDirectiveThirdParty rds_json_success_property
+syn keyword ngxDirectiveThirdParty rds_json_user_property
+syn keyword ngxDirectiveThirdParty rds_json_errcode_key
+syn keyword ngxDirectiveThirdParty rds_json_errstr_key
+syn keyword ngxDirectiveThirdParty rds_json_ret
+syn keyword ngxDirectiveThirdParty rds_json_content_type
+
+" Redis Module
+" Use this module to perform simple caching
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_gzip_flag
+
+" Redis 2 Module
+" Nginx upstream module for the Redis 2.0 protocol
+syn keyword ngxDirectiveThirdParty redis2_query
+syn keyword ngxDirectiveThirdParty redis2_raw_query
+syn keyword ngxDirectiveThirdParty redis2_raw_queries
+syn keyword ngxDirectiveThirdParty redis2_literal_raw_query
+syn keyword ngxDirectiveThirdParty redis2_pass
+syn keyword ngxDirectiveThirdParty redis2_connect_timeout
+syn keyword ngxDirectiveThirdParty redis2_send_timeout
+syn keyword ngxDirectiveThirdParty redis2_read_timeout
+syn keyword ngxDirectiveThirdParty redis2_buffer_size
+syn keyword ngxDirectiveThirdParty redis2_next_upstream
+
+" Replace Filter Module
+" Streaming regular expression replacement in response bodies
+syn keyword ngxDirectiveThirdParty replace_filter
+syn keyword ngxDirectiveThirdParty replace_filter_types
+syn keyword ngxDirectiveThirdParty replace_filter_max_buffered_size
+syn keyword ngxDirectiveThirdParty replace_filter_last_modified
+syn keyword ngxDirectiveThirdParty replace_filter_skip
+
+" Roboo Module
+" HTTP Robot Mitigator
+
+" RRD Graph Module
+" This module provides an HTTP interface to RRDtool's graphing facilities.
+syn keyword ngxDirectiveThirdParty rrd_graph
+syn keyword ngxDirectiveThirdParty rrd_graph_root
+
+" RTMP Module
+" NGINX-based Media Streaming Server
+syn keyword ngxDirectiveThirdParty rtmp
+" syn keyword ngxDirectiveThirdParty server
+" syn keyword ngxDirectiveThirdParty listen
+syn keyword ngxDirectiveThirdParty application
+" syn keyword ngxDirectiveThirdParty timeout
+syn keyword ngxDirectiveThirdParty ping
+syn keyword ngxDirectiveThirdParty ping_timeout
+syn keyword ngxDirectiveThirdParty max_streams
+syn keyword ngxDirectiveThirdParty ack_window
+syn keyword ngxDirectiveThirdParty chunk_size
+syn keyword ngxDirectiveThirdParty max_queue
+syn keyword ngxDirectiveThirdParty max_message
+syn keyword ngxDirectiveThirdParty out_queue
+syn keyword ngxDirectiveThirdParty out_cork
+" syn keyword ngxDirectiveThirdParty allow
+" syn keyword ngxDirectiveThirdParty deny
+syn keyword ngxDirectiveThirdParty exec_push
+syn keyword ngxDirectiveThirdParty exec_pull
+syn keyword ngxDirectiveThirdParty exec
+syn keyword ngxDirectiveThirdParty exec_options
+syn keyword ngxDirectiveThirdParty exec_static
+syn keyword ngxDirectiveThirdParty exec_kill_signal
+syn keyword ngxDirectiveThirdParty respawn
+syn keyword ngxDirectiveThirdParty respawn_timeout
+syn keyword ngxDirectiveThirdParty exec_publish
+syn keyword ngxDirectiveThirdParty exec_play
+syn keyword ngxDirectiveThirdParty exec_play_done
+syn keyword ngxDirectiveThirdParty exec_publish_done
+syn keyword ngxDirectiveThirdParty exec_record_done
+syn keyword ngxDirectiveThirdParty live
+syn keyword ngxDirectiveThirdParty meta
+syn keyword ngxDirectiveThirdParty interleave
+syn keyword ngxDirectiveThirdParty wait_key
+syn keyword ngxDirectiveThirdParty wait_video
+syn keyword ngxDirectiveThirdParty publish_notify
+syn keyword ngxDirectiveThirdParty drop_idle_publisher
+syn keyword ngxDirectiveThirdParty sync
+syn keyword ngxDirectiveThirdParty play_restart
+syn keyword ngxDirectiveThirdParty idle_streams
+syn keyword ngxDirectiveThirdParty record
+syn keyword ngxDirectiveThirdParty record_path
+syn keyword ngxDirectiveThirdParty record_suffix
+syn keyword ngxDirectiveThirdParty record_unique
+syn keyword ngxDirectiveThirdParty record_append
+syn keyword ngxDirectiveThirdParty record_lock
+syn keyword ngxDirectiveThirdParty record_max_size
+syn keyword ngxDirectiveThirdParty record_max_frames
+syn keyword ngxDirectiveThirdParty record_interval
+syn keyword ngxDirectiveThirdParty recorder
+syn keyword ngxDirectiveThirdParty record_notify
+syn keyword ngxDirectiveThirdParty play
+syn keyword ngxDirectiveThirdParty play_temp_path
+syn keyword ngxDirectiveThirdParty play_local_path
+syn keyword ngxDirectiveThirdParty pull
+syn keyword ngxDirectiveThirdParty push
+syn keyword ngxDirectiveThirdParty push_reconnect
+syn keyword ngxDirectiveThirdParty session_relay
+syn keyword ngxDirectiveThirdParty on_connect
+syn keyword ngxDirectiveThirdParty on_play
+syn keyword ngxDirectiveThirdParty on_publish
+syn keyword ngxDirectiveThirdParty on_done
+syn keyword ngxDirectiveThirdParty on_play_done
+syn keyword ngxDirectiveThirdParty on_publish_done
+syn keyword ngxDirectiveThirdParty on_record_done
+syn keyword ngxDirectiveThirdParty on_update
+syn keyword ngxDirectiveThirdParty notify_update_timeout
+syn keyword ngxDirectiveThirdParty notify_update_strict
+syn keyword ngxDirectiveThirdParty notify_relay_redirect
+syn keyword ngxDirectiveThirdParty notify_method
+syn keyword ngxDirectiveThirdParty hls
+syn keyword ngxDirectiveThirdParty hls_path
+syn keyword ngxDirectiveThirdParty hls_fragment
+syn keyword ngxDirectiveThirdParty hls_playlist_length
+syn keyword ngxDirectiveThirdParty hls_sync
+syn keyword ngxDirectiveThirdParty hls_continuous
+syn keyword ngxDirectiveThirdParty hls_nested
+syn keyword ngxDirectiveThirdParty hls_base_url
+syn keyword ngxDirectiveThirdParty hls_cleanup
+syn keyword ngxDirectiveThirdParty hls_fragment_naming
+syn keyword ngxDirectiveThirdParty hls_fragment_slicing
+syn keyword ngxDirectiveThirdParty hls_variant
+syn keyword ngxDirectiveThirdParty hls_type
+syn keyword ngxDirectiveThirdParty hls_keys
+syn keyword ngxDirectiveThirdParty hls_key_path
+syn keyword ngxDirectiveThirdParty hls_key_url
+syn keyword ngxDirectiveThirdParty hls_fragments_per_key
+syn keyword ngxDirectiveThirdParty dash
+syn keyword ngxDirectiveThirdParty dash_path
+syn keyword ngxDirectiveThirdParty dash_fragment
+syn keyword ngxDirectiveThirdParty dash_playlist_length
+syn keyword ngxDirectiveThirdParty dash_nested
+syn keyword ngxDirectiveThirdParty dash_cleanup
+" syn keyword ngxDirectiveThirdParty access_log
+" syn keyword ngxDirectiveThirdParty log_format
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty rtmp_stat
+syn keyword ngxDirectiveThirdParty rtmp_stat_stylesheet
+syn keyword ngxDirectiveThirdParty rtmp_auto_push
+syn keyword ngxDirectiveThirdParty rtmp_auto_push_reconnect
+syn keyword ngxDirectiveThirdParty rtmp_socket_dir
+syn keyword ngxDirectiveThirdParty rtmp_control
+
+" RTMPT Module
+" Module for nginx to proxy rtmp using http protocol
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_target
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_rtmp_timeout
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_http_timeout
+syn keyword ngxDirectiveThirdParty rtmpt_proxy
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_stat
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_stylesheet
+
+" Syntactically Awesome Module
+" Providing on-the-fly compiling of Sass files as an NGINX module.
+syn keyword ngxDirectiveThirdParty sass_compile
+syn keyword ngxDirectiveThirdParty sass_error_log
+syn keyword ngxDirectiveThirdParty sass_include_path
+syn keyword ngxDirectiveThirdParty sass_indent
+syn keyword ngxDirectiveThirdParty sass_is_indented_syntax
+syn keyword ngxDirectiveThirdParty sass_linefeed
+syn keyword ngxDirectiveThirdParty sass_precision
+syn keyword ngxDirectiveThirdParty sass_output_style
+syn keyword ngxDirectiveThirdParty sass_source_comments
+syn keyword ngxDirectiveThirdParty sass_source_map_embed
+
+" Secure Download Module
+" Enables you to create links which are only valid until a certain datetime is reached
+syn keyword ngxDirectiveThirdParty secure_download
+syn keyword ngxDirectiveThirdParty secure_download_secret
+syn keyword ngxDirectiveThirdParty secure_download_path_mode
+
+" Selective Cache Purge Module
+" A module to purge cache by GLOB patterns. The supported patterns are the same as supported by Redis.
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_unix_socket
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_host
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_port
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_database
+syn keyword ngxDirectiveThirdParty selective_cache_purge_query
+
+" Set cconv Module
+" Cconv rewrite set commands
+syn keyword ngxDirectiveThirdParty set_cconv_to_simp
+syn keyword ngxDirectiveThirdParty set_cconv_to_trad
+syn keyword ngxDirectiveThirdParty set_pinyin_to_normal
+
+" Set Hash Module
+" Nginx module that allows the setting of variables to the value of a variety of hashes
+syn keyword ngxDirectiveThirdParty set_md5
+syn keyword ngxDirectiveThirdParty set_md5_upper
+syn keyword ngxDirectiveThirdParty set_murmur2
+syn keyword ngxDirectiveThirdParty set_murmur2_upper
+syn keyword ngxDirectiveThirdParty set_sha1
+syn keyword ngxDirectiveThirdParty set_sha1_upper
+
+" Set Lang Module
+" Provides a variety of ways for setting a variable denoting the langauge that content should be returned in.
+syn keyword ngxDirectiveThirdParty set_lang
+syn keyword ngxDirectiveThirdParty set_lang_method
+syn keyword ngxDirectiveThirdParty lang_cookie
+syn keyword ngxDirectiveThirdParty lang_get_var
+syn keyword ngxDirectiveThirdParty lang_list
+syn keyword ngxDirectiveThirdParty lang_post_var
+syn keyword ngxDirectiveThirdParty lang_host
+syn keyword ngxDirectiveThirdParty lang_referer
+
+" Set Misc Module
+" Various set_xxx directives added to nginx's rewrite module
+syn keyword ngxDirectiveThirdParty set_if_empty
+syn keyword ngxDirectiveThirdParty set_quote_sql_str
+syn keyword ngxDirectiveThirdParty set_quote_pgsql_str
+syn keyword ngxDirectiveThirdParty set_quote_json_str
+syn keyword ngxDirectiveThirdParty set_unescape_uri
+syn keyword ngxDirectiveThirdParty set_escape_uri
+syn keyword ngxDirectiveThirdParty set_hashed_upstream
+syn keyword ngxDirectiveThirdParty set_encode_base32
+syn keyword ngxDirectiveThirdParty set_base32_padding
+syn keyword ngxDirectiveThirdParty set_misc_base32_padding
+syn keyword ngxDirectiveThirdParty set_base32_alphabet
+syn keyword ngxDirectiveThirdParty set_decode_base32
+syn keyword ngxDirectiveThirdParty set_encode_base64
+syn keyword ngxDirectiveThirdParty set_decode_base64
+syn keyword ngxDirectiveThirdParty set_encode_hex
+syn keyword ngxDirectiveThirdParty set_decode_hex
+syn keyword ngxDirectiveThirdParty set_sha1
+syn keyword ngxDirectiveThirdParty set_md5
+syn keyword ngxDirectiveThirdParty set_hmac_sha1
+syn keyword ngxDirectiveThirdParty set_random
+syn keyword ngxDirectiveThirdParty set_secure_random_alphanum
+syn keyword ngxDirectiveThirdParty set_secure_random_lcalpha
+syn keyword ngxDirectiveThirdParty set_rotate
+syn keyword ngxDirectiveThirdParty set_local_today
+syn keyword ngxDirectiveThirdParty set_formatted_gmt_time
+syn keyword ngxDirectiveThirdParty set_formatted_local_time
+
+" SFlow Module
+" A binary, random-sampling nginx module designed for: lightweight, centralized, continuous, real-time monitoring of very large and very busy web farms.
+syn keyword ngxDirectiveThirdParty sflow
+
+" Shibboleth Module
+" Shibboleth auth request module for nginx
+syn keyword ngxDirectiveThirdParty shib_request
+syn keyword ngxDirectiveThirdParty shib_request_set
+syn keyword ngxDirectiveThirdParty shib_request_use_headers
+
+" Slice Module
+" Nginx module for serving a file in slices (reverse byte-range)
+" syn keyword ngxDirectiveThirdParty slice
+syn keyword ngxDirectiveThirdParty slice_arg_begin
+syn keyword ngxDirectiveThirdParty slice_arg_end
+syn keyword ngxDirectiveThirdParty slice_header
+syn keyword ngxDirectiveThirdParty slice_footer
+syn keyword ngxDirectiveThirdParty slice_header_first
+syn keyword ngxDirectiveThirdParty slice_footer_last
+
+" SlowFS Cache Module
+" Module adding ability to cache static files.
+syn keyword ngxDirectiveThirdParty slowfs_big_file_size
+syn keyword ngxDirectiveThirdParty slowfs_cache
+syn keyword ngxDirectiveThirdParty slowfs_cache_key
+syn keyword ngxDirectiveThirdParty slowfs_cache_min_uses
+syn keyword ngxDirectiveThirdParty slowfs_cache_path
+syn keyword ngxDirectiveThirdParty slowfs_cache_purge
+syn keyword ngxDirectiveThirdParty slowfs_cache_valid
+syn keyword ngxDirectiveThirdParty slowfs_temp_path
+
+" Small Light Module
+" Dynamic Image Transformation Module For nginx.
+syn keyword ngxDirectiveThirdParty small_light
+syn keyword ngxDirectiveThirdParty small_light_getparam_mode
+syn keyword ngxDirectiveThirdParty small_light_material_dir
+syn keyword ngxDirectiveThirdParty small_light_pattern_define
+syn keyword ngxDirectiveThirdParty small_light_radius_max
+syn keyword ngxDirectiveThirdParty small_light_sigma_max
+syn keyword ngxDirectiveThirdParty small_light_imlib2_temp_dir
+syn keyword ngxDirectiveThirdParty small_light_buffer
+
+" Sorted Querystring Filter Module
+" Nginx module to expose querystring parameters sorted in a variable to be used on cache_key as example
+syn keyword ngxDirectiveThirdParty sorted_querystring_filter_parameter
+
+" Sphinx2 Module
+" Nginx upstream module for Sphinx 2.x
+syn keyword ngxDirectiveThirdParty sphinx2_pass
+syn keyword ngxDirectiveThirdParty sphinx2_bind
+syn keyword ngxDirectiveThirdParty sphinx2_connect_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_send_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_buffer_size
+syn keyword ngxDirectiveThirdParty sphinx2_read_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_next_upstream
+
+" HTTP SPNEGO auth Module
+" This module implements adds SPNEGO support to nginx(http://nginx.org). It currently supports only Kerberos authentication via GSSAPI
+syn keyword ngxDirectiveThirdParty auth_gss
+syn keyword ngxDirectiveThirdParty auth_gss_keytab
+syn keyword ngxDirectiveThirdParty auth_gss_realm
+syn keyword ngxDirectiveThirdParty auth_gss_service_name
+syn keyword ngxDirectiveThirdParty auth_gss_authorized_principal
+syn keyword ngxDirectiveThirdParty auth_gss_allow_basic_fallback
+
+" SR Cache Module
+" Transparent subrequest-based caching layout for arbitrary nginx locations
+syn keyword ngxDirectiveThirdParty srcache_fetch
+syn keyword ngxDirectiveThirdParty srcache_fetch_skip
+syn keyword ngxDirectiveThirdParty srcache_store
+syn keyword ngxDirectiveThirdParty srcache_store_max_size
+syn keyword ngxDirectiveThirdParty srcache_store_skip
+syn keyword ngxDirectiveThirdParty srcache_store_statuses
+syn keyword ngxDirectiveThirdParty srcache_store_ranges
+syn keyword ngxDirectiveThirdParty srcache_header_buffer_size
+syn keyword ngxDirectiveThirdParty srcache_store_hide_header
+syn keyword ngxDirectiveThirdParty srcache_store_pass_header
+syn keyword ngxDirectiveThirdParty srcache_methods
+syn keyword ngxDirectiveThirdParty srcache_ignore_content_encoding
+syn keyword ngxDirectiveThirdParty srcache_request_cache_control
+syn keyword ngxDirectiveThirdParty srcache_response_cache_control
+syn keyword ngxDirectiveThirdParty srcache_store_no_store
+syn keyword ngxDirectiveThirdParty srcache_store_no_cache
+syn keyword ngxDirectiveThirdParty srcache_store_private
+syn keyword ngxDirectiveThirdParty srcache_default_expire
+syn keyword ngxDirectiveThirdParty srcache_max_expire
+
+" SSSD Info Module
+" Retrives additional attributes from SSSD for current authentizated user
+syn keyword ngxDirectiveThirdParty sssd_info
+syn keyword ngxDirectiveThirdParty sssd_info_output_to
+syn keyword ngxDirectiveThirdParty sssd_info_groups
+syn keyword ngxDirectiveThirdParty sssd_info_group
+syn keyword ngxDirectiveThirdParty sssd_info_group_separator
+syn keyword ngxDirectiveThirdParty sssd_info_attributes
+syn keyword ngxDirectiveThirdParty sssd_info_attribute
+syn keyword ngxDirectiveThirdParty sssd_info_attribute_separator
+
+" Static Etags Module
+" Generate etags for static content
+syn keyword ngxDirectiveThirdParty FileETag
+
+" Statsd Module
+" An nginx module for sending statistics to statsd
+syn keyword ngxDirectiveThirdParty statsd_server
+syn keyword ngxDirectiveThirdParty statsd_sample_rate
+syn keyword ngxDirectiveThirdParty statsd_count
+syn keyword ngxDirectiveThirdParty statsd_timing
+
+" Sticky Module
+" Add a sticky cookie to be always forwarded to the same upstream server
+" syn keyword ngxDirectiveThirdParty sticky
+
+" Stream Echo Module
+" TCP/stream echo module for NGINX (a port of ngx_http_echo_module)
+syn keyword ngxDirectiveThirdParty echo
+syn keyword ngxDirectiveThirdParty echo_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush_wait
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_send_timeout
+syn keyword ngxDirectiveThirdParty echo_read_bytes
+syn keyword ngxDirectiveThirdParty echo_read_line
+syn keyword ngxDirectiveThirdParty echo_request_data
+syn keyword ngxDirectiveThirdParty echo_discard_request
+syn keyword ngxDirectiveThirdParty echo_read_buffer_size
+syn keyword ngxDirectiveThirdParty echo_read_timeout
+syn keyword ngxDirectiveThirdParty echo_client_error_log_level
+syn keyword ngxDirectiveThirdParty echo_lingering_close
+syn keyword ngxDirectiveThirdParty echo_lingering_time
+syn keyword ngxDirectiveThirdParty echo_lingering_timeout
+
+" Stream Lua Module
+" Embed the power of Lua into Nginx stream/TCP Servers.
+syn keyword ngxDirectiveThirdParty lua_resolver
+syn keyword ngxDirectiveThirdParty lua_resolver_timeout
+syn keyword ngxDirectiveThirdParty lua_lingering_close
+syn keyword ngxDirectiveThirdParty lua_lingering_time
+syn keyword ngxDirectiveThirdParty lua_lingering_timeout
+
+" Stream Upsync Module
+" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx.
+syn keyword ngxDirectiveThirdParty upsync
+syn keyword ngxDirectiveThirdParty upsync_dump_path
+syn keyword ngxDirectiveThirdParty upsync_lb
+syn keyword ngxDirectiveThirdParty upsync_show
+
+" Strip Module
+" Whitespace remover.
+syn keyword ngxDirectiveThirdParty strip
+
+" Subrange Module
+" Split one big HTTP/Range request to multiple subrange requesets
+syn keyword ngxDirectiveThirdParty subrange
+
+" Substitutions Module
+" A filter module which can do both regular expression and fixed string substitutions on response bodies.
+syn keyword ngxDirectiveThirdParty subs_filter
+syn keyword ngxDirectiveThirdParty subs_filter_types
+
+" Summarizer Module
+" Upstream nginx module to get summaries of documents using the summarizer daemon service
+syn keyword ngxDirectiveThirdParty smrzr_filename
+syn keyword ngxDirectiveThirdParty smrzr_ratio
+
+" Supervisord Module
+" Module providing nginx with API to communicate with supervisord and manage (start/stop) backends on-demand.
+syn keyword ngxDirectiveThirdParty supervisord
+syn keyword ngxDirectiveThirdParty supervisord_inherit_backend_status
+syn keyword ngxDirectiveThirdParty supervisord_name
+syn keyword ngxDirectiveThirdParty supervisord_start
+syn keyword ngxDirectiveThirdParty supervisord_stop
+
+" Tarantool Upstream Module
+" Tarantool NginX upstream module (REST, JSON API, websockets, load balancing)
+syn keyword ngxDirectiveThirdParty tnt_pass
+syn keyword ngxDirectiveThirdParty tnt_http_methods
+syn keyword ngxDirectiveThirdParty tnt_http_rest_methods
+syn keyword ngxDirectiveThirdParty tnt_pass_http_request
+syn keyword ngxDirectiveThirdParty tnt_pass_http_request_buffer_size
+syn keyword ngxDirectiveThirdParty tnt_method
+syn keyword ngxDirectiveThirdParty tnt_http_allowed_methods - experemental
+syn keyword ngxDirectiveThirdParty tnt_send_timeout
+syn keyword ngxDirectiveThirdParty tnt_read_timeout
+syn keyword ngxDirectiveThirdParty tnt_buffer_size
+syn keyword ngxDirectiveThirdParty tnt_next_upstream
+syn keyword ngxDirectiveThirdParty tnt_connect_timeout
+syn keyword ngxDirectiveThirdParty tnt_next_upstream
+syn keyword ngxDirectiveThirdParty tnt_next_upstream_tries
+syn keyword ngxDirectiveThirdParty tnt_next_upstream_timeout
+
+" TCP Proxy Module
+" Add the feature of tcp proxy with nginx, with health check and status monitor
+syn keyword ngxDirectiveBlock tcp
+" syn keyword ngxDirectiveThirdParty server
+" syn keyword ngxDirectiveThirdParty listen
+" syn keyword ngxDirectiveThirdParty allow
+" syn keyword ngxDirectiveThirdParty deny
+" syn keyword ngxDirectiveThirdParty so_keepalive
+" syn keyword ngxDirectiveThirdParty tcp_nodelay
+" syn keyword ngxDirectiveThirdParty timeout
+" syn keyword ngxDirectiveThirdParty server_name
+" syn keyword ngxDirectiveThirdParty resolver
+" syn keyword ngxDirectiveThirdParty resolver_timeout
+" syn keyword ngxDirectiveThirdParty upstream
+syn keyword ngxDirectiveThirdParty check
+syn keyword ngxDirectiveThirdParty check_http_send
+syn keyword ngxDirectiveThirdParty check_http_expect_alive
+syn keyword ngxDirectiveThirdParty check_smtp_send
+syn keyword ngxDirectiveThirdParty check_smtp_expect_alive
+syn keyword ngxDirectiveThirdParty check_shm_size
+syn keyword ngxDirectiveThirdParty check_status
+" syn keyword ngxDirectiveThirdParty ip_hash
+" syn keyword ngxDirectiveThirdParty proxy_pass
+" syn keyword ngxDirectiveThirdParty proxy_buffer
+" syn keyword ngxDirectiveThirdParty proxy_connect_timeout
+" syn keyword ngxDirectiveThirdParty proxy_read_timeout
+syn keyword ngxDirectiveThirdParty proxy_write_timeout
+
+" Testcookie Module
+" NGINX module for L7 DDoS attack mitigation
+syn keyword ngxDirectiveThirdParty testcookie
+syn keyword ngxDirectiveThirdParty testcookie_name
+syn keyword ngxDirectiveThirdParty testcookie_domain
+syn keyword ngxDirectiveThirdParty testcookie_expires
+syn keyword ngxDirectiveThirdParty testcookie_path
+syn keyword ngxDirectiveThirdParty testcookie_secret
+syn keyword ngxDirectiveThirdParty testcookie_session
+syn keyword ngxDirectiveThirdParty testcookie_arg
+syn keyword ngxDirectiveThirdParty testcookie_max_attempts
+syn keyword ngxDirectiveThirdParty testcookie_p3p
+syn keyword ngxDirectiveThirdParty testcookie_fallback
+syn keyword ngxDirectiveThirdParty testcookie_whitelist
+syn keyword ngxDirectiveThirdParty testcookie_pass
+syn keyword ngxDirectiveThirdParty testcookie_redirect_via_refresh
+syn keyword ngxDirectiveThirdParty testcookie_refresh_template
+syn keyword ngxDirectiveThirdParty testcookie_refresh_status
+syn keyword ngxDirectiveThirdParty testcookie_deny_keepalive
+syn keyword ngxDirectiveThirdParty testcookie_get_only
+syn keyword ngxDirectiveThirdParty testcookie_https_location
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie_key
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_iv
+syn keyword ngxDirectiveThirdParty testcookie_internal
+syn keyword ngxDirectiveThirdParty testcookie_httponly_flag
+syn keyword ngxDirectiveThirdParty testcookie_secure_flag
+
+" Types Filter Module
+" Change the `Content-Type` output header depending on an extension variable according to a condition specified in the 'if' clause.
+syn keyword ngxDirectiveThirdParty types_filter
+syn keyword ngxDirectiveThirdParty types_filter_use_default
+
+" Unzip Module
+" Enabling fetching of files that are stored in zipped archives.
+syn keyword ngxDirectiveThirdParty file_in_unzip_archivefile
+syn keyword ngxDirectiveThirdParty file_in_unzip_extract
+syn keyword ngxDirectiveThirdParty file_in_unzip
+
+" Upload Progress Module
+" An upload progress system, that monitors RFC1867 POST upload as they are transmitted to upstream servers
+syn keyword ngxDirectiveThirdParty upload_progress
+syn keyword ngxDirectiveThirdParty track_uploads
+syn keyword ngxDirectiveThirdParty report_uploads
+syn keyword ngxDirectiveThirdParty upload_progress_content_type
+syn keyword ngxDirectiveThirdParty upload_progress_header
+syn keyword ngxDirectiveThirdParty upload_progress_jsonp_parameter
+syn keyword ngxDirectiveThirdParty upload_progress_json_output
+syn keyword ngxDirectiveThirdParty upload_progress_jsonp_output
+syn keyword ngxDirectiveThirdParty upload_progress_template
+
+" Upload Module
+" Parses request body storing all files being uploaded to a directory specified by upload_store directive
+syn keyword ngxDirectiveThirdParty upload_pass
+syn keyword ngxDirectiveThirdParty upload_resumable
+syn keyword ngxDirectiveThirdParty upload_store
+syn keyword ngxDirectiveThirdParty upload_state_store
+syn keyword ngxDirectiveThirdParty upload_store_access
+syn keyword ngxDirectiveThirdParty upload_set_form_field
+syn keyword ngxDirectiveThirdParty upload_aggregate_form_field
+syn keyword ngxDirectiveThirdParty upload_pass_form_field
+syn keyword ngxDirectiveThirdParty upload_cleanup
+syn keyword ngxDirectiveThirdParty upload_buffer_size
+syn keyword ngxDirectiveThirdParty upload_max_part_header_len
+syn keyword ngxDirectiveThirdParty upload_max_file_size
+syn keyword ngxDirectiveThirdParty upload_limit_rate
+syn keyword ngxDirectiveThirdParty upload_max_output_body_len
+syn keyword ngxDirectiveThirdParty upload_tame_arrays
+syn keyword ngxDirectiveThirdParty upload_pass_args
+
+" Upstream Fair Module
+" The fair load balancer module for nginx http://nginx.localdomain.pl
+syn keyword ngxDirectiveThirdParty fair
+syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
+
+" Upstream Hash Module (DEPRECATED)
+" Provides simple upstream load distribution by hashing a configurable variable.
+" syn keyword ngxDirectiveDeprecated hash
+syn keyword ngxDirectiveDeprecated hash_again
+
+" Upstream Domain Resolve Module
+" A load-balancer that resolves an upstream domain name asynchronously.
+syn keyword ngxDirectiveThirdParty jdomain
+
+" Upsync Module
+" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx
+syn keyword ngxDirectiveThirdParty upsync
+syn keyword ngxDirectiveThirdParty upsync_dump_path
+syn keyword ngxDirectiveThirdParty upsync_lb
+syn keyword ngxDirectiveThirdParty upstream_show
+
+" URL Module
+" Nginx url encoding converting module
+syn keyword ngxDirectiveThirdParty url_encoding_convert
+syn keyword ngxDirectiveThirdParty url_encoding_convert_from
+syn keyword ngxDirectiveThirdParty url_encoding_convert_to
+
+" User Agent Module
+" Match browsers and crawlers
+syn keyword ngxDirectiveThirdParty user_agent
+
+" Upstrema Ketama Chash Module
+" Nginx load-balancer module implementing ketama consistent hashing.
+syn keyword ngxDirectiveThirdParty ketama_chash
+
+" Video Thumbextractor Module
+" Extract thumbs from a video file
+syn keyword ngxDirectiveThirdParty video_thumbextractor
+syn keyword ngxDirectiveThirdParty video_thumbextractor_video_filename
+syn keyword ngxDirectiveThirdParty video_thumbextractor_video_second
+syn keyword ngxDirectiveThirdParty video_thumbextractor_image_width
+syn keyword ngxDirectiveThirdParty video_thumbextractor_image_height
+syn keyword ngxDirectiveThirdParty video_thumbextractor_only_keyframe
+syn keyword ngxDirectiveThirdParty video_thumbextractor_next_time
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_rows
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_cols
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_rows
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_cols
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_sample_interval
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_color
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_margin
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_padding
+syn keyword ngxDirectiveThirdParty video_thumbextractor_threads
+syn keyword ngxDirectiveThirdParty video_thumbextractor_processes_per_worker
+
+" Eval Module
+" Module for nginx web server evaluates response of proxy or memcached module into variables.
+syn keyword ngxDirectiveThirdParty eval
+syn keyword ngxDirectiveThirdParty eval_escalate
+syn keyword ngxDirectiveThirdParty eval_override_content_type
+
+" VTS Module
+" Nginx virtual host traffic status module
+syn keyword ngxDirectiveThirdParty vhost_traffic_status
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_zone
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_format
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_jsonp
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_host
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_set_key
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_check_duplicate
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic_by_set_key
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_check_duplicate
+
+" XSS Module
+" Native support for cross-site scripting (XSS) in an nginx.
+syn keyword ngxDirectiveThirdParty xss_get
+syn keyword ngxDirectiveThirdParty xss_callback_arg
+syn keyword ngxDirectiveThirdParty xss_override_status
+syn keyword ngxDirectiveThirdParty xss_check_status
+syn keyword ngxDirectiveThirdParty xss_input_types
+
+" ZIP Module
+" ZIP archiver for nginx
+
+" Contained LUA blocks for embedded syntax highlighting
+syn keyword ngxThirdPartyLuaBlock balancer_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock init_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock init_worker_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock set_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock content_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock rewrite_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock access_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock header_filter_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock body_filter_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock log_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock ssl_certificate_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock ssl_session_fetch_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock ssl_session_store_by_lua_block contained
+
+
+" Nested syntax in ERB templating statements
+" Subtype needs to be set to '', otherwise recursive errors occur when opening *.nginx files
+let b:eruby_subtype = ''
+unlet b:current_syntax
+syn include @ERB syntax/eruby.vim
+syn region ngxTemplate start=+<%[^\=]+ end=+%>+ oneline contains=@ERB
+syn region ngxTemplateVar start=+<%=+ end=+%>+ oneline
+let b:current_syntax = "nginx"
+
+" Nested syntax in Jinja templating statements
+" This dependend on https://github.com/lepture/vim-jinja
+unlet b:current_syntax
+try
+ syn include @JINJA syntax/jinja.vim
+ syn region ngxTemplate start=+{%+ end=+%}+ oneline contains=@JINJA
+ syn region ngxTemplateVar start=+{{+ end=+}}+ oneline
+catch
+endtry
+let b:current_syntax = "nginx"
+
+" Enable nested LUA syntax highlighting
+unlet b:current_syntax
+syn include @LUA syntax/lua.vim
+syn region ngxLua start=+^\s*\w\+_by_lua_block\s*{+ end=+}+me=s-1 contains=ngxBlock,@LUA
+let b:current_syntax = "nginx"
+
+
+" Highlight
+hi link ngxComment Comment
+hi link ngxVariable Identifier
+hi link ngxVariableBlock Identifier
+hi link ngxVariableString PreProc
+hi link ngxBlock Normal
+hi link ngxString String
+hi link ngxIPaddr Delimiter
+hi link ngxBoolean Boolean
+hi link ngxInteger Number
+hi link ngxDirectiveBlock Statement
+hi link ngxDirectiveImportant Type
+hi link ngxDirectiveControl Keyword
+hi link ngxDirectiveDeprecated Error
+hi link ngxDirective Function
+hi link ngxDirectiveThirdParty Function
+hi link ngxListenOptions PreProc
+hi link ngxUpstreamServerOptions PreProc
+hi link ngxProxyNextUpstreamOptions PreProc
+hi link ngxMailProtocol Keyword
+hi link ngxSSLProtocol PreProc
+hi link ngxSSLProtocolDeprecated Error
+hi link ngxStickyOptions ngxDirective
+hi link ngxCookieOptions PreProc
+hi link ngxTemplateVar Identifier
+
+hi link ngxSSLSessionTicketsOff ngxBoolean
+hi link ngxSSLSessionTicketsOn Error
+hi link ngxSSLPreferServerCiphersOn ngxBoolean
+hi link ngxSSLPreferServerCiphersOff Error
+hi link ngxGzipOff ngxBoolean
+hi link ngxGzipOn Error
+hi link ngxSSLCipherInsecure Error
+
+hi link ngxThirdPartyLuaBlock Function
diff --git a/sources_non_forked/syntastic/syntax_checkers/html/stylelint.vim b/sources_non_forked/syntastic/syntax_checkers/html/stylelint.vim
new file mode 100644
index 00000000..ccbd1a30
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/html/stylelint.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: stylelint.vim
+"Description: Syntax checking plugin for syntastic using `stylelint`
+" (https://github.com/stylelint/stylelint).
+"Maintainer: Tim Carry
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_html_stylelint_checker')
+ finish
+endif
+let g:loaded_syntastic_html_stylelint_checker = 1
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'html',
+ \ 'name': 'stylelint',
+ \ 'redirect': 'css/stylelint'})
+
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/syntax_checkers/less/stylelint.vim b/sources_non_forked/syntastic/syntax_checkers/less/stylelint.vim
new file mode 100644
index 00000000..8c5576f7
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/less/stylelint.vim
@@ -0,0 +1,23 @@
+"============================================================================
+"File: stylelint.vim
+"Description: Syntax checking plugin for syntastic
+"Maintainer: LCD 47
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_less_stylelint_checker')
+ finish
+endif
+let g:loaded_syntastic_less_stylelint_checker = 1
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'less',
+ \ 'name': 'stylelint',
+ \ 'redirect': 'css/stylelint'})
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/syntax_checkers/perl6/perl6.vim b/sources_non_forked/syntastic/syntax_checkers/perl6/perl6.vim
new file mode 100644
index 00000000..fe1dd10b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/perl6/perl6.vim
@@ -0,0 +1,106 @@
+"============================================================================
+"File: perl6.vim
+"Description: Syntax checking plugin for syntastic
+"Maintainer: Claudio Ramirez
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+"
+" Security:
+"
+" This checker runs 'perl6 -c' against your file, which in turn executes
+" any BEGIN and CHECK blocks in your file. This is probably fine if you
+" wrote the file yourself, but it can be a problem if you're trying to
+" check third party files. If you are 100% willing to let Vim run the code
+" in your file, set g:syntastic_enable_perl6_checker to 1 in your vimrc
+" to enable this
+" checker:
+"
+" let g:syntastic_enable_perl6_checker = 1
+"
+" Reference:
+"
+" - https://docs.perl6.org/programs/00-running
+
+if exists('g:loaded_syntastic_perl6_perl6_checker')
+ finish
+endif
+let g:loaded_syntastic_perl6_perl6_checker = 1
+
+if !exists('g:syntastic_perl6_lib_path')
+ let g:syntastic_perl6_lib_path = []
+endif
+
+if !exists('g:syntastic_perl6_perl6_sort')
+ let g:syntastic_perl6_perl6_sort = 1
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_perl6_perl6_IsAvailable() dict " {{{1
+ " don't call executable() here, to allow things like
+ " let g:syntastic_perl6_perl6_exec = '/usr/bin/env perl6'
+ silent! call syntastic#util#system(self.getExecEscaped() . ' -e ' . syntastic#util#shescape('exit(0)'))
+ return (v:shell_error == 0) && syntastic#util#versionIsAtLeast(self.getVersion(), [2017, 1])
+endfunction " }}}1
+
+function! SyntaxCheckers_perl6_perl6_GetHighlightRegex(item) " {{{1
+ let term = matchstr(a:item['text'], '\m''\zs.\{-}\ze''')
+ if term !=# ''
+ return '\V' . escape(term, '\')
+ endif
+ let term = matchstr(a:item['text'], '\m^Undeclared .\+:\W\zs\S\+\ze')
+ if term !=# ''
+ return '\V' . escape(term, '\')
+ endif
+ let term = matchstr(a:item['text'], '\mCould not find \zs.\{-}\ze at')
+ if term !=# ''
+ return '\V' . escape(term, '\')
+ endif
+ let term = matchstr(a:item['text'], '\mCould not find \zs\S\+$')
+ return term !=# '' ? '\V' . escape(term, '\') : ''
+endfunction " }}}1
+
+function! SyntaxCheckers_perl6_perl6_GetLocList() dict " {{{1
+ if type(g:syntastic_perl6_lib_path) == type('')
+ call syntastic#log#oneTimeWarn('variable g:syntastic_perl6_lib_path should be a list')
+ let includes = split(g:syntastic_perl6_lib_path, ',')
+ else
+ let includes = copy(syntastic#util#var('perl6_lib_path', []))
+ endif
+ " support for PERL6LIB environment variable
+ if $PERL6LIB !=# ''
+ let includes += split($PERL6LIB, ':')
+ endif
+ call map(includes, '"-I" . v:val')
+
+ let errorformat =
+ \ '%f:%l:%c:%m,' .
+ \ ':%l:%c:%m'
+
+ let makeprg = self.makeprgBuild({ 'args_before': ['-c'] + includes })
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': { 'RAKUDO_EXCEPTIONS_HANDLER': 'JSON' },
+ \ 'defaults': { 'bufnr': bufnr(''), 'type': 'E' },
+ \ 'returns': [0, 1],
+ \ 'preprocess': 'perl6',
+ \ 'postprocess': ['guards', 'iconv'] })
+endfunction " }}}1
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'perl6',
+ \ 'name': 'perl6',
+ \ 'enable': 'enable_perl6_checker'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/syntax_checkers/solidity/solhint.vim b/sources_non_forked/syntastic/syntax_checkers/solidity/solhint.vim
new file mode 100644
index 00000000..55611194
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/solidity/solhint.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: solhint.vim
+"Description: Solidity syntax checker - using solhint
+"Maintainer: Brett Sun
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_solidity_solhint_checker')
+ finish
+endif
+let g:loaded_syntastic_solidity_solhint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_solidity_solhint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-f compact' })
+
+ let errorformat =
+ \ '%E%f: line %l\, col %c\, Error - %m,' .
+ \ '%W%f: line %l\, col %c\, Warning - %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'returns': [0, 1] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'solidity',
+ \ 'name': 'solhint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/syntax_checkers/sql/tsqllint.vim b/sources_non_forked/syntastic/syntax_checkers/sql/tsqllint.vim
new file mode 100644
index 00000000..ebc4f6d6
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/sql/tsqllint.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: tsqllint.vim
+"Description: Syntax checking plugin for syntastic
+"Maintainer: Daniel Walker
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_sql_tsqllint_checker')
+ finish
+endif
+
+let g:loaded_syntastic_sql_tsqllint_checker = 1
+
+if exists('g:syntastic_sql_tsqllint_sort')
+ let g:syntastic_sql_tsqllint_sort = 1
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_sql_tsqllint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%f(%l\,%c): %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'sql',
+ \ 'name': 'tsqllint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/vim-abolish/.gitignore b/sources_non_forked/vim-abolish/.gitignore
new file mode 100644
index 00000000..0a56e3fc
--- /dev/null
+++ b/sources_non_forked/vim-abolish/.gitignore
@@ -0,0 +1 @@
+/doc/tags
diff --git a/sources_non_forked/vim-abolish/CONTRIBUTING.markdown b/sources_non_forked/vim-abolish/CONTRIBUTING.markdown
new file mode 100644
index 00000000..b3f00951
--- /dev/null
+++ b/sources_non_forked/vim-abolish/CONTRIBUTING.markdown
@@ -0,0 +1 @@
+See the [contribution guidelines for pathogen.vim](https://github.com/tpope/vim-pathogen/blob/master/CONTRIBUTING.markdown).
diff --git a/sources_non_forked/vim-abolish/README.markdown b/sources_non_forked/vim-abolish/README.markdown
new file mode 100644
index 00000000..beb696cb
--- /dev/null
+++ b/sources_non_forked/vim-abolish/README.markdown
@@ -0,0 +1,150 @@
+# abolish.vim
+
+I sat on this plugin for 3 years before releasing it, primarily
+because it's so gosh darn hard to explain. It's three superficially
+unrelated plugins in one that share a common theme: working with
+variants of a word.
+
+## Abbreviation
+
+I know how to spell "separate". I know how to spell "desperate". My
+fingers, however, have trouble distinguishing between the two, and I
+invariably have a 50 percent chance of typing "seperate" or "desparate"
+each time one of these comes up. At first, I tried abbreviations:
+
+ :iabbrev seperate separate
+ :iabbrev desparate desperate
+
+But this falls short at the beginning of a sentence.
+
+ :iabbrev Seperate Separate
+ :iabbrev Desparate Desperate
+
+To be really thorough, we need uppercase too!
+
+ :iabbrev SEPERATE SEPARATE
+ :iabbrev DESPARATE DESPERATE
+
+Oh, but consider the noun form, and the adverb form!
+
+ :iabbrev seperation separation
+ :iabbrev desparation desperation
+ :iabbrev seperately separately
+ :iabbrev desparately desperately
+ :iabbrev Seperation separation
+ :iabbrev Desparation Desperation
+ :iabbrev Seperately Separately
+ :iabbrev Desparately Desperately
+ :iabbrev SEPERATION SEPARATION
+ :iabbrev DESPARATION DESPERATION
+ :iabbrev SEPERATELY SEPARATELY
+ :iabbrev DESPARATELY DESPERATELY
+
+Wait, there's also "separates", "separated", "separating",
+"separations", "separator"...
+
+Abolish.vim provides a simpler way. The following one command produces
+48 abbreviations including all of the above.
+
+ :Abolish {despa,sepe}rat{e,es,ed,ing,ely,ion,ions,or} {despe,sepa}rat{}
+
+My current configuration has 25 Abolish commands that create hundreds of
+corrections my fingers refuse to learn.
+
+## Substitution
+
+One time I had an application with a domain model called
+"facility" that needed to be renamed to "building". So, a simple
+search and replace, right?
+
+ :%s/facility/building/g
+
+Oh, but the case variants!
+
+ :%s/Facility/Building/g
+ :%s/FACILITY/BUILDING/g
+
+Wait, the plural is more than "s" so we need to get that too!
+
+ :%s/facilities/buildings/g
+ :%s/Facilities/Buildings/g
+ :%s/FACILITIES/BUILDINGS/g
+
+Abolish.vim has your back. One command to do all six, and you can
+repeat it with `&` too!
+
+ :%Subvert/facilit{y,ies}/building{,s}/g
+
+From a conceptual level, one way to think about how this substitution
+works is to imagine that in the braces you are declaring the
+requirements for turning that word from singular to plural. In
+the facility example, the same base letters in both the singular
+and plural form of the word are `facilit` To turn "facility" to a
+plural word you must change the `y` to `ies` so you specify
+`{y,ies}` in the braces.
+
+To convert the word "building" from singular to plural, again
+look at the common letters between the singular and plural forms:
+`building`. In this case you do not need to remove any letter
+from building to turn it into plural form and you need to
+add an `s` so the braces should be `{,s}`.
+
+A few more examples:
+
+Address to Reference
+
+ :Subvert/address{,es}/reference{,s}/g
+
+Blog to Post (you can just do this with a regular :s also)
+
+ :Subvert/blog{,s}/post{,s}/g
+
+Child to Adult
+
+ :Subvert/child{,ren}/adult{,s}/g
+
+Be amazed as it correctly turns the word children into the word adults!
+
+Die to Spinner
+
+ :Subvert/di{e,ce}/spinner{,s}/g
+
+You can abbreviate it as `:S`, and it accepts the full range of flags
+including things like `c` (confirm).
+
+There's also a variant for searching and a variant for grepping.
+
+## Coercion
+
+Want to turn `fooBar` into `foo_bar`? Press `crs` (coerce to
+snake\_case). MixedCase (`crm`), camelCase (`crc`), snake\_case
+(`crs`), UPPER\_CASE (`cru`), dash-case (`cr-`), dot.case (`cr.`),
+space case (`cr`), and Title Case (`crt`) are all just 3
+keystrokes away. These commands support
+[repeat.vim](https://github.com/tpope/vim-repeat).
+
+## Installation
+
+If you don't have a preferred installation method, I recommend
+installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
+then simply copy and paste:
+
+ cd ~/.vim/bundle
+ git clone git://github.com/tpope/vim-abolish.git
+
+Once help tags have been generated, you can view the manual with
+`:help abolish`.
+
+## Self-Promotion
+
+Like abolish.vim? Follow the repository on
+[GitHub](https://github.com/tpope/vim-abolish) and vote for it on
+[vim.org](http://www.vim.org/scripts/script.php?script_id=1545). And if
+you're feeling especially charitable, follow [tpope](http://tpo.pe/) on
+[Twitter](http://twitter.com/tpope) and
+[GitHub](https://github.com/tpope).
+
+## License
+
+Copyright (c) Tim Pope. Distributed under the same terms as Vim itself.
+See `:help license`.
diff --git a/sources_non_forked/vim-abolish/doc/abolish.txt b/sources_non_forked/vim-abolish/doc/abolish.txt
new file mode 100644
index 00000000..91f24da9
--- /dev/null
+++ b/sources_non_forked/vim-abolish/doc/abolish.txt
@@ -0,0 +1,181 @@
+*abolish.txt* Language friendly searches, substitutions, and abbreviations
+
+Author: Tim Pope
+License: Same terms as Vim itself (see |license|)
+
+This plugin is only available if 'compatible' is not set.
+
+INTRODUCTION *abolish* *:Abolish* *:Subvert*
+
+Abolish lets you quickly find, substitute, and abbreviate several variations
+of a word at once. By default, three case variants (foo, Foo, and FOO) are
+operated on by every command.
+
+Two commands are provided. :Abolish is the most general interface.
+:Subvert provides an alternative, more concise syntax for searching and
+substituting.
+>
+ :Abolish [options] {abbreviation} {replacement}
+ :Abolish -delete [options] {abbreviation}
+
+ :Abolish -search [options] {pattern}
+ :Subvert/{pattern}[/flags]
+ :Abolish!-search [options] {pattern}
+ :Subvert?{pattern}[?flags]
+
+ :Abolish -search [options] {pattern} {grep-arguments}
+ :Subvert /{pattern}/[flags] {grep-options}
+ :Abolish!-search [options] {pattern} {grep-arguments}
+ :Subvert!/{pattern}/[flags] {grep-options}
+
+ :[range]Abolish -substitute [options] {pattern} {replacement}
+ :[range]Subvert/{pattern}/{replacement}[/flags]
+<
+ *:S*
+In addition to the :Subvert command, a :S synonym is provided if not
+already defined. This will be used in examples below.
+
+PATTERNS *abolish-patterns*
+
+Patterns can include brace pairs that contain comma separated alternatives:
+
+ box{,es} => box, boxes, Box, Boxes, BOX, BOXES
+
+For commands with a replacement, corresponding brace pairs are used in both
+halves. If the replacement should be identical to the pattern, an empty
+brace pair may be used. If fewer replacements are given than were given in
+the pattern, they are looped. That is, {a,b} on the replacement side is the
+same as {a,b,a,b,a,b,...} repeated indefinitely.
+
+The following replaces several different misspellings of "necessary":
+>
+ :%S/{,un}nec{ce,ces,e}sar{y,ily}/{}nec{es}sar{}/g
+<
+ABBREVIATING *abolish-abbrev*
+
+By default :Abolish creates abbreviations, which replace words automatically
+as you type. This is good for words you frequently misspell, or as
+shortcuts for longer words. Since these are just Vim abbreviations, only
+whole words will match.
+>
+ :Abolish anomol{y,ies} anomal{}
+ :Abolish {,in}consistant{,ly} {}consistent{}
+ :Abolish Tqbf The quick, brown fox jumps over the lazy dog
+<
+Accepts the following options:
+
+ -buffer: buffer local
+ -cmdline: work in command line in addition to insert mode
+
+A good place to define abbreviations is "after/plugin/abolish.vim",
+relative to ~\vimfiles on Windows and ~/.vim everywhere else.
+
+With a bang (:Abolish!) the abbreviation is also appended to the file in
+g:abolish_save_file. The default is "after/plugin/abolish.vim", relative
+to the install directory.
+
+Abbreviations can be removed with :Abolish -delete:
+>
+ Abolish -delete -buffer -cmdline anomol{y,ies}
+<
+SEARCHING *abolish-search*
+
+The -search command does a search in a manner similar to / key.
+search. After searching, you can use |n| and |N| as you would with a normal
+search.
+
+The following will search for box, Box, and BOX:
+>
+ :Abolish -search box
+<
+When given a single word to operate on, :Subvert defaults to doing a
+search as well:
+>
+ :S/box/
+<
+This one searches for box, boxes, boxed, boxing, Box, Boxes, Boxed, Boxing,
+BOX, BOXES, BOXED, and BOXING:
+>
+ :S/box{,es,ed,ing}/
+<
+The following syntaxes search in reverse.
+>
+ :Abolish! -search box
+ :S?box?
+<
+Flags can be given with the -flags= option to :Abolish, or by appending them
+after the separator to :Subvert. The flags trigger the following behaviors:
+
+ I: Disable case variations (box, Box, BOX)
+ v: Match inside variable names (match my_box, myBox, but not mybox)
+ w: Match whole words (like surrounding with \< and \>)
+
+A |search-offset| may follow the flags.
+>
+ :Abolish -search -flags=avs+1 box
+ :S?box{,es,ed,ing}?we
+<
+GREPPING *abolish-grep*
+
+Grepping works similar to searching, and is invoked when additional options
+are given. These options are passed directly to the :grep command.
+>
+ :Abolish -search box{,es}
+ :S /box{,es}/ *
+ :S /box/aw *.txt *.html
+<
+The slash delimiters must both be present if used with :Subvert. They may
+both be omitted if no flags are used.
+
+Both an external grepprg and vimgrep (via grepprg=internal) are supported.
+With an external grep, the "v" flag behaves less intelligently, due to the
+lack of look ahead and look behind support in grep regexps.
+
+SUBSTITUTING *abolish-substitute*
+
+Giving a range switches :Subvert into substitute mode. This command will
+change box -> bag, boxes -> bags, Box -> Bag, Boxes -> Bags, BOX -> BAG,
+BOXES -> BAGS across the entire document:
+>
+ :%Abolish -substitute -flags=g box{,es} bag{,s}
+ :%S/box{,es}/bag{,s}/g
+<
+The "c", "e", "g", and "n" flags can be used from the substitute command
+|:s_flags|, along with the "a", "I", "v", and "w" flags from searching.
+
+COERCION *abolish-coercion* *cr*
+
+Abolish's case mutating algorithms can be applied to the word under the cursor
+using the cr mapping (mnemonic: CoeRce) followed by one of the following
+characters:
+
+ c: camelCase
+ m: MixedCase
+ _: snake_case
+ s: snake_case
+ u: SNAKE_UPPERCASE
+ U: SNAKE_UPPERCASE
+ -: dash-case (not usually reversible; see |abolish-coercion-reversible|)
+ k: kebab-case (not usually reversible; see |abolish-coercion-reversible|)
+ .: dot.case (not usually reversible; see |abolish-coercion-reversible|)
+ : space case (not usually reversible; see |abolish-coercion-reversible|)
+ t: Title Case (not usually reversible; see |abolish-coercion-reversible|)
+
+For example, cru on a lowercase word is a slightly easier to type equivalent
+to gUiw.
+
+COERCION REVERSIBILITY *abolish-coercion-reversible*
+
+Some separators, such as "-" and ".", are listed as "not usually reversible".
+The reason is that these are not "keyword characters", so vim (and
+abolish.vim) will treat them as breaking a word.
+
+For example: "key_word" is a single keyword. The dash-case version,
+"key-word", is treated as two keywords, "key" and "word".
+
+This behaviour is governed by the 'iskeyword' option. If a separator appears
+in 'iskeyword', the corresponding coercion will be reversible. For instance,
+dash-case is reversible in 'lisp' files, and dot-case is reversible in R
+files.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/sources_non_forked/vim-abolish/plugin/abolish.vim b/sources_non_forked/vim-abolish/plugin/abolish.vim
new file mode 100644
index 00000000..e2486c11
--- /dev/null
+++ b/sources_non_forked/vim-abolish/plugin/abolish.vim
@@ -0,0 +1,631 @@
+" abolish.vim - Language friendly searches, substitutions, and abbreviations
+" Maintainer: Tim Pope
+" Version: 1.1
+" GetLatestVimScripts: 1545 1 :AutoInstall: abolish.vim
+
+" Initialization {{{1
+
+if exists("g:loaded_abolish") || &cp || v:version < 700
+ finish
+endif
+let g:loaded_abolish = 1
+
+if !exists("g:abolish_save_file")
+ if isdirectory(expand("~/.vim"))
+ let g:abolish_save_file = expand("~/.vim/after/plugin/abolish.vim")
+ elseif isdirectory(expand("~/vimfiles")) || has("win32")
+ let g:abolish_save_file = expand("~/vimfiles/after/plugin/abolish.vim")
+ else
+ let g:abolish_save_file = expand("~/.vim/after/plugin/abolish.vim")
+ endif
+endif
+
+" }}}1
+" Utility functions {{{1
+
+function! s:function(name)
+ return function(substitute(a:name,'^s:',matchstr(expand(''), '\d\+_'),''))
+endfunction
+
+function! s:send(self,func,...)
+ if type(a:func) == type('') || type(a:func) == type(0)
+ let Func = get(a:self,a:func,'')
+ else
+ let Func = a:func
+ endif
+ let s = type(a:self) == type({}) ? a:self : {}
+ if type(Func) == type(function('tr'))
+ return call(Func,a:000,s)
+ elseif type(Func) == type({}) && has_key(Func,'apply')
+ return call(Func.apply,a:000,Func)
+ elseif type(Func) == type({}) && has_key(Func,'call')
+ return call(Func.call,a:000,s)
+ elseif type(Func) == type('') && Func == '' && has_key(s,'function missing')
+ return call('s:send',[s,'function missing',a:func] + a:000)
+ else
+ return Func
+ endif
+endfunction
+
+let s:object = {}
+function! s:object.clone(...)
+ let sub = deepcopy(self)
+ return a:0 ? extend(sub,a:1) : sub
+endfunction
+
+if !exists("g:Abolish")
+ let Abolish = {}
+endif
+call extend(Abolish, s:object, 'force')
+call extend(Abolish, {'Coercions': {}}, 'keep')
+
+function! s:throw(msg)
+ let v:errmsg = a:msg
+ throw "Abolish: ".a:msg
+endfunction
+
+function! s:words()
+ let words = []
+ let lnum = line('w0')
+ while lnum <= line('w$')
+ let line = getline(lnum)
+ let col = 0
+ while match(line,'\<\k\k\+\>',col) != -1
+ let words += [matchstr(line,'\<\k\k\+\>',col)]
+ let col = matchend(line,'\<\k\k\+\>',col)
+ endwhile
+ let lnum += 1
+ endwhile
+ return words
+endfunction
+
+function! s:extractopts(list,opts)
+ let i = 0
+ while i < len(a:list)
+ if a:list[i] =~ '^-[^=]' && has_key(a:opts,matchstr(a:list[i],'-\zs[^=]*'))
+ let key = matchstr(a:list[i],'-\zs[^=]*')
+ let value = matchstr(a:list[i],'=\zs.*')
+ if type(get(a:opts,key)) == type([])
+ let a:opts[key] += [value]
+ elseif type(get(a:opts,key)) == type(0)
+ let a:opts[key] = 1
+ else
+ let a:opts[key] = value
+ endif
+ else
+ let i += 1
+ continue
+ endif
+ call remove(a:list,i)
+ endwhile
+ return a:opts
+endfunction
+
+" }}}1
+" Dictionary creation {{{1
+
+function! s:mixedcase(word)
+ return substitute(s:camelcase(a:word),'^.','\u&','')
+endfunction
+
+function! s:camelcase(word)
+ let word = substitute(a:word, '-', '_', 'g')
+ if word !~# '_' && word =~# '\l'
+ return substitute(word,'^.','\l&','')
+ else
+ return substitute(word,'\C\(_\)\=\(.\)','\=submatch(1)==""?tolower(submatch(2)) : toupper(submatch(2))','g')
+ endif
+endfunction
+
+function! s:snakecase(word)
+ let word = substitute(a:word,'::','/','g')
+ let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
+ let word = substitute(word,'\(\l\|\d\)\(\u\)','\1_\2','g')
+ let word = substitute(word,'[.-]','_','g')
+ let word = tolower(word)
+ return word
+endfunction
+
+function! s:uppercase(word)
+ return toupper(s:snakecase(a:word))
+endfunction
+
+function! s:dashcase(word)
+ return substitute(s:snakecase(a:word),'_','-','g')
+endfunction
+
+function! s:spacecase(word)
+ return substitute(s:snakecase(a:word),'_',' ','g')
+endfunction
+
+function! s:dotcase(word)
+ return substitute(s:snakecase(a:word),'_','.','g')
+endfunction
+
+function! s:titlecase(word)
+ return substitute(s:spacecase(a:word), '\(\<\w\)','\=toupper(submatch(1))','g')
+endfunction
+
+call extend(Abolish, {
+ \ 'camelcase': s:function('s:camelcase'),
+ \ 'mixedcase': s:function('s:mixedcase'),
+ \ 'snakecase': s:function('s:snakecase'),
+ \ 'uppercase': s:function('s:uppercase'),
+ \ 'dashcase': s:function('s:dashcase'),
+ \ 'dotcase': s:function('s:dotcase'),
+ \ 'spacecase': s:function('s:spacecase'),
+ \ 'titlecase': s:function('s:titlecase')
+ \ }, 'keep')
+
+function! s:create_dictionary(lhs,rhs,opts)
+ let dictionary = {}
+ let i = 0
+ let expanded = s:expand_braces({a:lhs : a:rhs})
+ for [lhs,rhs] in items(expanded)
+ if get(a:opts,'case',1)
+ let dictionary[s:mixedcase(lhs)] = s:mixedcase(rhs)
+ let dictionary[tolower(lhs)] = tolower(rhs)
+ let dictionary[toupper(lhs)] = toupper(rhs)
+ endif
+ let dictionary[lhs] = rhs
+ endfor
+ let i += 1
+ return dictionary
+endfunction
+
+function! s:expand_braces(dict)
+ let new_dict = {}
+ for [key,val] in items(a:dict)
+ if key =~ '{.*}'
+ let redo = 1
+ let [all,kbefore,kmiddle,kafter;crap] = matchlist(key,'\(.\{-\}\){\(.\{-\}\)}\(.*\)')
+ let [all,vbefore,vmiddle,vafter;crap] = matchlist(val,'\(.\{-\}\){\(.\{-\}\)}\(.*\)') + ["","","",""]
+ if all == ""
+ let [vbefore,vmiddle,vafter] = [val, ",", ""]
+ endif
+ let targets = split(kmiddle,',',1)
+ let replacements = split(vmiddle,',',1)
+ if replacements == [""]
+ let replacements = targets
+ endif
+ for i in range(0,len(targets)-1)
+ let new_dict[kbefore.targets[i].kafter] = vbefore.replacements[i%len(replacements)].vafter
+ endfor
+ else
+ let new_dict[key] = val
+ endif
+ endfor
+ if exists("redo")
+ return s:expand_braces(new_dict)
+ else
+ return new_dict
+ endif
+endfunction
+
+" }}}1
+" Abolish Dispatcher {{{1
+
+function! s:SubComplete(A,L,P)
+ if a:A =~ '^[/?]\k\+$'
+ let char = strpart(a:A,0,1)
+ return join(map(s:words(),'char . v:val'),"\n")
+ elseif a:A =~# '^\k\+$'
+ return join(s:words(),"\n")
+ endif
+endfunction
+
+function! s:Complete(A,L,P)
+ let g:L = a:L
+ " Vim bug: :Abolish - calls this function with a:A equal to 0
+ if a:A =~# '^[^/?-]' && type(a:A) != type(0)
+ return join(s:words(),"\n")
+ elseif a:L =~# '^\w\+\s\+\%(-\w*\)\=$'
+ return "-search\n-substitute\n-delete\n-buffer\n-cmdline\n"
+ elseif a:L =~# ' -\%(search\|substitute\)\>'
+ return "-flags="
+ else
+ return "-buffer\n-cmdline"
+ endif
+endfunction
+
+let s:commands = {}
+let s:commands.abstract = s:object.clone()
+
+function! s:commands.abstract.dispatch(bang,line1,line2,count,args)
+ return self.clone().go(a:bang,a:line1,a:line2,a:count,a:args)
+endfunction
+
+function! s:commands.abstract.go(bang,line1,line2,count,args)
+ let self.bang = a:bang
+ let self.line1 = a:line1
+ let self.line2 = a:line2
+ let self.count = a:count
+ return self.process(a:bang,a:line1,a:line2,a:count,a:args)
+endfunction
+
+function! s:dispatcher(bang,line1,line2,count,args)
+ let i = 0
+ let args = copy(a:args)
+ let command = s:commands.abbrev
+ while i < len(args)
+ if args[i] =~# '^-\w\+$' && has_key(s:commands,matchstr(args[i],'-\zs.*'))
+ let command = s:commands[matchstr(args[i],'-\zs.*')]
+ call remove(args,i)
+ break
+ endif
+ let i += 1
+ endwhile
+ try
+ return command.dispatch(a:bang,a:line1,a:line2,a:count,args)
+ catch /^Abolish: /
+ echohl ErrorMsg
+ echo v:errmsg
+ echohl NONE
+ return ""
+ endtry
+endfunction
+
+" }}}1
+" Subvert Dispatcher {{{1
+
+function! s:subvert_dispatcher(bang,line1,line2,count,args)
+ try
+ return s:parse_subvert(a:bang,a:line1,a:line2,a:count,a:args)
+ catch /^Subvert: /
+ echohl ErrorMsg
+ echo v:errmsg
+ echohl NONE
+ return ""
+ endtry
+endfunction
+
+function! s:parse_subvert(bang,line1,line2,count,args)
+ if a:args =~ '^\%(\w\|$\)'
+ let args = (a:bang ? "!" : "").a:args
+ else
+ let args = a:args
+ endif
+ let separator = matchstr(args,'^.')
+ let split = split(args,separator,1)[1:]
+ if a:count || split == [""]
+ return s:parse_substitute(a:bang,a:line1,a:line2,a:count,split)
+ elseif len(split) == 1
+ return s:find_command(separator,"",split[0])
+ elseif len(split) == 2 && split[1] =~# '^[A-Za-z]*n[A-Za-z]*$'
+ return s:parse_substitute(a:bang,a:line1,a:line2,a:count,[split[0],"",split[1]])
+ elseif len(split) == 2 && split[1] =~# '^[A-Za-z]*\%([+-]\d\+\)\=$'
+ return s:find_command(separator,split[1],split[0])
+ elseif len(split) >= 2 && split[1] =~# '^[A-Za-z]* '
+ let flags = matchstr(split[1],'^[A-Za-z]*')
+ let rest = matchstr(join(split[1:],separator),' \zs.*')
+ return s:grep_command(rest,a:bang,flags,split[0])
+ elseif len(split) >= 2 && separator == ' '
+ return s:grep_command(join(split[1:],' '),a:bang,"",split[0])
+ else
+ return s:parse_substitute(a:bang,a:line1,a:line2,a:count,split)
+ endif
+endfunction
+
+function! s:normalize_options(flags)
+ if type(a:flags) == type({})
+ let opts = a:flags
+ let flags = get(a:flags,"flags","")
+ else
+ let opts = {}
+ let flags = a:flags
+ endif
+ let g:op1 = copy(opts)
+ if flags =~# 'w'
+ let opts.boundaries = 2
+ elseif flags =~# 'v'
+ let opts.boundaries = 1
+ elseif !has_key(opts,'boundaries')
+ let opts.boundaries = 0
+ endif
+ let opts.case = (flags !~# 'I' ? get(opts,'case',1) : 0)
+ let opts.flags = substitute(flags,'\C[avIiw]','','g')
+ let g:op2 = copy(opts)
+ return opts
+endfunction
+
+" }}}1
+" Searching {{{1
+
+function! s:subesc(pattern)
+ return substitute(a:pattern,'[][\\/.*+?~%()&]','\\&','g')
+endfunction
+
+function! s:sort(a,b)
+ if a:a ==? a:b
+ return a:a == a:b ? 0 : a:a > a:b ? 1 : -1
+ elseif strlen(a:a) == strlen(a:b)
+ return a:a >? a:b ? 1 : -1
+ else
+ return strlen(a:a) < strlen(a:b) ? 1 : -1
+ endif
+endfunction
+
+function! s:pattern(dict,boundaries)
+ if a:boundaries == 2
+ let a = '<'
+ let b = '>'
+ elseif a:boundaries
+ let a = '%(<|_@<=|[[:lower:]]@<=[[:upper:]]@=)'
+ let b = '%(>|_@=|[[:lower:]]@<=[[:upper:]]@=)'
+ else
+ let a = ''
+ let b = ''
+ endif
+ return '\v\C'.a.'%('.join(map(sort(keys(a:dict),function('s:sort')),'s:subesc(v:val)'),'|').')'.b
+endfunction
+
+function! s:egrep_pattern(dict,boundaries)
+ if a:boundaries == 2
+ let a = '\<'
+ let b = '\>'
+ elseif a:boundaries
+ let a = '(\<\|_)'
+ let b = '(\>\|_\|[[:upper:]][[:lower:]])'
+ else
+ let a = ''
+ let b = ''
+ endif
+ return a.'('.join(map(sort(keys(a:dict),function('s:sort')),'s:subesc(v:val)'),'\|').')'.b
+endfunction
+
+function! s:c()
+ call histdel('search',-1)
+ return ""
+endfunction
+
+function! s:find_command(cmd,flags,word)
+ let opts = s:normalize_options(a:flags)
+ let dict = s:create_dictionary(a:word,"",opts)
+ " This is tricky. If we use :/pattern, the search drops us at the
+ " beginning of the line, and we can't use position flags (e.g., /foo/e).
+ " If we use :norm /pattern, we leave ourselves vulnerable to "press enter"
+ " prompts (even with :silent).
+ let cmd = (a:cmd =~ '[?!]' ? '?' : '/')
+ let @/ = s:pattern(dict,opts.boundaries)
+ if opts.flags == "" || !search(@/,'n')
+ return "norm! ".cmd."\"
+ elseif opts.flags =~ ';[/?]\@!'
+ call s:throw("E386: Expected '?' or '/' after ';'")
+ else
+ return "exe 'norm! ".cmd.cmd.opts.flags."\'|call histdel('search',-1)"
+ return ""
+ endif
+endfunction
+
+function! s:grep_command(args,bang,flags,word)
+ let opts = s:normalize_options(a:flags)
+ let dict = s:create_dictionary(a:word,"",opts)
+ if &grepprg == "internal"
+ let lhs = "'".s:pattern(dict,opts.boundaries)."'"
+ else
+ let lhs = "-E '".s:egrep_pattern(dict,opts.boundaries)."'"
+ endif
+ return "grep".(a:bang ? "!" : "")." ".lhs." ".a:args
+endfunction
+
+let s:commands.search = s:commands.abstract.clone()
+let s:commands.search.options = {"word": 0, "variable": 0, "flags": ""}
+
+function! s:commands.search.process(bang,line1,line2,count,args)
+ call s:extractopts(a:args,self.options)
+ if self.options.word
+ let self.options.flags .= "w"
+ elseif self.options.variable
+ let self.options.flags .= "v"
+ endif
+ let opts = s:normalize_options(self.options)
+ if len(a:args) > 1
+ return s:grep_command(join(a:args[1:]," "),a:bang,opts,a:args[0])
+ elseif len(a:args) == 1
+ return s:find_command(a:bang ? "!" : " ",opts,a:args[0])
+ else
+ call s:throw("E471: Argument required")
+ endif
+endfunction
+
+" }}}1
+" Substitution {{{1
+
+function! Abolished()
+ return get(g:abolish_last_dict,submatch(0),submatch(0))
+endfunction
+
+function! s:substitute_command(cmd,bad,good,flags)
+ let opts = s:normalize_options(a:flags)
+ let dict = s:create_dictionary(a:bad,a:good,opts)
+ let lhs = s:pattern(dict,opts.boundaries)
+ let g:abolish_last_dict = dict
+ return a:cmd.'/'.lhs.'/\=Abolished()'."/".opts.flags
+endfunction
+
+function! s:parse_substitute(bang,line1,line2,count,args)
+ if get(a:args,0,'') =~ '^[/?'']'
+ let separator = matchstr(a:args[0],'^.')
+ let args = split(join(a:args,' '),separator,1)
+ call remove(args,0)
+ else
+ let args = a:args
+ endif
+ if len(args) < 2
+ call s:throw("E471: Argument required")
+ elseif len(args) > 3
+ call s:throw("E488: Trailing characters")
+ endif
+ let [bad,good,flags] = (args + [""])[0:2]
+ if a:count == 0
+ let cmd = "substitute"
+ else
+ let cmd = a:line1.",".a:line2."substitute"
+ endif
+ return s:substitute_command(cmd,bad,good,flags)
+endfunction
+
+let s:commands.substitute = s:commands.abstract.clone()
+let s:commands.substitute.options = {"word": 0, "variable": 0, "flags": "g"}
+
+function! s:commands.substitute.process(bang,line1,line2,count,args)
+ call s:extractopts(a:args,self.options)
+ if self.options.word
+ let self.options.flags .= "w"
+ elseif self.options.variable
+ let self.options.flags .= "v"
+ endif
+ let opts = s:normalize_options(self.options)
+ if len(a:args) <= 1
+ call s:throw("E471: Argument required")
+ else
+ let good = join(a:args[1:],"")
+ let cmd = a:bang ? "." : "%"
+ return s:substitute_command(cmd,a:args[0],good,self.options)
+ endif
+endfunction
+
+" }}}1
+" Abbreviations {{{1
+
+function! s:badgood(args)
+ let words = filter(copy(a:args),'v:val !~ "^-"')
+ call filter(a:args,'v:val =~ "^-"')
+ if empty(words)
+ call s:throw("E471: Argument required")
+ elseif !empty(a:args)
+ call s:throw("Unknown argument: ".a:args[0])
+ endif
+ let [bad; words] = words
+ return [bad, join(words," ")]
+endfunction
+
+function! s:abbreviate_from_dict(cmd,dict)
+ for [lhs,rhs] in items(a:dict)
+ exe a:cmd lhs rhs
+ endfor
+endfunction
+
+let s:commands.abbrev = s:commands.abstract.clone()
+let s:commands.abbrev.options = {"buffer":0,"cmdline":0,"delete":0}
+function! s:commands.abbrev.process(bang,line1,line2,count,args)
+ let args = copy(a:args)
+ call s:extractopts(a:args,self.options)
+ if self.options.delete
+ let cmd = "unabbrev"
+ let good = ""
+ else
+ let cmd = "noreabbrev"
+ endif
+ if !self.options.cmdline
+ let cmd = "i" . cmd
+ endif
+ if self.options.delete
+ let cmd = "silent! ".cmd
+ endif
+ if self.options.buffer
+ let cmd = cmd . " "
+ endif
+ let [bad, good] = s:badgood(a:args)
+ if substitute(bad,'{.\{-\}.}','','g') !~ '^\k\+$'
+ call s:throw("E474: Invalid argument (not a keyword: ".string(bad).")")
+ endif
+ if !self.options.delete && good == ""
+ call s:throw("E471: Argument required".a:args[0])
+ endif
+ let dict = s:create_dictionary(bad,good,self.options)
+ call s:abbreviate_from_dict(cmd,dict)
+ if a:bang
+ let i = 0
+ let str = "Abolish ".join(args," ")
+ let file = g:abolish_save_file
+ if !isdirectory(fnamemodify(file,':h'))
+ call mkdir(fnamemodify(file,':h'),'p')
+ endif
+
+ if filereadable(file)
+ let old = readfile(file)
+ else
+ let old = ["\" Exit if :Abolish isn't available.","if !exists(':Abolish')"," finish","endif",""]
+ endif
+ call writefile(old + [str],file)
+ endif
+ return ""
+endfunction
+
+let s:commands.delete = s:commands.abbrev.clone()
+let s:commands.delete.options.delete = 1
+
+" }}}1
+" Maps {{{1
+
+function! s:unknown_coercion(letter,word)
+ return a:word
+endfunction
+
+call extend(Abolish.Coercions, {
+ \ 'c': Abolish.camelcase,
+ \ 'm': Abolish.mixedcase,
+ \ 's': Abolish.snakecase,
+ \ '_': Abolish.snakecase,
+ \ 'u': Abolish.uppercase,
+ \ 'U': Abolish.uppercase,
+ \ '-': Abolish.dashcase,
+ \ 'k': Abolish.dashcase,
+ \ '.': Abolish.dotcase,
+ \ ' ': Abolish.spacecase,
+ \ 't': Abolish.titlecase,
+ \ "function missing": s:function("s:unknown_coercion")
+ \}, "keep")
+
+function! s:coerce(transformation)
+ let clipboard = &clipboard
+ try
+ set clipboard=
+ let regbody = getreg('"')
+ let regtype = getregtype('"')
+ let c = v:count1
+ while c > 0
+ let c -= 1
+ norm! yiw
+ let word = @@
+ let @@ = s:send(g:Abolish.Coercions,a:transformation,word)
+ if !exists('begin')
+ let begin = getpos("'[")
+ endif
+ if word !=# @@
+ let changed = 1
+ norm! viwpw
+ else
+ norm! w
+ endif
+ endwhile
+ call setreg('"',regbody,regtype)
+ call setpos("'[",begin)
+ call setpos(".",begin)
+ if exists("changed")
+ silent! call repeat#set("\Coerce".a:transformation)
+ endif
+ finally
+ let &clipboard = clipboard
+ endtry
+endfunction
+
+nnoremap Coerce :call coerce(nr2char(getchar()))
+
+" }}}1
+
+if !exists("g:abolish_no_mappings") || ! g:abolish_no_mappings
+ nmap cr Coerce
+endif
+
+command! -nargs=+ -bang -bar -range=0 -complete=custom,s:Complete Abolish
+ \ :exec s:dispatcher(0,,,,[])
+command! -nargs=1 -bang -bar -range=0 -complete=custom,s:SubComplete Subvert
+ \ :exec s:subvert_dispatcher(0,,,,)
+if exists(':S') != 2
+ command -nargs=1 -bang -bar -range=0 -complete=custom,s:SubComplete S
+ \ :exec s:subvert_dispatcher(0,,,,)
+endif
+
+" vim:set ft=vim sw=2 sts=2:
diff --git a/sources_non_forked/vim-go/.dockerignore b/sources_non_forked/vim-go/.dockerignore
new file mode 100644
index 00000000..2d2ecd68
--- /dev/null
+++ b/sources_non_forked/vim-go/.dockerignore
@@ -0,0 +1 @@
+.git/
diff --git a/sources_non_forked/vim-go/.editorconfig b/sources_non_forked/vim-go/.editorconfig
new file mode 100644
index 00000000..2c222811
--- /dev/null
+++ b/sources_non_forked/vim-go/.editorconfig
@@ -0,0 +1,17 @@
+# http://EditorConfig.org
+
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+[*.go]
+indent_style = tab
+indent_size = 4
+
+[Makefile]
+indent_style = tab
+indent_size = 8
diff --git a/sources_non_forked/vim-go/.vintrc.yaml b/sources_non_forked/vim-go/.vintrc.yaml
new file mode 100644
index 00000000..32d7decf
--- /dev/null
+++ b/sources_non_forked/vim-go/.vintrc.yaml
@@ -0,0 +1,7 @@
+policies:
+ ProhibitUnnecessaryDoubleQuote:
+ enabled: false
+ ProhibitEqualTildeOperator:
+ enabled: false
+ ProhibitNoAbortFunction:
+ enabled: false
diff --git a/sources_non_forked/vim-go/Dockerfile b/sources_non_forked/vim-go/Dockerfile
new file mode 100644
index 00000000..1b23bea8
--- /dev/null
+++ b/sources_non_forked/vim-go/Dockerfile
@@ -0,0 +1,19 @@
+FROM golang:1.9.1
+
+RUN apt-get update -y && \
+ apt-get install -y build-essential curl git libncurses5-dev python3-pip && \
+ apt-get clean && \
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+RUN useradd -ms /bin/bash -d /vim-go vim-go
+USER vim-go
+
+COPY . /vim-go/
+WORKDIR /vim-go
+
+RUN scripts/install-vim vim-7.4
+RUN scripts/install-vim vim-8.0
+RUN scripts/install-vim nvim
+RUN pip3 install vim-vint
+
+ENTRYPOINT ["make"]
diff --git a/sources_non_forked/vim-go/autoload/fzf/decls.vim b/sources_non_forked/vim-go/autoload/fzf/decls.vim
new file mode 100644
index 00000000..255320ec
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/fzf/decls.vim
@@ -0,0 +1,150 @@
+function! s:code(group, attr) abort
+ let code = synIDattr(synIDtrans(hlID(a:group)), a:attr, "cterm")
+ if code =~ '^[0-9]\+$'
+ return code
+ endif
+endfunction
+
+function! s:color(str, group) abort
+ let fg = s:code(a:group, "fg")
+ let bg = s:code(a:group, "bg")
+ let bold = s:code(a:group, "bold")
+ let italic = s:code(a:group, "italic")
+ let reverse = s:code(a:group, "reverse")
+ let underline = s:code(a:group, "underline")
+ let color = (empty(fg) ? "" : ("38;5;".fg)) .
+ \ (empty(bg) ? "" : (";48;5;".bg)) .
+ \ (empty(bold) ? "" : ";1") .
+ \ (empty(italic) ? "" : ";3") .
+ \ (empty(reverse) ? "" : ";7") .
+ \ (empty(underline) ? "" : ";4")
+ return printf("\x1b[%sm%s\x1b[m", color, a:str)
+endfunction
+
+function! s:sink(str) abort
+ if len(a:str) < 2
+ return
+ endif
+ let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
+ let dir = getcwd()
+ try
+ " we jump to the file directory so we can get the fullpath via fnamemodify
+ " below
+ execute cd . fnameescape(s:current_dir)
+
+ let vals = matchlist(a:str[1], '|\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)|')
+
+ " i.e: main.go
+ let filename = vals[1]
+ let line = vals[2]
+ let col = vals[3]
+
+ " i.e: /Users/fatih/vim-go/main.go
+ let filepath = fnamemodify(filename, ":p")
+
+ let cmd = get({'ctrl-x': 'split',
+ \ 'ctrl-v': 'vertical split',
+ \ 'ctrl-t': 'tabe'}, a:str[0], 'e')
+ execute cmd fnameescape(filepath)
+ call cursor(line, col)
+ silent! norm! zvzz
+ finally
+ "jump back to old dir
+ execute cd . fnameescape(dir)
+ endtry
+endfunction
+
+function! s:source(mode,...) abort
+ let s:current_dir = expand('%:p:h')
+ let ret_decls = []
+
+ let bin_path = go#path#CheckBinPath('motion')
+ if empty(bin_path)
+ return
+ endif
+ let command = printf("%s -format vim -mode decls", bin_path)
+ let command .= " -include ". get(g:, "go_decls_includes", "func,type")
+
+ call go#cmd#autowrite()
+
+ if a:mode == 0
+ " current file mode
+ let fname = expand("%:p")
+ if a:0 && !empty(a:1)
+ let fname = a:1
+ endif
+
+ let command .= printf(" -file %s", shellescape(fname))
+ else
+ " all functions mode
+ if a:0 && !empty(a:1)
+ let s:current_dir = a:1
+ endif
+
+ let command .= printf(" -dir %s", shellescape(s:current_dir))
+ endif
+
+ let out = go#util#System(command)
+ if go#util#ShellError() != 0
+ call go#util#EchoError(out)
+ return
+ endif
+
+ let result = eval(out)
+ if type(result) != 4 || !has_key(result, 'decls')
+ return ret_decls
+ endif
+
+ let decls = result.decls
+
+ " find the maximum function name
+ let max_len = 0
+ for decl in decls
+ if len(decl.ident)> max_len
+ let max_len = len(decl.ident)
+ endif
+ endfor
+
+ for decl in decls
+ " paddings
+ let space = " "
+ for i in range(max_len - len(decl.ident))
+ let space .= " "
+ endfor
+
+ let pos = printf("|%s:%s:%s|",
+ \ fnamemodify(decl.filename, ":t"),
+ \ decl.line,
+ \ decl.col
+ \)
+ call add(ret_decls, printf("%s\t%s %s\t%s",
+ \ s:color(decl.ident . space, "Function"),
+ \ s:color(decl.keyword, "Keyword"),
+ \ s:color(pos, "SpecialComment"),
+ \ s:color(decl.full, "Comment"),
+ \))
+ endfor
+
+ return ret_decls
+endfunc
+
+function! fzf#decls#cmd(...) abort
+ let normal_fg = s:code("Normal", "fg")
+ let normal_bg = s:code("Normal", "bg")
+ let cursor_fg = s:code("CursorLine", "fg")
+ let cursor_bg = s:code("CursorLine", "bg")
+ let colors = printf(" --color %s%s%s%s%s",
+ \ &background,
+ \ empty(normal_fg) ? "" : (",fg:".normal_fg),
+ \ empty(normal_bg) ? "" : (",bg:".normal_bg),
+ \ empty(cursor_fg) ? "" : (",fg+:".cursor_fg),
+ \ empty(cursor_bg) ? "" : (",bg+:".cursor_bg),
+ \)
+ call fzf#run(fzf#wrap('GoDecls', {
+ \ 'source': call('source', a:000),
+ \ 'options': '-n 1 --ansi --prompt "GoDecls> " --expect=ctrl-t,ctrl-v,ctrl-x'.colors,
+ \ 'sink*': function('s:sink')
+ \ }))
+endfunction
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/autoload/go/decls.vim b/sources_non_forked/vim-go/autoload/go/decls.vim
new file mode 100644
index 00000000..493bbd37
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/go/decls.vim
@@ -0,0 +1,21 @@
+if !exists('g:go_decls_mode')
+ let g:go_decls_mode = ''
+endif
+
+function! go#decls#Decls(mode, ...) abort
+ if g:go_decls_mode == 'ctrlp'
+ call ctrlp#init(call("ctrlp#decls#cmd", [a:mode] + a:000))
+ elseif g:go_decls_mode == 'fzf'
+ call call("fzf#decls#cmd", [a:mode] + a:000)
+ else
+ if globpath(&rtp, 'plugin/ctrlp.vim') != ""
+ call ctrlp#init(call("ctrlp#decls#cmd", [a:mode] + a:000))
+ elseif globpath(&rtp, 'plugin/fzf.vim') != ""
+ call call("fzf#decls#cmd", [a:mode] + a:000)
+ else
+ call go#util#EchoError("neither ctrlp.vim nor fzf.vim are installed. Please install either one")
+ end
+ end
+endfunction
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/autoload/go/fillstruct.vim b/sources_non_forked/vim-go/autoload/go/fillstruct.vim
new file mode 100644
index 00000000..926dc225
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/go/fillstruct.vim
@@ -0,0 +1,52 @@
+function! go#fillstruct#FillStruct() abort
+ let l:cmd = ['fillstruct',
+ \ '-file', bufname(''),
+ \ '-offset', go#util#OffsetCursor()]
+
+ " Read from stdin if modified.
+ if &modified
+ call add(l:cmd, '-modified')
+ let [l:out, l:err] = go#util#Exec(l:cmd, go#util#archive())
+ else
+ let [l:out, l:err] = go#util#Exec(l:cmd)
+ endif
+
+ if l:err
+ call go#util#EchoError(l:out)
+ return
+ endif
+
+ try
+ let l:json = json_decode(l:out)
+ catch
+ call go#util#EchoError(l:out)
+ return
+ endtry
+
+ let l:code = split(l:json['code'], "\n")
+ let l:pos = getpos('.')
+
+ try
+ " Add any code before/after the struct.
+ exe l:json['start'] . 'go'
+ let l:code[0] = getline('.')[:col('.')-1] . l:code[0]
+ exe l:json['end'] . 'go'
+ let l:code[len(l:code)-1] .= getline('.')[col('.'):]
+
+ " Indent every line except the first one; makes it look nice.
+ let l:indent = repeat("\t", indent('.') / &ts)
+ for i in range(1, len(l:code)-1)
+ let l:code[l:i] = l:indent . l:code[i]
+ endfor
+
+ " Out with the old ...
+ exe 'normal! ' . l:json['start'] . 'gov' . l:json['end'] . 'gox'
+ " ... in with the new.
+ call setline('.', l:code[0])
+ call append('.', l:code[1:])
+ finally
+ call setpos('.', l:pos)
+ endtry
+endfunction
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/autoload/go/fillstruct_test.vim b/sources_non_forked/vim-go/autoload/go/fillstruct_test.vim
new file mode 100644
index 00000000..634f6350
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/go/fillstruct_test.vim
@@ -0,0 +1,19 @@
+func! Test_fillstruct() abort
+ try
+ let l:tmp = gotest#write_file('a/a.go', [
+ \ 'package a',
+ \ 'import "net/mail"',
+ \ 'var addr = mail.Address{}'])
+
+ call go#fillstruct#FillStruct()
+ call gotest#assert_buffer(1, [
+ \ 'var addr = mail.Address{',
+ \ '\tName: "",',
+ \ '\tAddress: "",',
+ \ '}'])
+ finally
+ call delete(l:tmp, 'rf')
+ endtry
+endfunc
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/autoload/go/tool_test.vim b/sources_non_forked/vim-go/autoload/go/tool_test.vim
new file mode 100644
index 00000000..1af3b7b9
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/go/tool_test.vim
@@ -0,0 +1,23 @@
+func! Test_ExecuteInDir() abort
+ let l:tmp = gotest#write_file('a/a.go', ['package a'])
+ try
+ let l:out = go#tool#ExecuteInDir("pwd")
+ call assert_equal(l:tmp . "/src/a\n", l:out)
+ finally
+ call delete(l:tmp, 'rf')
+ endtry
+endfunc
+
+func! Test_ExecuteInDir_nodir() abort
+ let l:tmp = go#util#tempdir("executeindir")
+ exe ':e ' . l:tmp . '/new-dir/a'
+
+ try
+ let l:out = go#tool#ExecuteInDir("pwd")
+ call assert_equal('', l:out)
+ finally
+ call delete(l:tmp, 'rf')
+ endtry
+endfunc
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/autoload/gotest.vim b/sources_non_forked/vim-go/autoload/gotest.vim
new file mode 100644
index 00000000..5a4df1f2
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/gotest.vim
@@ -0,0 +1,106 @@
+" Write a Go file to a temporary directory and append this directory to $GOPATH.
+"
+" The file will written to a:path, which is relative to the temporary directory,
+" and this file will be loaded as the current buffer.
+"
+" The cursor will be placed on the character before any 0x1f byte.
+"
+" The full path to the created directory is returned, it is the caller's
+" responsibility to clean that up!
+fun! gotest#write_file(path, contents) abort
+ let l:dir = go#util#tempdir("vim-go-test/testrun/")
+ let $GOPATH .= ':' . l:dir
+ let l:full_path = l:dir . '/src/' . a:path
+
+ call mkdir(fnamemodify(l:full_path, ':h'), 'p')
+ call writefile(a:contents, l:full_path)
+ exe 'cd ' . l:dir . '/src'
+ silent exe 'e ' . a:path
+
+ " Set cursor.
+ let l:lnum = 1
+ for l:line in a:contents
+ let l:m = match(l:line, '')
+ if l:m > -1
+ call setpos('.', [0, l:lnum, l:m, 0])
+ call setline('.', substitute(getline('.'), '', '', ''))
+ break
+ endif
+
+ let l:lnum += 1
+ endfor
+
+ return l:dir
+endfun
+
+" Load a fixture file from test-fixtures.
+"
+" The file will be copied to a new GOPATH-compliant temporary directory and
+" loaded as the current buffer.
+fun! gotest#load_fixture(path) abort
+ let l:dir = go#util#tempdir("vim-go-test/testrun/")
+ let $GOPATH .= ':' . l:dir
+ let l:full_path = l:dir . '/src/' . a:path
+
+ call mkdir(fnamemodify(l:full_path, ':h'), 'p')
+ exe 'cd ' . l:dir . '/src'
+ silent exe 'noautocmd e ' . a:path
+ silent exe printf('read %s/test-fixtures/%s', g:vim_go_root, a:path)
+ silent noautocmd w!
+
+ return l:dir
+endfun
+
+" Diff the contents of the current buffer to a:want, which should be a list.
+" If a:skipHeader is true we won't bother with the package and import
+" declarations; so e.g.:
+"
+" let l:diff = s:diff_buffer(1, ['_ = mail.Address{}'])
+"
+" will pass, whereas otherwise you'd have to:
+"
+" let l:diff = s:diff_buffer(0, ['package main', 'import "net/mail", '_ = mail.Address{}'])
+fun! gotest#assert_buffer(skipHeader, want) abort
+ let l:buffer = go#util#GetLines()
+
+ if a:skipHeader
+ for l:lnum in range(0, len(l:buffer) - 1)
+ " Bit rudimentary, but works reasonably well.
+ if match(l:buffer[l:lnum], '^\v(func|var|const|import \(|\))') > -1
+ " vint bug: https://github.com/Kuniwak/vint/issues/179
+ " vint: -ProhibitUsingUndeclaredVariable
+ let l:buffer = l:buffer[l:lnum:len(l:buffer)]
+ break
+ endif
+ endfor
+ endif
+
+ " Using ' is often easier so we don't have to escape ".
+ let l:want = map(a:want, 'substitute(v:val, "\\\\t", "\t", "")')
+
+ let l:tmp = go#util#tempdir('assert_buffer')
+ try
+ call writefile(l:buffer, l:tmp . '/have')
+ call writefile(l:want, l:tmp . '/want')
+ call go#fmt#run('gofmt', l:tmp . '/have', l:tmp . '/have')
+ call go#fmt#run('gofmt', l:tmp . '/want', l:tmp . '/want')
+ let [l:out, l:err] = go#util#Exec(["diff", "-u", l:tmp . '/have', l:tmp . '/want'])
+ finally
+ call delete(l:tmp . '/have')
+ call delete(l:tmp . '/want')
+ call delete(l:tmp, 'd')
+ endtry
+
+ if l:err || l:out != ''
+ let v:errors = extend(v:errors, split(l:out, "\n"))
+ endif
+endfun
+
+" Diff the contents of the current buffer to the fixture file in a:path.
+fun! gotest#assert_fixture(path) abort
+ let l:want = readfile(printf('%s/test-fixtures/%s', g:vim_go_root, a:path))
+ call gotest#assert_buffer(0, l:want)
+endfun
+
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/autoload/unite/sources/decls.vim b/sources_non_forked/vim-go/autoload/unite/sources/decls.vim
new file mode 100644
index 00000000..b4d5da80
--- /dev/null
+++ b/sources_non_forked/vim-go/autoload/unite/sources/decls.vim
@@ -0,0 +1,70 @@
+let s:save_cpo = &cpoptions
+set cpoptions&vim
+
+let s:source = {
+ \ 'name': 'decls',
+ \ 'description': 'GoDecls implementation for unite',
+ \ 'syntax': 'uniteSource__Decls',
+ \ 'action_table': {},
+ \ 'hooks': {},
+ \ }
+
+function! unite#sources#decls#define()
+ return s:source
+endfunction
+
+function! s:source.gather_candidates(args, context) abort
+ let l:bin_path = go#path#CheckBinPath('motion')
+ if empty(l:bin_path)
+ return []
+ endif
+
+ let l:path = expand(get(a:args, 0, '%:p:h'))
+ if isdirectory(l:path)
+ let l:mode = 'dir'
+ elseif filereadable(l:path)
+ let l:mode = 'file'
+ else
+ return []
+ endif
+
+ let l:include = get(g:, 'go_decls_includes', 'func,type')
+ let l:command = printf('%s -format vim -mode decls -include %s -%s %s', l:bin_path, l:include, l:mode, shellescape(l:path))
+ let l:candidates = []
+ try
+ let l:result = eval(unite#util#system(l:command))
+ let l:candidates = get(l:result, 'decls', [])
+ catch
+ call unite#print_source_error(['command returned invalid response.', v:exception], s:source.name)
+ endtry
+
+ return map(l:candidates, "{
+ \ 'word': printf('%s :%d :%s', fnamemodify(v:val.filename, ':~:.'), v:val.line, v:val.full),
+ \ 'kind': 'jump_list',
+ \ 'action__path': v:val.filename,
+ \ 'action__line': v:val.line,
+ \ 'action__col': v:val.col,
+ \ }")
+endfunction
+
+function! s:source.hooks.on_syntax(args, context) abort
+ syntax match uniteSource__Decls_Filepath /[^:]*\ze:/ contained containedin=uniteSource__Decls
+ syntax match uniteSource__Decls_Line /\d\+\ze :/ contained containedin=uniteSource__Decls
+ syntax match uniteSource__Decls_WholeFunction /\vfunc %(\([^)]+\) )?[^(]+/ contained containedin=uniteSource__Decls
+ syntax match uniteSource__Decls_Function /\S\+\ze(/ contained containedin=uniteSource__Decls_WholeFunction
+ syntax match uniteSource__Decls_WholeType /type \S\+/ contained containedin=uniteSource__Decls
+ syntax match uniteSource__Decls_Type /\v( )@<=\S+/ contained containedin=uniteSource__Decls_WholeType
+ highlight default link uniteSource__Decls_Filepath Comment
+ highlight default link uniteSource__Decls_Line LineNr
+ highlight default link uniteSource__Decls_Function Function
+ highlight default link uniteSource__Decls_Type Type
+
+ syntax match uniteSource__Decls_Separator /:/ contained containedin=uniteSource__Decls conceal
+ syntax match uniteSource__Decls_SeparatorFunction /func / contained containedin=uniteSource__Decls_WholeFunction conceal
+ syntax match uniteSource__Decls_SeparatorType /type / contained containedin=uniteSource__Decls_WholeType conceal
+endfunction
+
+let &cpoptions = s:save_cpo
+unlet s:save_cpo
+
+" vim: sw=2 ts=2 et
diff --git a/sources_non_forked/vim-go/scripts/docker-test b/sources_non_forked/vim-go/scripts/docker-test
new file mode 100644
index 00000000..2b56ad87
--- /dev/null
+++ b/sources_non_forked/vim-go/scripts/docker-test
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# Run all tests inside a Docker container
+#
+
+set -euC
+vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
+cd "$vimgodir"
+
+docker build --tag vim-go-test .
+docker run --rm vim-go-test
+
+# vim:ts=2:sts=2:sw=2:et
diff --git a/sources_non_forked/vim-go/scripts/install-vim b/sources_non_forked/vim-go/scripts/install-vim
new file mode 100644
index 00000000..7b4e7a44
--- /dev/null
+++ b/sources_non_forked/vim-go/scripts/install-vim
@@ -0,0 +1,112 @@
+#!/bin/sh
+#
+# Install and setup a Vim or Neovim for running tests.
+# This should work on both Travis and people's desktop computers, and be 100%
+# independent from any system installed Vim.
+#
+# It will echo the full path to a Vim binary, e.g.:
+# /some/path/src/vim
+
+set -euC
+
+vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
+cd "$vimgodir"
+
+vim=${1:-}
+
+case "$vim" in
+ "vim-7.4")
+ # This is what the most recent Ubuntu LTS (16.04) ships with.
+ tag="v7.4.1689"
+ giturl="https://github.com/vim/vim"
+ ;;
+
+ "vim-8.0")
+ # This follows the version in Arch Linux. Vim's master branch isn't always
+ # stable, and we don't want to have the build fail because Vim introduced a
+ # bug.
+ tag="v8.0.1176"
+ giturl="https://github.com/vim/vim"
+ ;;
+
+ "nvim")
+ # Use latest stable version.
+ tag="v0.2.0"
+ giturl="https://github.com/neovim/neovim"
+ ;;
+
+ *)
+ echo "unknown version: '${1:-}'"
+ echo "First argument must be 'vim-7.4', 'vim-8.0', or 'nvim'."
+ exit 1
+ ;;
+esac
+
+srcdir="/tmp/vim-go-test/$1-src"
+installdir="/tmp/vim-go-test/$1-install"
+
+# Use cached installdir.
+if [ -d "$installdir" ]; then
+ echo "$installdir exists; skipping build."
+
+ # The ./scripts/test script relies on this.
+ echo "installed to: $installdir"
+ exit 0
+fi
+
+mkdir -p "$srcdir"
+cd "$srcdir"
+
+# Neovim build requires more deps than Vim and is annoying, so we use the
+# binary.
+# 0.2.0 doesn't have a binary build for Linux, so we use 0.2.1-dev for now.
+if [ "$1" = "nvim" ]; then
+
+ # TODO: Use macOS binaries on macOS
+ curl -Ls https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz |
+ tar xzf - -C /tmp/vim-go-test/
+ mv /tmp/vim-go-test/nvim-linux64 /tmp/vim-go-test/nvim-install
+ mkdir -p "$installdir/share/nvim/runtime/pack/vim-go/start"
+ ln -s "$vimgodir" "$installdir/share/nvim/runtime/pack/vim-go/start/vim-go"
+
+ # Consistent paths makes calling things easier.
+ mv "$installdir/bin/nvim" "$installdir/bin/vim"
+ mkdir -p "$installdir/share/vim/vimgo/pack"
+ ln -s "$installdir/share/nvim/runtime/pack/vim-go" "$installdir/share/vim/vimgo/pack/vim-go"
+
+# Build Vim from source.
+else
+ if [ -d "$srcdir/.git" ]; then
+ echo "Skipping clone as $srcdir/.git exists"
+ else
+ echo "Cloning $tag from $giturl"
+ git clone --branch "$tag" --depth 1 "$giturl" "$srcdir"
+ fi
+
+ ./configure --prefix="$installdir" --with-features=huge --disable-gui
+ make install
+ mkdir -p "$installdir/share/vim/vimgo/pack/vim-go/start"
+ ln -s "$vimgodir" "$installdir/share/vim/vimgo/pack/vim-go/start/vim-go"
+fi
+
+# Make sure all Go tools and other dependencies are installed.
+echo "Installing Go binaries"
+export GOPATH=$installdir
+export PATH=${GOPATH}/bin:$PATH
+"$vimgodir/scripts/run-vim" $vim +':silent :GoUpdateBinaries' +':qa'
+
+echo "Installing lint tools"
+(
+ mkdir -p "$installdir/share/vim/vimgo/pack/vim-go/start/"
+ cd "$installdir/share/vim/vimgo/pack/vim-go/start/"
+ [ -d "vim-vimhelplint" ] || git clone --depth 1 --quiet https://github.com/machakann/vim-vimhelplint
+ [ -d "vim-vimlparser" ] || git clone --depth 1 --quiet https://github.com/ynkdir/vim-vimlparser
+ [ -d "vim-vimlint" ] || git clone --depth 1 --quiet https://github.com/syngan/vim-vimlint
+)
+
+# Don't really need source after successful install.
+rm -rf "$srcdir"
+
+echo "installed to: $installdir"
+
+# vim:ts=2:sts=2:sw=2:et
diff --git a/sources_non_forked/vim-go/scripts/lint b/sources_non_forked/vim-go/scripts/lint
new file mode 100644
index 00000000..553413a4
--- /dev/null
+++ b/sources_non_forked/vim-go/scripts/lint
@@ -0,0 +1,88 @@
+#!/bin/sh
+#
+# Run all linting tools.
+#
+
+set -euC
+vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
+cd "$vimgodir"
+
+### Setup Vim and other dependencies.
+#####################################
+if [ -z "${1:-}" ]; then
+ echo "unknown version: '${1:-}'"
+ echo "First argument must be 'vim-7.4', 'vim-8.0', or 'nvim'."
+ exit 1
+fi
+
+vim=$1
+vimdir="/tmp/vim-go-test/$vim-install"
+export GOPATH=$vimdir
+export PATH=${GOPATH}/bin:$PATH
+
+if [ ! -f "$vimdir/bin/vim" ]; then
+ echo "$vimdir/bin/vim doesn't exist; did you install it with the install-vim script?"
+ exit 1
+fi
+
+### Run vint
+############
+failed=0
+printf "Running vint ... "
+if [ -x "$(command -v vint)" ]; then
+ lint=$(vint "$vimgodir" 2>&1 ||:)
+ if [ -n "$lint" ]; then
+ echo "FAILED"
+ echo "$lint"
+ echo
+ failed=6
+ else
+ echo "PASSED"
+ fi
+else
+ echo "SKIPPED"
+ echo "'vint' binary not found; use 'pip install vim-vint' to install it."
+fi
+
+### Run vim-vimlint
+###################
+printf "Running vim-vimlint ... "
+lint=$(sh "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint/bin/vimlint.sh" \
+ -p "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlparser" \
+ -l "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint" \
+ -u \
+ -c func_abort=1 \
+ -e EVL110=1 -e EVL103=1 -e EVL104=1 -e EVL102=1 \
+ "$vimgodir" \
+ 2>&1 ||:)
+if [ -n "$lint" ]; then
+ echo "FAILED"
+ echo "$lint"
+ echo
+ failed=6
+else
+ echo "PASSED"
+fi
+
+### Run vimhelplint.
+####################
+printf "Running vimhelplint ... "
+
+# set modeline explicitly so that the modeline will be respected when run as root.
+lint=$($vimdir/bin/vim -esNR \
+ --cmd "set rtp+=$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimhelplint/" \
+ --cmd 'set modeline' \
+ +'filetype plugin on' \
+ +"e $vimgodir/doc/vim-go.txt" \
+ +'verbose VimhelpLintEcho' \
+ +q \
+ 2>&1 ||:)
+if [ "$lint" ]; then
+ echo "FAILED"
+ echo "$lint"
+ failed=6
+else
+ echo "PASSED"
+fi
+
+exit "$failed"
diff --git a/sources_non_forked/vim-go/scripts/run-vim b/sources_non_forked/vim-go/scripts/run-vim
new file mode 100644
index 00000000..baf0be3e
--- /dev/null
+++ b/sources_non_forked/vim-go/scripts/run-vim
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Run a "bare" Vim with just vim-go and ignoring ~/.vim
+#
+
+set -euC
+vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
+cd "$vimgodir"
+
+if [ -z "${1:-}" ]; then
+ echo "unknown version: '${1:-}'"
+ echo "First argument must be 'vim-7.4', 'vim-8.0', or 'nvim'."
+ exit 1
+fi
+
+dir="/tmp/vim-go-test/$1-install"
+export GOPATH=$dir
+export PATH=${GOPATH}/bin:$PATH
+shift
+
+if [ ! -f "$dir/bin/vim" ]; then
+ echo "$dir/bin/vim doesn't exist; did you install it with the install-vim script?"
+ exit 1
+fi
+
+$dir/bin/vim --noplugin -u NONE -N \
+ +"set shm+=WAFI rtp=$dir/share/vim/vimgo packpath=$dir/share/vim/vimgo,$vimgodir" \
+ +'filetype plugin indent on' \
+ +'packloadall!' \
+ "$@"
+
+
+# vim:ts=2:sts=2:sw=2:et
diff --git a/sources_non_forked/vim-go/scripts/test b/sources_non_forked/vim-go/scripts/test
new file mode 100644
index 00000000..8676505f
--- /dev/null
+++ b/sources_non_forked/vim-go/scripts/test
@@ -0,0 +1,51 @@
+#!/bin/sh
+#
+# Run all tests.
+#
+
+set -euC
+vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
+cd "$vimgodir"
+
+### Setup Vim and other dependencies.
+#####################################
+if [ -z "${1:-}" ]; then
+ echo "unknown version: '${1:-}'"
+ echo "First argument must be 'vim-7.4', 'vim-8.0', or 'nvim'."
+ exit 1
+fi
+
+vim=$1
+vimdir="/tmp/vim-go-test/$vim-install"
+export GOPATH=$vimdir
+export PATH=${GOPATH}/bin:$PATH
+
+if [ ! -f "$vimdir/bin/vim" ]; then
+ echo "$vimdir/bin/vim doesn't exist; did you install it with the install-vim script?"
+ exit 1
+fi
+
+### Run tests.
+##############
+# Clean stale log file.
+[ -f '/tmp/vim-go-test/test.log' ] && rm '/tmp/vim-go-test/test.log'
+[ -f '/tmp/vim-go-test/FAILED' ] && rm '/tmp/vim-go-test/FAILED'
+
+# Run the actual tests.
+fail=0
+for test_file in "$vimgodir"/autoload/go/*_test.vim; do
+ "$vimgodir/scripts/run-vim" $vim -e +"silent e $test_file" -S ./scripts/runtest.vim
+
+ # Append logs
+ cat '/tmp/vim-go-test/test.tmp' | tee '/tmp/vim-go-test/test.log'
+ rm '/tmp/vim-go-test/test.tmp'
+done
+
+echo
+if [ -f "/tmp/vim-go-test/FAILED" ]; then
+ echo 2>&1 "Some tests FAILED"
+ exit 1
+fi
+echo 2>&1 "All tests PASSED"
+
+# vim:ts=2:sts=2:sw=2:et
diff --git a/sources_non_forked/vim-snippets/UltiSnips/haskell.snippets b/sources_non_forked/vim-snippets/UltiSnips/haskell.snippets
new file mode 100644
index 00000000..11d82c81
--- /dev/null
+++ b/sources_non_forked/vim-snippets/UltiSnips/haskell.snippets
@@ -0,0 +1,5 @@
+priority -50
+
+snippet impq "Qualified import"
+import qualified ${1:Data.Text} as ${0:`!p snip.rv = t[1].split(".")[-1]`}
+endsnippet
diff --git a/sources_non_forked/vim-snippets/UltiSnips/robot.snippets b/sources_non_forked/vim-snippets/UltiSnips/robot.snippets
new file mode 100644
index 00000000..0457fd03
--- /dev/null
+++ b/sources_non_forked/vim-snippets/UltiSnips/robot.snippets
@@ -0,0 +1,340 @@
+##############################################################################
+# Robot Framework Snippets for UltiSnips #
+##############################################################################
+
+priority -50
+
+######################
+# Built In library #
+######################
+snippet cat "Catenate"
+Catenate SEPARATOR=${1:---} ${2:Hello} ${3:world}
+endsnippet
+
+snippet eval "Evaluate"
+\${${1:val}}= Evaluate ${2:${x} - 10}
+endsnippet
+
+snippet for "FOR loop" b
+:FOR ${${1:element}} IN ${2:@{ELEMENTS}}
+\ ${0:${VISUAL:Start Element}} ${$1}
+endsnippet
+
+snippet nop "No Operation"
+No Operation
+endsnippet
+
+snippet rfk "Return From Keyword"
+Return From Keyword ${1:${optional return value}}
+endsnippet
+
+snippet rfki "Return From Keyword If"
+Return From Keyword If ${1:${condition}} ${2:${optional return value}}
+endsnippet
+
+snippet rk "Run Keyword"
+Run Keyword ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkacof "Run Keyword And Continue On Failure"
+Run Keyword And Continue On Failure ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkaee "Run Keyword And Expect Error"
+Run Keyword And Expect Error ${1:My error} ${2:${kw}} ${3:${args}}
+endsnippet
+
+snippet rkaie "Run Keyword And Ignore Error"
+Run Keyword And Ignore Error ${1:${kw}} ${2:${args}}
+\${${3:result}} \${${4:return_value}}= Run Keyword And Ignore Error ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkar "Run Keyword And Return"
+Run Keyword And Return ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkari "Run Keyword And Return If"
+Run Keyword And Return If ${1:{condition}} ${2:${kw}} ${3:${args}}
+endsnippet
+
+snippet rkars "Run Keyword And Return Status"
+\${${3:result}}= Run Keyword And Return Status ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rki "Run Keyword If"
+Run Keyword If ${1:${rc} < 0} ${2:${VISUAL:Some keyword returning a value}}
+... ELSE IF ${3:'${str}' == 'abc'} ${4:Another keyword}
+... ELSE ${5:Final keyword}
+endsnippet
+
+snippet rkiactf "Run Keyword If Any Critical Tests Failed"
+Run Keyword If Any Critical Tests Failed ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkiactp "Run Keyword If All Critical Tests Passed"
+Run Keyword If All Critical Tests Passed ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkiatf "Run Keyword If Any Tests Failed"
+Run Keyword If Any Tests Failed ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkiatp "Run Keyword If All Tests Passed"
+Run Keyword If All Tests Passed ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkitf "Run Keyword If Test Failed"
+Run Keyword If Test Failed ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkitp "Run Keyword If Test Passed"
+Run Keyword If Test Passed ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rkito "Run Keyword If Timeout Occurred"
+Run Keyword If Timeout Occurred ${1:${kw}} ${2:${args}}
+endsnippet
+
+snippet rks "Run Keywords"
+Run Keywords
+... ${1:${VISUAL:Initialize database $\{DB NAME\}}} AND
+... ${2:Clear logs}
+endsnippet
+
+snippet rku "Run Keyword Unless"
+Run Keyword Unless ${1:${condition}} ${2:${kw}} ${3:${args}}
+endsnippet
+
+snippet sgv "Set Global Variable"
+Set Global Variable \${${1:name}} ${2:${value}}
+endsnippet
+
+snippet sleep "Sleep"
+Sleep ${1:2 minutes 10 seconds}
+endsnippet
+
+snippet ssv "Set Suite Variable"
+Set Suite Variable \${${1:name}} ${2:${value}}
+endsnippet
+
+snippet stv "Set Test Variable"
+Set Test Variable \${${1:name}} ${2:${value}}
+endsnippet
+
+snippet sv "Set Variable"
+\${${1:name}}= Set Variable ${2:${value}}
+endsnippet
+
+snippet svi "Set Variable If"
+\${${1:var}}= Set Variable If ${2:${condition}} ${3:${value true}} ${4:${value false}}
+endsnippet
+
+snippet wuks "Wait Until Keyword Succeeds"
+Wait Until Keyword Succeeds ${1:10x} ${2:2s} ${3:${VISUAL:Some Keyword}}
+endsnippet
+
+
+#####################
+# Dialogs library #
+#####################
+snippet pause "Pause test execution"
+Import library Dialogs
+Pause execution
+endsnippet
+
+
+##############################
+# Selenium2Library library #
+##############################
+snippet cps "Capture Page Screenshot"
+Capture Page Screenshot ${1:${optional filename}}
+endsnippet
+
+snippet esbd "Element Should Be Disabled"
+Element Should Be Disabled \${${1:locator}}
+endsnippet
+
+snippet esbe "Element Should Be Enabled"
+Element Should Be Enabled ${${1:locator}}
+endsnippet
+
+snippet esbf "Element Should Be Focused"
+Element Should Be Focused ${${1:locator}}
+endsnippet
+
+snippet esbv "Element Should Be Visible"
+Element Should Be Visible ${${1:locator}} ${2:${optional message}}
+endsnippet
+
+snippet esc "Element Should Contain"
+Element Should Contain ${${1:locator}} ${2:${expected}} ${3:${optional message}}
+endsnippet
+
+snippet esnbv "Element Should Not Be Visible"
+Element Should Not Be Visible ${${1:locator}} ${2:${optional message}}
+endsnippet
+
+snippet esnc "Element Should Not Contain"
+Element Should Not Contain ${${1:locator}} ${2:${expected}} ${3:${optional message}}
+endsnippet
+
+snippet etsb "Element Text Should Be"
+Element Text Should Be ${${1:locator}} ${2:${expected}} ${3:${optional message}}
+endsnippet
+
+snippet eaj "Execute Async Javascript"
+Execute Async Javascript ${1:${code line 1}} ${2:${code line 2}}
+endsnippet
+
+snippet ej "Execute Javascript"
+Execute Javascript ${1:${code line 1}} ${2:${code line 2}}
+endsnippet
+
+snippet gwp "Get Window Position"
+\${${1:x}} \${${2:y}}= Get Window Position
+endsnippet
+
+snippet gws "Get Window Size"
+\${${1:width}} \${${2:height}}= Get Window Size
+endsnippet
+
+snippet mbw "Maximize Browser Window"
+Maximize Browser Window
+endsnippet
+
+snippet md "Mouse Down"
+Mouse Down ${${1:locator}}
+endsnippet
+
+snippet mdoi "Mouse Down On Image"
+Mouse Down On Image ${1:${locator}}
+endsnippet
+
+snippet mdol "Mouse Down On Link"
+Mouse Down On Link ${1:${locator}}
+endsnippet
+
+snippet mout "Mouse Out"
+Mouse Out ${1:${locator}}
+endsnippet
+
+snippet mover "Mouse Over"
+Mouse Over ${1:${locator}}
+endsnippet
+
+snippet mu "Mouse Up"
+Mouse Up ${1:${locator}}
+endsnippet
+
+snippet ob "Open Browser"
+Open Browser ${1:${url}} ${2:${browser=firefox}} ${3:${alias=None}} ${4:${remote_url=False}} ${5:${desired_capabilities=None}} ${6:${ff_profile_dir=None}}
+endsnippet
+
+snippet ocm "Open Context Menu"
+Open Context Menu ${1:${locator}}
+endsnippet
+
+snippet psc "Page Should Contain"
+Page Should Contain ${1:${text}} ${2:loglevel=INFO}
+endsnippet
+
+snippet pscb "Page Should Contain Button"
+Page Should Contain Button ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet pscc "Page Should Contain Checkbox"
+Page Should Contain Checkbox ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psce "Page Should Contain Element"
+Page Should Contain Element ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psci "Page Should Contain Image"
+Page Should Contain Image ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet pscl "Page Should Contain Link"
+Page Should Contain Link ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet pscrb "Page Should Contain Radio Button"
+Page Should Contain Radio Button ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psct "Page Should Contain Textfield"
+Page Should Contain Textfield ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psnc "Page Should Not Contain"
+Page Should Not Contain ${1:${text}} ${2:loglevel=INFO}
+endsnippet
+
+snippet psncb "Page Should Not Contain Button"
+Page Should Not Contain Button ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psncc "Page Should Not Contain Checkbox"
+Page Should Not Contain Checkbox ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psnce "Page Should Not Contain Element"
+Page Should Not Contain Element ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psnci "Page Should Not Contain Image"
+Page Should Not Contain Image ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psncl "Page Should Not Contain Link"
+Page Should Not Contain Link ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psncrb "Page Should Not Contain Radio Button"
+Page Should Not Contain Radio Button ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet psnct "Page Should Not Contain Textfield"
+Page Should Not Contain Textfield ${1:${locator}} ${2:${message=}} ${3:loglevel=INFO}
+endsnippet
+
+snippet rktrof "Register Keyword To Run On Failure"
+Register Keyword To Run On Failure ${1:${kw}}
+endsnippet
+
+snippet wuec "Wait Until Element Contains"
+Wait Until Element Contains ${1:${locator}} ${2:${text}} ${3:${timeout=None}} ${4:${error=None}}
+endsnippet
+
+snippet wuednc "Wait Until Element Does Not Contain"
+Wait Until Element Does Not Contain ${1:${locator}} ${2:${text}} ${3:${timeout=None}} ${4:${error=None}}
+endsnippet
+
+snippet wueie "Wait Until Element Is Enabled"
+Wait Until Element Is Enabled ${1:${locator}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
+snippet wueinv "Wait Until Element Is Not Visible"
+Wait Until Element Is Not Visible ${1:${locator}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
+snippet wueiv "Wait Until Element Is Visible"
+Wait Until Element Is Visible ${1:${locator}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
+snippet wupc "Wait Until Page Contains"
+Wait Until Page Contains ${1:${text}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
+snippet wupce "Wait Until Page Contains Element"
+Wait Until Page Contains Element ${1:${locator}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
+snippet wupdnc "Wait Until Page Does Not Contain"
+Wait Until Page Does Not Contain ${1:${text}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
+snippet wupdnce "Wait Until Page Does Not Contain Element"
+Wait Until Page Does Not Contain Element ${1:${locator}} ${2:${timeout=None}} ${3:${error=None}}
+endsnippet
+
diff --git a/sources_non_forked/vim-snippets/snippets/javascript-openui5.snippets b/sources_non_forked/vim-snippets/snippets/javascript-openui5.snippets
new file mode 100644
index 00000000..86122c70
--- /dev/null
+++ b/sources_non_forked/vim-snippets/snippets/javascript-openui5.snippets
@@ -0,0 +1,205 @@
+snippet sapmlabel
+ var $1 = new sap.m.Label({
+ design : $2,
+ text : $3,
+ visible : $4,
+ textAlign : $5,
+ textDirection : $6,
+ width : $7,
+ required : $7
+ });
+
+snippet sapmtext
+ var $1 = new sap.m.Text({
+ text :$2,
+ textDirection :$3,
+ visible :$4,
+ wrapping : $5,
+ textAlign : $6,
+ width :$7,
+ maxLines :$8
+ });
+
+snippet sapmbutton
+ var $1 = new sap.m.Button({
+ text : $2,
+ type : $3,
+ width : $4,
+ enabled :$5,
+ visible :$6,
+ icon : $7,
+ iconFirst : $8,
+ activeIcon :$9,
+ iconDensityAware : $10,
+ });
+snippet sapmflexbox
+ var $1 = new sap.m.FlexBox({
+ visible : $2,
+ height : $3,
+ width : $4,
+ displayInline :$5,
+ direction :$6,
+ fitContainer : $7,
+ renderType : $8,
+ justifyContent :$9,
+ alignItems : $10,
+ items:[]
+ });
+snippet sapmhbox
+ var $1 = new sap.m.HBox({
+ visible : $2,
+ height : $3,
+ width : $4,
+ displayInline :$5,
+ direction :$6,
+ fitContainer : $7,
+ renderType : $8,
+ justifyContent :$9,
+ alignItems : $10,
+ items:[]
+ });
+
+snippet sapmvbox
+ var $1 = new sap.m.VBox({
+ visible : $2,
+ height : $3,
+ width : $4,
+ displayInline :$5,
+ direction :$6,
+ fitContainer : $7,
+ renderType : $8,
+ justifyContent :$9,
+ alignItems : $10,
+ items:[]
+ });
+
+snippet sapcomponent
+ sap.ui.controller("$1", {
+ onInit: function(){
+ },
+ onAfterRendering: function() {
+ },
+ onAfterRendering: function() {
+ },
+ onExit: function() {
+ },
+ });
+
+snippet sapminput
+ var $1 = new sap.m.Input({
+ value :$2,
+ width : $3,
+ enabled :$4,
+ visible :$5,
+ valueState :$6,
+ name : $7,
+ placeholder : $8,
+ editable : $9,
+ type : $10,
+ maxLength :$11,
+ valueStateText :$12,
+ showValueStateMessage :$13,
+ dateFormat :$14,
+ showValueHelp :$15,
+ showSuggestion :$16,
+ valueHelpOnly :$17,
+ filterSuggests :$18,
+ maxSuggestionWidth :$19,
+ startSuggestion : $20,
+ showTableSuggestionValueHelp : $21,
+ description : $22,
+ fieldWidth : $23,
+ valueLiveUpdate :$24,
+ suggestionItems :[$25],
+ suggestionColumns : [$26],
+ suggestionRows : [$27],
+ liveChange : $28,
+ valueHelpRequest :$29,
+ suggest : $30,
+ suggestionItemSelected : $31
+ });
+snippet _sthis
+ var _self = this;
+
+snippet sapmresponsivepopup
+ var $1 = new sap.m.ResponsivePopover({
+ placement :$2 ,//sap.m.PlacementType (default: sap.m.PlacementType.Right)
+ showHeader :$3 ,//boolean (default: true)
+ title : $4,//string
+ icon :$5 ,//sap.ui.core.URI
+ modal :$6 ,// boolean
+ offsetX :$7, //int
+ offsetY :$8, //int
+ contentWidth : $9,//sap.ui.core.CSSSize
+ contentHeight :$10, //sap.ui.core.CSSSize
+ horizontalScrolling :$11, //boolean
+ verticalScrolling :$12, //boolean
+ showCloseButton :$13, //boolean (default: true)
+ //Aggregations
+ content :$14, //sap.ui.core.Control[]
+ customHeader :$15, //sap.m.IBar
+ subHeader : $16, //sap.m.IBar
+ beginButton :$17, //sap.m.Button
+ endButton : $18, //sap.m.Button
+ //Associations
+ initialFocus : $19, //string | sap.ui.core.Control
+ //Events
+ beforeOpen :$20, //fnListenerFunction or [fnListenerFunction, oListenerObject] or [oData, fnListenerFunction, oListenerObject]
+ afterOpen : $21, //fnListenerFunction or [fnListenerFunction, oListenerObject] or [oData, fnListenerFunction, oListenerObject]
+ beforeClose : $22, //fnListenerFunction or [fnListenerFunction, oListenerObject] or [oData, fnListenerFunction, oListenerObject]
+ afterClose : $23 //fnList
+ });
+
+snippet sapicon
+ var $1 = new sap.ui.core.Icon({
+ src :$2 , //sap.ui.core.URI
+ size :$3 , //sap.ui.core.CSSSize
+ color :$4 , //sap.ui.core.CSSColor
+ hoverColor : $5 , // sap.ui.core.CSSColor
+ activeColor :$6 , //sap.ui.core.CSSColor
+ width :$7 , //sap.ui.core.CSSSize
+ height : $8 ,//sap.ui.core.CSSSize
+ backgroundColor :$8 , //sap.ui.core.CSSColor
+ hoverBackgroundColor :$9 , //sap.ui.core.CSSColor
+ activeBackgroundColor :$10 , //sap.ui.core.CSSColor
+ visible :$11 , //boolean (default: true)
+ decorative : $12 ,//boolean (default: true)
+ });
+snippet extendVerticalL
+ sap.ui.layout.VerticalLayout.extend("$1", {
+ metadata: {
+ properties: {
+ $2
+ },
+ aggregations: {
+ $3
+ },
+ events: {
+ $4
+ }
+ },
+ init: function(){
+ $5
+ },
+
+ renderer: "$6"
+ });
+snippet extendHorizontalL
+ sap.ui.layout.HorizontalLayout.extend("$1", {
+ metadata: {
+ properties: {
+ $2
+ },
+ aggregations: {
+ $3
+ },
+ events: {
+ $4
+ }
+ },
+ init: function(){
+ $5
+ },
+
+ renderer: "$6"
+ });
diff --git a/sources_non_forked/vim-snippets/snippets/reason.snippets b/sources_non_forked/vim-snippets/snippets/reason.snippets
new file mode 100644
index 00000000..f171ffee
--- /dev/null
+++ b/sources_non_forked/vim-snippets/snippets/reason.snippets
@@ -0,0 +1,38 @@
+snippet doc
+ /*
+ ${0}
+ */
+snippet let
+ let ${1} = ${0};
+snippet fn
+ let ${1} => {
+ ${0}
+ };
+snippet fn0
+ let ${1} () => {
+ ${0}
+ };
+snippet fun
+ fun ${1} => ${0}
+snippet ty
+ type ${1} = ${1};
+snippet mod
+ module ${1} = {
+ ${0}
+ };
+snippet modty
+ module type ${1} = {
+ ${0}
+ };
+snippet sw
+ switch ${1} {
+ | ${2} => ${0}
+ }
+snippet |
+ | ${1} => ${0}
+snippet if
+ if (${1}) {
+ ${2}
+ } else {
+ ${0}
+ }