diff --git a/runtime/syntax/xpm.vim b/runtime/syntax/xpm.vim
index be9f387..efacdb9 100644
--- a/runtime/syntax/xpm.vim
+++ b/runtime/syntax/xpm.vim
@@ -1,10 +1,12 @@
 " Vim syntax file
 " Language:	X Pixmap
 " Maintainer:	Ronald Schild <rs@scutum.de>
-" Last Change:	2021 Oct 04
-" Version:	5.4n.1
+" Last Change:	2023 May 11
+" Version:	5.4n.2
 "               Jemma Nelson added termguicolors support
 "               Dominique Pellé fixed spelling support
+"               Christian J. Robinson fixed use of global variables, moved
+"               loop into a compiled function
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -21,108 +23,119 @@
 
 if has("gui_running") || has("termguicolors") && &termguicolors
 
-let color  = ""
-let chars  = ""
-let colors = 0
-let cpp    = 0
-let n      = 0
-let i      = 1
+def s:CreateSyntax(): void
+   var color  = ""
+   var chars  = ""
+   var colors = 0
+   var cpp    = 0
+   var n      = 0
+   var lines  = getline(1, '$')
 
-while i <= line("$")		" scanning all lines
+   for line in lines			# scanning all lines
 
-   let s = matchstr(getline(i), '".\{-1,}"')
-   if s != ""			" does line contain a string?
+      var s = matchstr(line, '".\{-1,}"')
 
-      if n == 0			" first string is the Values string
+      if s != ""			# does line contain a string?
 
-	 " get the 3rd value: colors = number of colors
-	 let colors = substitute(s, '"\s*\d\+\s\+\d\+\s\+\(\d\+\).*"', '\1', '')
-	 " get the 4th value: cpp = number of character per pixel
-	 let cpp = substitute(s, '"\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\d\+\).*"', '\1', '')
-	 if cpp =~ '[^0-9]'
-	    break  " if cpp is not made of digits there must be something wrong
-	 endif
+	 if n == 0			# first string is the Values string
 
-	 " Highlight the Values string as normal string (no pixel string).
-	 " Only when there is no slash, it would terminate the pattern.
-	 if s !~ '/'
-	    exe 'syn match xpmValues /' . s . '/'
-	 endif
-	 hi link xpmValues String
+	    var values = split(s[1 : -2])
 
-	 let n = 1		" n = color index
+	    # Values string invalid, bail out
+	    if len(values) != 4
+	       return
+	    endif
 
-      elseif n <= colors	" string is a color specification
+	    # get the 3rd value: colors = number of colors
+	    colors = str2nr(values[2])
+	    # get the 4th value: cpp = number of character per pixel
+	    cpp = str2nr(values[3])
 
-	 " get chars = <cpp> length string representing the pixels
-	 " (first incl. the following whitespace)
-	 let chars = substitute(s, '"\(.\{'.cpp.'}\s\).*"', '\1', '')
+	    # these values must be positive, nonzero
+	    if colors < 1 || cpp < 1
+	       return
+	    endif
 
-	 " now get color, first try 'c' key if any (color visual)
-	 let color = substitute(s, '".*\sc\s\+\(.\{-}\)\s*\(\(g4\=\|[ms]\)\s.*\)*\s*"', '\1', '')
-	 if color == s
-	    " no 'c' key, try 'g' key (grayscale with more than 4 levels)
-	    let color = substitute(s, '".*\sg\s\+\(.\{-}\)\s*\(\(g4\|[ms]\)\s.*\)*\s*"', '\1', '')
+	    # Highlight the Values string as normal string (no pixel string).
+	    # Only when there is no slash, it would terminate the pattern.
+	    if s !~ '/'
+	       exe 'syn match xpmValues /' .. s .. '/'
+	    endif
+	    hi link xpmValues String
+
+	    n = 1		# n = color index
+
+	 elseif n <= colors	# string is a color specification
+
+	    # get chars = <cpp> length string representing the pixels
+	    # (first incl. the following whitespace)
+	    chars = substitute(s, '"\(.\{' .. cpp .. '}\s\).*"', '\1', '')
+
+	    # now get color, first try 'c' key if any (color visual)
+	    color = substitute(s, '".*\sc\s\+\(.\{-}\)\s*\(\(g4\=\|[ms]\)\s.*\)*\s*"', '\1', '')
 	    if color == s
-	       " next try: 'g4' key (4-level grayscale)
-	       let color = substitute(s, '".*\sg4\s\+\(.\{-}\)\s*\([ms]\s.*\)*\s*"', '\1', '')
+	       # no 'c' key, try 'g' key (grayscale with more than 4 levels)
+	       color = substitute(s, '".*\sg\s\+\(.\{-}\)\s*\(\(g4\|[ms]\)\s.*\)*\s*"', '\1', '')
 	       if color == s
-		  " finally try 'm' key (mono visual)
-		  let color = substitute(s, '".*\sm\s\+\(.\{-}\)\s*\(s\s.*\)*\s*"', '\1', '')
+		  # next try: 'g4' key (4-level grayscale)
+		  color = substitute(s, '".*\sg4\s\+\(.\{-}\)\s*\([ms]\s.*\)*\s*"', '\1', '')
 		  if color == s
-		     let color = ""
+		     # finally try 'm' key (mono visual)
+		     color = substitute(s, '".*\sm\s\+\(.\{-}\)\s*\(s\s.*\)*\s*"', '\1', '')
+		     if color == s
+			color = ""
+		     endif
 		  endif
 	       endif
 	    endif
+
+	    # Vim cannot handle RGB codes with more than 6 hex digits
+	    if color =~ '#\x\{10,}$'
+	       color = substitute(color, '\(\x\x\)\x\x', '\1', 'g')
+	    elseif color =~ '#\x\{7,}$'
+	       color = substitute(color, '\(\x\x\)\x', '\1', 'g')
+	    # nor with 3 digits
+	    elseif color =~ '#\x\{3}$'
+	       color = substitute(color, '\(\x\)\(\x\)\(\x\)', '0\10\20\3', '')
+	    endif
+
+	    # escape meta characters in patterns
+	    s = escape(s, '/\*^$.~[] ')
+	    chars = escape(chars, '/\*^$.~[] ')
+
+	    # now create syntax items
+	    # highlight the color string as normal string (no pixel string)
+	    exe 'syn match xpmCol' .. n .. 'Def /' .. s .. '/ contains=xpmCol' .. n .. 'inDef'
+	    exe 'hi link xpmCol' .. n .. 'Def String'
+
+	    # but highlight the first whitespace after chars in its color
+	    exe 'syn match xpmCol' .. n .. 'inDef /"' .. chars .. '/hs=s+' .. (cpp + 1) .. ' contained'
+	    exe 'hi link xpmCol' .. n .. 'inDef xpmColor' .. n
+
+	    # remove the following whitespace from chars
+	    chars = substitute(chars, '.$', '', '')
+
+	    # and create the syntax item contained in the pixel strings
+	    exe 'syn match xpmColor' .. n .. ' /' .. chars .. '/ contained'
+	    exe 'syn cluster xpmColors add=xpmColor' .. n
+
+	    # if no color or color = "None" show background
+	    if color == ""  ||  substitute(color, '.*', '\L&', '') == 'none'
+	       exe 'hi xpmColor' .. n .. ' guifg=bg'
+	       exe 'hi xpmColor' .. n .. ' guibg=NONE'
+	    elseif color !~ "'"
+	       exe 'hi xpmColor' .. n .. " guifg='" .. color .. "'"
+	       exe 'hi xpmColor' .. n .. " guibg='" .. color .. "'"
+	    endif
+	    n += 1
+	 else
+	    break		# no more color string
 	 endif
-
-	 " Vim cannot handle RGB codes with more than 6 hex digits
-	 if color =~ '#\x\{10,}$'
-	    let color = substitute(color, '\(\x\x\)\x\x', '\1', 'g')
-	 elseif color =~ '#\x\{7,}$'
-	    let color = substitute(color, '\(\x\x\)\x', '\1', 'g')
-	 " nor with 3 digits
-	 elseif color =~ '#\x\{3}$'
-	    let color = substitute(color, '\(\x\)\(\x\)\(\x\)', '0\10\20\3', '')
-	 endif
-
-	 " escape meta characters in patterns
-	 let s = escape(s, '/\*^$.~[]')
-	 let chars = escape(chars, '/\*^$.~[]')
-
-	 " now create syntax items
-	 " highlight the color string as normal string (no pixel string)
-	 exe 'syn match xpmCol'.n.'Def /'.s.'/ contains=xpmCol'.n.'inDef'
-	 exe 'hi link xpmCol'.n.'Def String'
-
-	 " but highlight the first whitespace after chars in its color
-	 exe 'syn match xpmCol'.n.'inDef /"'.chars.'/hs=s+'.(cpp+1).' contained'
-	 exe 'hi link xpmCol'.n.'inDef xpmColor'.n
-
-	 " remove the following whitespace from chars
-	 let chars = substitute(chars, '.$', '', '')
-
-	 " and create the syntax item contained in the pixel strings
-	 exe 'syn match xpmColor'.n.' /'.chars.'/ contained'
-	 exe 'syn cluster xpmColors add=xpmColor'.n
-
-	 " if no color or color = "None" show background
-	 if color == ""  ||  substitute(color, '.*', '\L&', '') == 'none'
-	    exe 'hi xpmColor'.n.' guifg=bg'
-	    exe 'hi xpmColor'.n.' guibg=NONE'
-	 elseif color !~ "'"
-	    exe 'hi xpmColor'.n." guifg='".color."'"
-	    exe 'hi xpmColor'.n." guibg='".color."'"
-	 endif
-	 let n = n + 1
-      else
-	 break		" no more color string
       endif
-   endif
-   let i = i + 1
-endwhile
+   endfor
+enddef
 
-unlet color chars colors cpp n i s
+call s:CreateSyntax()
 
 endif          " has("gui_running") || has("termguicolors") && &termguicolors
 
