Update runtime files
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 6da5046..6057b57 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2020 Jun 14
+*eval.txt*	For Vim version 8.2.  Last change: 2020 Jun 17
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -3667,7 +3667,7 @@
 		   "function"	     User defined completion |i_CTRL-X_CTRL-U|
 		   "omni"	     Omni completion |i_CTRL-X_CTRL-O|
 		   "spell"	     Spelling suggestions |i_CTRL-X_s|
-		   "eval"            |complete()| completion
+		   "eval"	     |complete()| completion
 		   "unknown"	     Other internal modes
 
 		If the optional {what} list argument is supplied, then only
@@ -4536,7 +4536,7 @@
 		a very large number.
 		The {list} is changed in place, make a copy first if you do
 		not want that.
-							        *E900*
+								*E900*
 		{maxdepth} means how deep in nested lists changes are made.
 		{list} is not modified when {maxdepth} is 0.
 		{maxdepth} must be positive number.
@@ -5163,7 +5163,7 @@
 		highlight	highlight groups
 		history		:history suboptions
 		locale		locale names (as output of locale -a)
-		mapclear        buffer argument
+		mapclear	buffer argument
 		mapping		mapping name
 		menu		menus
 		messages	|:messages| suboptions
@@ -5189,7 +5189,7 @@
 		If {type} is "cmdline", then the |cmdline-completion| result is
 		returned.  For example, to complete the possible values after
 		a ":call" command: >
-                	echo getcompletion('call ', 'cmdline')
+			echo getcompletion('call ', 'cmdline')
 <
 		If there are no matches, an empty list is returned.  An
 		invalid value for {type} produces an error.
@@ -5770,8 +5770,8 @@
 		Returns information about windows as a List with Dictionaries.
 
 		If {winid} is given Information about the window with that ID
-		is returned.  If the window does not exist the result is an
-		empty list.
+		is returned, as a List with one item.  If the window does not
+		exist the result is an empty list.
 
 		Without {winid} information about all the windows in all the
 		tab pages is returned.
@@ -8606,14 +8606,14 @@
 			    if result.total > result.maxcount &&
 			    \  result.current > result.maxcount
 			      return printf(' /%s [>%d/>%d]', @/,
-			      \             result.current, result.total)
+			      \		    result.current, result.total)
 			    elseif result.total > result.maxcount
 			      return printf(' /%s [%d/>%d]', @/,
-			      \             result.current, result.total)
+			      \		    result.current, result.total)
 			    endif
 			  endif
 			  return printf(' /%s [%d/%d]', @/,
-			  \             result.current, result.total)
+			  \		result.current, result.total)
 			endfunction
 			let &statusline .= '%{LastSearchCount()}'
 
@@ -9386,7 +9386,9 @@
 		Unix) are not resolved.  If the first path component in
 		{filename} designates the current directory, this will be
 		valid for the result as well.  A trailing path separator is
-		not removed either.
+		not removed either. On Unix "//path" is unchanged, but
+		"///path" is simplified to "/path" (this follows the Posix
+		standard).
 		Example: >
 			simplify("./dir/.././/file/") == "./file/"
 <		Note: The combination "dir/.." is only removed if "dir" is
@@ -9696,7 +9698,7 @@
 		    m	halfway a mapping, :normal command, feedkeys() or
 			stuffed command
 		    o	operator pending or waiting for a command argument,
-		        e.g. after |f|
+			e.g. after |f|
 		    a	Insert mode autocomplete active
 		    x	executing an autocommand
 		    w	blocked on waiting, e.g. ch_evalexpr(), ch_read() and
@@ -10450,9 +10452,9 @@
 		If the |+termresponse| feature is missing then the result is
 		an empty dictionary.
 
-		If "cursor_style" is 'y' then |t_RS| will be send to request the
+		If "cursor_style" is 'y' then |t_RS| will be sent to request the
 		current cursor style.
-		If "cursor_blink_mode" is 'y' then |t_RC| will be send to
+		If "cursor_blink_mode" is 'y' then |t_RC| will be sent to
 		request the cursor blink status.
 		"cursor_style" and "cursor_blink_mode" are also set if |t_u7|
 		is not empty, Vim will detect the working of sending |t_RS|
@@ -10916,7 +10918,7 @@
 			GetWinid()->win_screenpos()
 <
 win_splitmove({nr}, {target} [, {options}])		*win_splitmove()*
-	        Move the window {nr} to a new split of the window {target}.
+		Move the window {nr} to a new split of the window {target}.
 		This is similar to moving to {target}, creating a new window
 		using |:split| but having the same contents as window {nr}, and
 		then closing {nr}.
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
index b453a39..2871e5e 100644
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,4 +1,4 @@
-*mlang.txt*     For Vim version 8.2.  Last change: 2019 May 05
+*mlang.txt*     For Vim version 8.2.  Last change: 2020 Jun 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 2ce3487..bdd63b2 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3897,6 +3897,7 @@
 E107	eval.txt	/*E107*
 E108	eval.txt	/*E108*
 E109	eval.txt	/*E109*
+E1094	vim9.txt	/*E1094*
 E11	cmdline.txt	/*E11*
 E110	eval.txt	/*E110*
 E111	eval.txt	/*E111*
@@ -5798,6 +5799,7 @@
 col()	eval.txt	/*col()*
 coldfusion.vim	syntax.txt	/*coldfusion.vim*
 collapse	tips.txt	/*collapse*
+collate-variable	eval.txt	/*collate-variable*
 color-xterm	syntax.txt	/*color-xterm*
 coloring	syntax.txt	/*coloring*
 colortest.vim	syntax.txt	/*colortest.vim*
@@ -9723,6 +9725,7 @@
 v:charconvert_to	eval.txt	/*v:charconvert_to*
 v:cmdarg	eval.txt	/*v:cmdarg*
 v:cmdbang	eval.txt	/*v:cmdbang*
+v:collate	eval.txt	/*v:collate*
 v:completed_item	eval.txt	/*v:completed_item*
 v:count	eval.txt	/*v:count*
 v:count1	eval.txt	/*v:count1*
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index 64b8697..7ac2389 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -1,4 +1,4 @@
-*testing.txt*	For Vim version 8.2.  Last change: 2020 Jun 13
+*testing.txt*	For Vim version 8.2.  Last change: 2020 Jun 15
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index faf8680..c9716be 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2020 Jun 14
+*todo.txt*      For Vim version 8.2.  Last change: 2020 Jun 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -40,16 +40,16 @@
 
 Include src/po/vim.pot ?
 
+See if resizing a terminal can be fixed.
+
 Vim9 script:
 Making everything work:
-- assignment to script var should check type
-- Compile: let [var, var] = expr
-  share code for :let between compiled and uncompiled?
-- do not allow "let g:var = value", must drop "let"
+- Error for "g:var: string = 'value'" 
+- Make func()->append('$') work - value is last argument, not first. #6305
 - possible memory leak in test_vim9_func through compile_nested_function.
 - memory leaks in test_vim9_expr
 - memory leaks in test_vim9_script
-- Test that a script-local function in Vim9 script cannot be deleted.
+- more return types depending on the first argument, like sort().
 - Check that when sourcing a Vim9 script, only the global items can be used.
 - Make "true" and "false" work in vim9script
 - Test that a function defined inside a :def function is local to that
@@ -240,10 +240,12 @@
   conversions.
 
 Error numbers available:
-E489, E610, E611, E653, E856, E857, E861
+E489, E610, E611, E653, E856
 
 Remove SPACE_IN_FILENAME ? It is only used for completion.
 
+Patch to use collaction based sorting. (Christian Brabandt, #6229)
+
 Can we detect true color support?  https://gist.github.com/XVilka/8346728
 Try setting a color then request the current color, like using t_u7.
 
@@ -272,6 +274,8 @@
 How about removing Atari MiNT support?
     src/Make_mint.mak, src/os_mint.h, matches with __MINT__
 
+Patch to make :q work with local arglist. (Christian Brabandt, #6286)
+
 Patch to fix drawing error with DirectX. (James Grant, #5688)
 Causes flicker on resizing. Workaround from Ken Takata.
 How about only setting the attribute when part of the Vim window is offscreen?
@@ -285,6 +289,8 @@
 Running test_gui and test_gui_init with Motif sometimes kills the window
 manager.  Problem with Motif?
 
+Patch to add :argdedupe. (Nir Lichtman, #6235)
+
 :map output does not clear the reset of the command line.
 (#5623, also see #5962)
 
@@ -1402,9 +1408,6 @@
 MS-Windows: use WS_HIDE instead of SW_SHOWMINNOACTIVE in os_win32.c?
 Otherwise task flickers in taskbar.
 
-Should make ":@r" handle line continuation. (Cesar Romani, 2016 Jun 26)
-Also for ":@.".
-
 Repeating 'opfunc' in a function only works once. (Tarmean, 2016 Jul 15, #925)
 
 Have a way to get the call stack, in a function and from an exception.
diff --git a/runtime/doc/usr_11.txt b/runtime/doc/usr_11.txt
index 3aca185..f8d0f15 100644
--- a/runtime/doc/usr_11.txt
+++ b/runtime/doc/usr_11.txt
@@ -211,7 +211,7 @@
 - The flag that the file was modified is not set.
 - The process is not running.
 
-You can programatically deal with this situation with the |FileChangedShell|
+You can programmatically deal with this situation with the |FileChangedShell|
 autocommand event.
 
 
diff --git a/runtime/doc/usr_46.txt b/runtime/doc/usr_46.txt
index b588223..b05a660 100644
--- a/runtime/doc/usr_46.txt
+++ b/runtime/doc/usr_46.txt
@@ -112,7 +112,7 @@
 
 Legacy Vim script does have type checking, but this happens at runtime, when
 the code is executed.  And it's permissive, often a computation gives an
-unexpected value instead of reporting an error .  Thus you can define a
+unexpected value instead of reporting an error.  Thus you can define a
 function and think it's fine, but see a problem only later when it is called: >
 	let s:collected = ''
 	func ExtendAndReturn(add)
@@ -142,7 +142,7 @@
 
 Vim9 script is strict, it uses the "+" operator only for numbers and floats.
 For string concatenation ".." must be used.  This avoids mistakes and avoids
-the automatic conversion that gave a suprising result above.  So you change
+the automatic conversion that gave a surprising result above.  So you change
 the first line of the function to: >
 	   s:collected ..= add
 And now it works.
diff --git a/runtime/doc/usr_toc.txt b/runtime/doc/usr_toc.txt
index d5d7615..b17a87d 100644
--- a/runtime/doc/usr_toc.txt
+++ b/runtime/doc/usr_toc.txt
@@ -1,4 +1,4 @@
-*usr_toc.txt*	For Vim version 8.2.  Last change: 2020 Jun 11
+*usr_toc.txt*	For Vim version 8.2.  Last change: 2020 Jun 15
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -340,6 +340,12 @@
 		|45.4|	Editing files with a different encoding
 		|45.5|	Entering language text
 
+|usr_46.txt|  Write plugins using Vim9 script
+		|46.1|	Introduction
+		|46.2|	Variable declarations
+		|46.3|	Functions and types
+		|46.?|	Using a Vim9 script from legacy script
+
 ==============================================================================
 Making Vim Run ~
 
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index 1f3f120..9a40959 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt*	For Vim version 8.2.  Last change: 2020 Jun 14
+*vim9.txt*	For Vim version 8.2.  Last change: 2020 Jun 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,7 +30,7 @@
 
 Vim script has been growing over time, while preserving backwards
 compatibility.  That means bad choices from the past often can't be changed
-and compability with Vi restricts possible solutions.  Execution is quite
+and compatibility with Vi restricts possible solutions.  Execution is quite
 slow, each line is parsed every time it is executed.
 
 The main goal of Vim9 script is to drastically improve performance.  This is
@@ -68,7 +68,7 @@
 start of a string, thus in many places it cannot be used.  In Vim9 script a
 comment can also start with #.  In Vi this is a command to list text with
 numbers, but you can also use `:number` for that. >
-	let count = 0  # number of occurences
+	let count = 0  # number of occurrences
 
 To improve readability there must be a space between the command and the #
 that starts a comment.  Note that #{ is the start of a dictionary, therefore
@@ -269,6 +269,13 @@
 			PosFunc(arg) :
 			NegFunc(arg)
 
+A special case is "->" for function call chains, it can appear in the next
+line: >
+	let result = GetBuilder()
+			->BuilderSetWidth(333)
+			->BuilderSetHeight(777)
+			->BuilderBuild()
+
 Note that "enddef" cannot be used at the start of a continuation line, it ends
 the current function.
 
@@ -566,7 +573,7 @@
 
 
 Import ~
-							*:import* *:imp*
+						*:import* *:imp* *E1094*
 The exported items can be imported individually in another Vim9 script: >
 	import EXPORTED_CONST from "thatscript.vim"
 	import MyClass from "myclass.vim"
@@ -692,7 +699,7 @@
 to reorder the functions to avoid forward references.
 
 An alternative would be to first scan through the file to locate items and
-figure out their type, so that forward refeferences are found, and only then
+figure out their type, so that forward references are found, and only then
 execute the script and compile the functions.  This means the script has to be
 parsed twice, which is slower, and some conditions at the script level, such
 as checking if a feature is supported, are hard to use.  An attempt was made
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index b94951c..c0bdef7 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2020 Jun 07
+" Last Change:	2020 Jun 15
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -237,7 +237,7 @@
 au BufNewFile,BufRead *bsd,*.bsdl		setf bsdl
 
 " Bazel (http://bazel.io)
-autocmd BufRead,BufNewFile *.bzl,WORKSPACE,BUILD.bazel 	setf bzl
+autocmd BufRead,BufNewFile *.bzl,WORKSPACE,BUILD.bazel	setf bzl
 if has("fname_case")
   " There is another check for BUILD further below.
   autocmd BufRead,BufNewFile BUILD		setf bzl
@@ -625,8 +625,8 @@
 au BufNewFile,BufRead *.ged,lltxxxxx.txt	setf gedcom
 
 " Git
-au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG 	setf gitcommit
-au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig 	setf gitconfig
+au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG	setf gitcommit
+au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig	setf gitconfig
 au BufNewFile,BufRead */.config/git/config			setf gitconfig
 au BufNewFile,BufRead .gitmodules,*.git/modules/*/config	setf gitconfig
 if !empty($XDG_CONFIG_HOME)
@@ -770,11 +770,11 @@
 au BufNewFile,BufRead */etc/initng/*/*.i,*.ii	setf initng
 
 " Innovation Data Processing
-au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c 	setf upstreamdat
-au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c 	setf upstreamlog
+au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c	setf upstreamdat
+au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c	setf upstreamlog
 au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog
-au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c 	setf usserverlog
-au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c 	setf usw2kagtlog
+au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c	setf usserverlog
+au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c	setf usw2kagtlog
 
 " Ipfilter
 au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules	setf ipfilter
@@ -1073,7 +1073,7 @@
 au BufRead,BufNewfile *.n1ql,*.nql		setf n1ql
 
 " Nano
-au BufNewFile,BufRead */etc/nanorc,*.nanorc  	setf nanorc
+au BufNewFile,BufRead */etc/nanorc,*.nanorc	setf nanorc
 
 " Nastran input/DMAP
 "au BufNewFile,BufRead *.dat			setf nastran
@@ -1156,7 +1156,7 @@
 au BufNewFile,BufRead *.pdf			setf pdf
 
 " PCMK - HAE - crm configure edit
-au BufNewFile,BufRead *.pcmk 			setf pcmk
+au BufNewFile,BufRead *.pcmk			setf pcmk
 
 " Perl
 if has("fname_case")
@@ -1646,10 +1646,10 @@
 
 " Swift
 au BufNewFile,BufRead *.swift			setf swift
-au BufNewFile,BufRead *.swift.gyb 		setf swiftgyb
+au BufNewFile,BufRead *.swift.gyb		setf swiftgyb
 
 " Swift Intermediate Language
-au BufNewFile,BufRead *.sil 			setf sil
+au BufNewFile,BufRead *.sil			setf sil
 
 " Sysctl
 au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf	setf sysctl
@@ -2066,7 +2066,7 @@
 au BufNewFile,BufRead */tmp/lltmp*		call s:StarSetf('gedcom')
 
 " Git
-au BufNewFile,BufRead */.gitconfig.d/*,/etc/gitconfig.d/* 	call s:StarSetf('gitconfig')
+au BufNewFile,BufRead */.gitconfig.d/*,/etc/gitconfig.d/*	call s:StarSetf('gitconfig')
 
 " Gitolite
 au BufNewFile,BufRead */gitolite-admin/conf/*	call s:StarSetf('gitolite')
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
index 150f54a..d76fb7f 100644
--- a/runtime/ftplugin/vim.vim
+++ b/runtime/ftplugin/vim.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	Vim
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2020 May 17
+" Last Change:	2020 Jun 16
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -83,8 +83,7 @@
 if exists("loaded_matchit")
   let b:match_ignorecase = 0
   let b:match_words =
-	\ '\<fu\%[nction]\>:\<retu\%[rn]\>:\<endf\%[unction]\>,' .
-	\ '\<def\>:\<retu\%[rn]\>:\<enddef\>,' .
+	\ '\<\%(fu\%[nction]\|def\)\>:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
  	\ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' .
 	\ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
 	\ '{:},' .
diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim
index 1d2043a..c99eb28 100644
--- a/runtime/indent/html.vim
+++ b/runtime/indent/html.vim
@@ -2,7 +2,7 @@
 " Header: "{{{
 " Maintainer:	Bram Moolenaar
 " Original Author: Andy Wokula <anwoku@yahoo.de>
-" Last Change:	2019 Mar 20
+" Last Change:	2020 Jun 18
 " Version:	1.0
 " Description:	HTML indent script with cached state for faster indenting on a
 "		range of lines.
@@ -223,7 +223,7 @@
 call s:AddITags(s:indent_tags, [
     \ 'a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
     \ 'blockquote', 'body', 'button', 'caption', 'center', 'cite', 'code',
-    \ 'colgroup', 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font',
+    \ 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', 'font',
     \ 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'html',
     \ 'i', 'iframe', 'ins', 'kbd', 'label', 'legend', 'li',
     \ 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
diff --git a/runtime/indent/testdir/html.in b/runtime/indent/testdir/html.in
index 9c776d6..80ce0cd 100644
--- a/runtime/indent/testdir/html.in
+++ b/runtime/indent/testdir/html.in
@@ -23,4 +23,14 @@
 text
 </div>
 
+<dl>
+<dd>
+dd text
+</dd>
+<dt>
+dt text
+</dt>
+</dl>
+
+
 " END_INDENT
diff --git a/runtime/indent/testdir/html.ok b/runtime/indent/testdir/html.ok
index ad81933..a96141f 100644
--- a/runtime/indent/testdir/html.ok
+++ b/runtime/indent/testdir/html.ok
@@ -23,4 +23,14 @@
     text
 </div>
 
+<dl>
+    <dd>
+	dd text
+    </dd>
+    <dt>
+	dt text
+    </dt>
+</dl>
+
+
 " END_INDENT
diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim
index 59d33f4..162430e 100644
--- a/runtime/plugin/matchparen.vim
+++ b/runtime/plugin/matchparen.vim
@@ -1,6 +1,6 @@
 " Vim plugin for showing matching parens
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2019 Oct 28
+" Last Change: 2020 Jun 18
 
 " Exit quickly when:
 " - this plugin was already loaded (or disabled)
@@ -21,6 +21,7 @@
 augroup matchparen
   " Replace all matchparen autocommands
   autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
+  autocmd! WinLeave * call s:Remove_Matches()
   if exists('##TextChanged')
     autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair()
   endif
@@ -38,10 +39,7 @@
 " for any matching paren.
 func s:Highlight_Matching_Pair()
   " Remove any previous match.
-  if exists('w:paren_hl_on') && w:paren_hl_on
-    silent! call matchdelete(3)
-    let w:paren_hl_on = 0
-  endif
+  call s:Remove_Matches()
 
   " Avoid that we remove the popup menu.
   " Return when there are no colors (looks like the cursor jumps).
@@ -195,6 +193,14 @@
   endif
 endfunction
 
+func s:Remove_Matches()
+  if exists('w:paren_hl_on') && w:paren_hl_on
+    silent! call matchdelete(3)
+    let w:paren_hl_on = 0
+  endif
+endfunc
+
+
 " Define commands that will disable and enable the plugin.
 command DoMatchParen call s:DoMatchParen()
 command NoMatchParen call s:NoMatchParen()