Update runtime files
diff --git a/runtime/syntax/gvpr.vim b/runtime/syntax/gvpr.vim
new file mode 100644
index 0000000..a737891
--- /dev/null
+++ b/runtime/syntax/gvpr.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: Graphviz program
+" Maintainer: Matthew Fernandez <matthew.fernandez@gmail.com>
+" Last Change: Tue, 28 Jul 2020 17:20:44 -0700
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn keyword gvArg  ARGC ARGV
+syn keyword gvBeg  BEGIN BEG_G N E END END_G
+syn keyword gvFunc
+  \ graph fstsubg isDirect isStrict isSubg nEdges nNodes nxtsubg subg
+  \ degreeOf fstnode indegreeOf isNode isSubnode node nxtnode nxtnode_sg
+    \ outDegreeOf subnode
+  \ edge edge_sg fstedge fstedge_sg fstin fstin_sg fstout fstout_sg isEdge
+    \ isEdge_sg isSubedge nxtedge nxtedge_sg nxtin nxtin_sg nxtout nxtout_sg opp
+    \ subedge
+  \ freadG fwriteG readG write[] writeG
+  \ aget aset clone cloneG compOf copy[] copyA delete[] fstAttr getDflt hasAttr
+    \ induce isAttr isIn kindOf lock[] nxtAttr setDflt
+  \ canon gsub html index ishtml length llOf match[] rindex split[] sprintf
+    \ sscanf strcmp sub substr tokens tolower toupper urOf xOf yOf
+  \ closeF openF print[] printf scanf readL
+  \ atan2 cos exp log MAX MIN pow sin[] sqrt
+  \ in[] unset
+  \ colorx exit[] rand srand system
+syn keyword gvCons
+  \ NULL TV_bfs TV_dfs TV_en TV_flat TV_fwd TV_ne TV_prepostdfs TV_prepostfwd
+  \ TV_prepostrev TV_postdfs TV_postfwd tv_postrev TV_rev
+syn keyword gvType char double float int long unsigned void
+                 \ string
+                 \ edge_t graph_t node_t obj_t
+syn match   gvVar 
+  \ "\$\(\(F\|G\|NG\|O\|T\|tgtname\|tvedge\|tvnext\|tvroot\|tvtype\)\>\)\?\(\<\)\@!"
+syn keyword gvWord break continue else for forr if return switch while
+
+" numbers adapted from c.vim's cNumbers and friends
+syn match gvNums      transparent "\<\d\|\.\d" contains=gvNumber,gvFloat,gvOctal
+syn match gvNumber    contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+syn match gvNumber    contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+syn match gvOctal     contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=gvOctalZero
+syn match gvOctalZero contained "\<0"
+syn match gvFloat     contained "\d\+f"
+syn match gvFloat     contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+syn match gvFloat     contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+syn match gvFloat     contained "\d\+e[-+]\=\d\+[fl]\=\>"
+
+syn region gvString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gvFormat,gvSpecial extend
+syn region gvString start="'" skip="\\\\\|\\'" end="'" contains=gvFormat,gvSpecial extend
+
+" adapted from c.vim's cFormat for c_no_c99
+syn match gvFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+
+syn match gvSpecial "\\." contained
+
+syn region gvCComment   start="//"  skip="\\$" end="$" keepend
+syn region gvCPPComment start="#"   skip="\\$" end="$" keepend
+syn region gvCXXComment start="/\*" end="\*/" fold
+
+hi def link gvArg        Identifier
+hi def link gvBeg        Keyword
+hi def link gvFloat      Number
+hi def link gvFunc       Identifier
+hi def link gvCons       Number
+hi def link gvNumber     Number
+hi def link gvType       Type
+hi def link gvVar        Statement
+hi def link gvWord       Keyword
+
+hi def link gvString     String
+hi def link gvFormat     Special
+hi def link gvSpecial    Special
+
+hi def link gvCComment   Comment
+hi def link gvCPPComment Comment
+hi def link gvCXXComment Comment
+
+let b:current_syntax = "gvpr"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save