Updated runtime files.
diff --git a/runtime/syntax/debsources.vim b/runtime/syntax/debsources.vim
index 232e727..2777944 100644
--- a/runtime/syntax/debsources.vim
+++ b/runtime/syntax/debsources.vim
@@ -2,7 +2,7 @@
 " Language:     Debian sources.list
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2016 Aug 30
+" Last Change: 2016 Sep 27
 " URL: https://anonscm.debian.org/cgit/pkg-vim/vim.git/plain/runtime/syntax/debsources.vim
 
 " Standard syntax initialization
@@ -39,7 +39,7 @@
 let &cpo=s:cpo
 
 " Match uri's
-syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' 	<>"]\++
+syn match debsourcesUri            +\(https\?://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' 	<>"]\++
 exe 'syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\('. join(s:supported, '\|'). '\)\([-[:alnum:]_./]*\)+'
 exe 'syn match debsourcesUnsupportedDistrKeyword +\([[:alnum:]_./]*\)\('. join(s:unsupported, '\|') .'\)\([-[:alnum:]_./]*\)+'
 
diff --git a/runtime/syntax/mf.vim b/runtime/syntax/mf.vim
index 5f600e2..3589e4d 100644
--- a/runtime/syntax/mf.vim
+++ b/runtime/syntax/mf.vim
@@ -1,184 +1,295 @@
 " Vim syntax file
-" Language:	Metafont
-" Maintainer:	Andreas Scherer <andreas.scherer@pobox.com>
-" Last Change:	April 25, 2001
+" Language:           METAFONT
+" Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change:        2016 Oct 1
 
-" quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
-" Metafont 'primitives' as defined in chapter 25 of 'The METAFONTbook'
+syn iskeyword @,_
+
+" METAFONT 'primitives' as defined in chapter 25 of 'The METAFONTbook'
 " Page 210: 'boolean expressions'
-syn keyword mfBoolExp true false known unknown odd charexists not and or
+syn keyword mfBoolExp        and charexists false known not odd or true unknown
 
 " Page 210: 'numeric expression'
-syn keyword mfNumExp normaldeviate length ASCII oct hex angle turningnumber
-syn keyword mfNumExp totalweight directiontime xpart ypart xxpart xypart
-syn keyword mfNumExp yxpart yypart sqrt sind cosd mlog mexp floor
-syn keyword mfNumExp uniformdeviate
+syn keyword mfNumExp         ASCII angle cosd directiontime floor hex length
+syn keyword mfNumExp         mexp mlog normaldeviate oct sind sqrt totalweight
+syn keyword mfNumExp         turningnumber uniformdeviate xpart xxpart xypart
+syn keyword mfNumExp         ypart yxpart yypart
 
 " Page 211: 'internal quantities'
-syn keyword mfInternal tracingtitles tracingequations tracingcapsules
-syn keyword mfInternal tracingchoices tracingspecs tracingpens
-syn keyword mfInternal tracingcommands tracingrestores tracingmacros
-syn keyword mfInternal tracingedges tracingoutput tracingonline tracingstats
-syn keyword mfInternal pausing showstopping fontmaking proofing
-syn keyword mfInternal turningcheck warningcheck smoothing autorounding
-syn keyword mfInternal granularity fillin year month day time
-syn keyword mfInternal charcode charext charwd charht chardp charic
-syn keyword mfInternal chardx chardy designsize hppp vppp xoffset yoffset
-syn keyword mfInternal boundarychar
+syn keyword mfInternal       autorounding boundarychar charcode chardp chardx
+syn keyword mfInternal       chardy charext charht charic charwd day designsize
+syn keyword mfInternal       fillin fontmaking granularity hppp jobname month
+syn keyword mfInternal       pausing proofing showstopping smoothing time
+syn keyword mfInternal       tracingcapsules tracingchoices tracingcommands
+syn keyword mfInternal       tracingedges tracingequations tracingmacros
+syn keyword mfInternal       tracingonline tracingoutput tracingpens
+syn keyword mfInternal       tracingrestores tracingspecs tracingstats
+syn keyword mfInternal       tracingtitles turningcheck vppp warningcheck
+syn keyword mfInternal       xoffset year yoffset
 
 " Page 212: 'pair expressions'
-syn keyword mfPairExp point of precontrol postcontrol penoffset rotated
-syn keyword mfPairExp scaled shifted slanted transformed xscaled yscaled
-syn keyword mfPairExp zscaled
+syn keyword mfPairExp        of penoffset point postcontrol precontrol rotated
+syn keyword mfPairExp        scaled shifted slanted transformed xscaled yscaled
+syn keyword mfPairExp        zscaled
 
 " Page 213: 'path expressions'
-syn keyword mfPathExp makepath reverse subpath curl tension atleast
-syn keyword mfPathExp controls cycle
+syn keyword mfPathExp        atleast controls curl cycle makepath reverse
+syn keyword mfPathExp        subpath tension
 
 " Page 214: 'pen expressions'
-syn keyword mfPenExp nullpen pencircle makepen
+syn keyword mfPenExp         makepen nullpen pencircle
 
-" Page 214: 'picutre expressions'
-syn keyword mfPicExp nullpicture
+" Page 214: 'picture expressions'
+syn keyword mfPicExp         nullpicture
 
 " Page 214: 'string expressions'
-syn keyword mfStringExp jobname readstring str char decimal substring
+syn keyword mfStringExp      char decimal readstring str substring
 
 " Page 217: 'commands and statements'
-syn keyword mfCommand end dump save interim newinternal randomseed let
-syn keyword mfCommand delimiters outer everyjob show showvariable showtoken
-syn keyword mfCommand showdependencies showstats message errmessage errhelp
-syn keyword mfCommand batchmode nonstopmode scrollmode errorstopmode
-syn keyword mfCommand addto also contour doublepath withpen withweight cull
-syn keyword mfCommand keeping dropping display inwindow openwindow at from to
-syn keyword mfCommand shipout special numspecial
+syn keyword mfCommand        addto also at batchmode contour cull delimiters
+syn keyword mfCommand        display doublepath dropping dump end errhelp
+syn keyword mfCommand        errmessage errorstopmode everyjob from interim
+syn keyword mfCommand        inwindow keeping let message newinternal
+syn keyword mfCommand        nonstopmode numspecial openwindow outer randomseed
+syn keyword mfCommand        save scrollmode shipout show showdependencies
+syn keyword mfCommand        showstats showtoken showvariable special to withpen
+syn keyword mfCommand        withweight
 
 " Page 56: 'types'
-syn keyword mfType boolean numeric pair path pen picture string transform
+syn keyword mfType           boolean numeric pair path pen picture string
+syn keyword mfType           transform
 
 " Page 155: 'grouping'
-syn keyword mfStatement begingroup endgroup
+syn keyword mfStatement      begingroup endgroup
 
 " Page 165: 'definitions'
-syn keyword mfDefinition enddef def expr suffix text primary secondary
-syn keyword mfDefinition tertiary vardef primarydef secondarydef tertiarydef
+syn keyword mfDefinition     def enddef expr primary primarydef secondary
+syn keyword mfDefinition     secondarydef suffix tertiary tertiarydef text
+syn keyword mfDefinition     vardef
 
 " Page 169: 'conditions and loops'
-syn keyword mfCondition if fi else elseif endfor for forsuffixes forever
-syn keyword mfCondition step until exitif
+syn keyword mfCondition      else elseif endfor exitif fi for forever
+syn keyword mfCondition      forsuffixes if step until
 
 " Other primitives listed in the index
-syn keyword mfPrimitive charlist endinput expandafter extensible
-syn keyword mfPrimitive fontdimen headerbyte inner input intersectiontimes
-syn keyword mfPrimitive kern ligtable quote scantokens skipto
+syn keyword mfPrimitive      charlist endinput expandafter extensible fontdimen
+syn keyword mfPrimitive      headerbyte inner input intersectiontimes kern
+syn keyword mfPrimitive      ligtable quote scantokens skipto
+
+" Implicit suffix parameters
+syn match   mfSuffixParam    "@#\|#@\|@"
+
+" These are just tags, but given their special status, we
+" highlight them as variables
+syn keyword mfVariable       x y
 
 " Keywords defined by plain.mf (defined on pp.262-278)
-if !exists("plain_mf_macros")
-  let plain_mf_macros = 1 " Set this to '0' if your source gets too colourful
-			  " metapost.vim does so to turn off Metafont macros
+if get(g:, "plain_mf_macros", 1)
+  syn keyword mfDef          addto_currentpicture beginchar capsule_def
+  syn keyword mfDef          change_width clear_pen_memory clearit clearpen
+  syn keyword mfDef          clearxy culldraw cullit cutdraw
+  syn keyword mfDef          define_blacker_pixels define_corrected_pixels
+  syn keyword mfDef          define_good_x_pixels define_good_y_pixels
+  syn keyword mfDef          define_horizontal_corrected_pixels define_pixels
+  syn keyword mfDef          define_whole_blacker_pixels define_whole_pixels
+  syn keyword mfDef          define_whole_vertical_blacker_pixels
+  syn keyword mfDef          define_whole_vertical_pixels downto draw drawdot
+  syn keyword mfDef          endchar erase exitunless fill filldraw fix_units
+  syn keyword mfDef          flex font_coding_scheme font_extra_space
+  syn keyword mfDef          font_identifier font_normal_shrink
+  syn keyword mfDef          font_normal_space font_normal_stretch font_quad
+  syn keyword mfDef          font_size font_slant font_x_height gfcorners gobble
+  syn keyword mfDef          hide imagerules interact italcorr killtext
+  syn keyword mfDef          loggingall lowres_fix makebox makegrid maketicks
+  syn keyword mfDef          mode_def mode_setup nodisplays notransforms numtok
+  syn keyword mfDef          openit penrazor pensquare penstroke pickup
+  syn keyword mfDef          proofoffset proofrule range reflectedabout
+  syn keyword mfDef          rotatedaround screenchars screenrule screenstrokes
+  syn keyword mfDef          shipit showit smode stop superellipse takepower
+  syn keyword mfDef          tracingall tracingnone undraw undrawdot unfill
+  syn keyword mfDef          unfilldraw upto z
+  syn match   mfDef          "???"
+  syn keyword mfVardef       bot byte ceiling counterclockwise cutoff decr dir
+  syn keyword mfVardef       direction directionpoint grayfont hround incr
+  syn keyword mfVardef       interpath inverse labelfont labels lft magstep
+  " Note: nodot is not a vardef, it is used as in makelabel.lft.nodot("5",z5)
+  " (METAFONT only)
+  syn keyword mfVardef       makelabel max min nodot penlabels penpos
+  syn keyword mfVardef       proofrulethickness round rt savepen slantfont solve
+  syn keyword mfVardef       tensepath titlefont top unitvector vround whatever
+  syn match   mpVardef       "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
+  syn keyword mfPrimaryDef   div dotprod gobbled mod
+  syn keyword mfSecondaryDef intersectionpoint
+  syn keyword mfTertiaryDef  softjoin thru
+  syn keyword mfNewInternal  blacker currentwindow displaying eps epsilon
+  syn keyword mfNewInternal  infinity join_radius number_of_modes o_correction
+  syn keyword mfNewInternal  pen_bot pen_lft pen_rt pen_top pixels_per_inch
+  syn keyword mfNewInternal  screen_cols screen_rows tolerance
+  " Predefined constants
+  syn keyword mfConstant     base_name base_version blankpicture ditto down
+  syn keyword mfConstant     fullcircle halfcircle identity left lowres origin
+  syn keyword mfConstant     penspeck proof quartercircle right rulepen smoke
+  syn keyword mfConstant     unitpixel unitsquare up
+  " Other predefined variables
+  syn keyword mfVariable     aspect_ratio currentpen extra_beginchar
+  syn keyword mfVariable     extra_endchar currentpen_path currentpicture
+  syn keyword mfVariable     currenttransform d extra_setup h localfont mag mode
+  syn keyword mfVariable     mode_name w
+  " let statements:
+  syn keyword mfnumExp       abs
+  syn keyword mfPairExp      rotatedabout
+  syn keyword mfCommand      bye relax
 endif
-if plain_mf_macros
-  syn keyword mfMacro abs addto_currentpicture aspect_ratio base_name
-  syn keyword mfMacro base_version beginchar blacker blankpicture bot bye byte
-  syn keyword mfMacro capsule_def ceiling change_width clear_pen_memory clearit
-  syn keyword mfMacro clearpen clearxy counterclockwise culldraw cullit
-  syn keyword mfMacro currentpen currentpen_path currentpicture
-  syn keyword mfMacro currenttransform currentwindow cutdraw cutoff d decr
-  syn keyword mfMacro define_blacker_pixels define_corrected_pixels
-  syn keyword mfMacro define_good_x_pixels define_good_y_pixels
-  syn keyword mfMacro define_horizontal_corrected_pixels define_pixels
-  syn keyword mfMacro define_whole_blacker_pixels define_whole_pixels
-  syn keyword mfMacro define_whole_vertical_blacker_pixels
-  syn keyword mfMacro define_whole_vertical_pixels dir direction directionpoint
-  syn keyword mfMacro displaying ditto div dotprod down downto draw drawdot
-  syn keyword mfMacro endchar eps epsilon extra_beginchar extra_endchar
-  syn keyword mfMacro extra_setup erase exitunless fill filldraw fix_units flex
-  syn keyword mfMacro font_coding_scheme font_extra_space font_identifier
-  syn keyword mfMacro font_normal_shrink font_normal_space font_normal_stretch
-  syn keyword mfMacro font_quad font_setup font_size font_slant font_x_height
-  syn keyword mfMacro fullcircle generate gfcorners gobble gobbled grayfont h
-  syn keyword mfMacro halfcircle hide hround identity image_rules incr infinity
-  syn keyword mfMacro interact interpath intersectionpoint inverse italcorr
-  syn keyword mfMacro join_radius killtext labelfont labels left lft localfont
-  syn keyword mfMacro loggingall lowres lowres_fix mag magstep makebox makegrid
-  syn keyword mfMacro makelabel maketicks max min mod mode mode_def mode_name
-  syn keyword mfMacro mode_setup nodisplays notransforms number_of_modes numtok
-  syn keyword mfMacro o_correction openit origin pen_bot pen_lft pen_rt pen_top
-  syn keyword mfMacro penlabels penpos penrazor penspeck pensquare penstroke
-  syn keyword mfMacro pickup pixels_per_inch proof proofoffset proofrule
-  syn keyword mfMacro proofrulethickness quartercircle range reflectedabout
-  syn keyword mfMacro relax right rotatedabout rotatedaround round rt rulepen
-  syn keyword mfMacro savepen screenchars screen_rows screen_cols screenrule
-  syn keyword mfMacro screenstrokes shipit showit slantfont smode smoke softjoin
-  syn keyword mfMacro solve stop superellipse takepower tensepath titlefont
-  syn keyword mfMacro tolerance top tracingall tracingnone undraw undrawdot
-  syn keyword mfMacro unfill unfilldraw unitpixel unitsquare unitvector up upto
-  syn keyword mfMacro vround w whatever
+
+" By default, METAFONT loads modes.mf, too
+if get(g:, "plain_mf_modes", 1)
+  syn keyword mfConstant     APSSixMed AgfaFourZeroZero AgfaThreeFourZeroZero
+  syn keyword mfConstant     AtariNineFive AtariNineSix AtariSLMEightZeroFour
+  syn keyword mfConstant     AtariSMOneTwoFour CItohEightFiveOneZero
+  syn keyword mfConstant     CItohThreeOneZero CanonBJCSixZeroZero CanonCX
+  syn keyword mfConstant     CanonEX CanonLBPLX CanonLBPTen CanonSX ChelgraphIBX
+  syn keyword mfConstant     CompugraphicEightSixZeroZero
+  syn keyword mfConstant     CompugraphicNineSixZeroZero DD DEClarge DECsmall
+  syn keyword mfConstant     DataDiscNew EightThree EpsonAction
+  syn keyword mfConstant     EpsonLQFiveZeroZeroLo EpsonLQFiveZeroZeroMed
+  syn keyword mfConstant     EpsonMXFX EpsonSQEightSevenZero EpsonStylusPro
+  syn keyword mfConstant     EpsonStylusProHigh EpsonStylusProLow
+  syn keyword mfConstant     EpsonStylusProMed FourFour GThreefax HPDeskJet
+  syn keyword mfConstant     HPLaserJetIIISi IBMFourTwoFiveZero IBMFourTwoOneSix
+  syn keyword mfConstant     IBMFourTwoThreeZero IBMFourZeroOneNine
+  syn keyword mfConstant     IBMFourZeroThreeNine IBMFourZeroTwoNine
+  syn keyword mfConstant     IBMProPrinter IBMSixOneFiveFour IBMSixSixSevenZero
+  syn keyword mfConstant     IBMThreeEightOneTwo IBMThreeEightTwoZero
+  syn keyword mfConstant     IBMThreeOneNineThree IBMThreeOneSevenNine
+  syn keyword mfConstant     IBMUlfHolleberg LASevenFive LNOthreR LNOthree
+  syn keyword mfConstant     LNZeroOne LNZeroThree LPSFourZero LPSTwoZero
+  syn keyword mfConstant     LexmarkFourZeroThreeNine LexmarkOptraR
+  syn keyword mfConstant     LexmarkOptraS LinotypeLThreeThreeZero
+  syn keyword mfConstant     LinotypeOneZeroZero LinotypeOneZeroZeroLo
+  syn keyword mfConstant     LinotypeThreeZeroZeroHi MacTrueSize NeXTprinter
+  syn keyword mfConstant     NeXTscreen NecTwoZeroOne Newgen NineOne
+  syn keyword mfConstant     OCESixSevenFiveZeroPS OneTwoZero OneZeroZero
+  syn keyword mfConstant     PrintwareSevenTwoZeroIQ Prism QMSOneSevenTwoFive
+  syn keyword mfConstant     QMSOneSevenZeroZero QMSTwoFourTwoFive RicohA
+  syn keyword mfConstant     RicohFortyEighty RicohFourZeroEightZero RicohLP
+  syn keyword mfConstant     SparcPrinter StarNLOneZero VAXstation VTSix
+  syn keyword mfConstant     VarityperFiveZeroSixZeroW
+  syn keyword mfConstant     VarityperFourThreeZeroZeroHi
+  syn keyword mfConstant     VarityperFourThreeZeroZeroLo
+  syn keyword mfConstant     VarityperFourTwoZeroZero VarityperSixZeroZero
+  syn keyword mfConstant     XeroxDocutech XeroxEightSevenNineZero
+  syn keyword mfConstant     XeroxFourZeroFiveZero XeroxNineSevenZeroZero
+  syn keyword mfConstant     XeroxPhaserSixTwoZeroZeroDP XeroxThreeSevenZeroZero
+  syn keyword mfConstant     Xerox_world agfafzz agfatfzz amiga aps apssixhi
+  syn keyword mfConstant     aselect atariezf atarinf atarins atariotf bitgraph
+  syn keyword mfConstant     bjtenex bjtzzex bjtzzl bjtzzs boise canonbjc
+  syn keyword mfConstant     canonex canonlbp cg cgl cgnszz citohtoz corona crs
+  syn keyword mfConstant     cthreeten cx datadisc declarge decsmall deskjet
+  syn keyword mfConstant     docutech dover dp dpdfezzz eighthre elvira epscszz
+  syn keyword mfConstant     epsdraft epsdrft epsdrftl epsfast epsfastl epshi
+  syn keyword mfConstant     epslo epsmed epsmedl epson epsonact epsonfx epsonl
+  syn keyword mfConstant     epsonlo epsonlol epsonlq epsonsq epstylus epstylwr
+  syn keyword mfConstant     epstyplo epstypmd epstypml epstypro epswlo epswlol
+  syn keyword mfConstant     esphi fourfour gpx gtfax gtfaxhi gtfaxl gtfaxlo
+  syn keyword mfConstant     gtfaxlol help hifax highfax hplaser hprugged ibm_a
+  syn keyword mfConstant     ibmd ibmega ibmegal ibmfzon ibmfztn ibmpp ibmppl
+  syn keyword mfConstant     ibmsoff ibmteot ibmtetz ibmtont ibmtosn ibmtosnl
+  syn keyword mfConstant     ibmvga ibx imagen imagewriter itoh itohl itohtoz
+  syn keyword mfConstant     itohtozl iw jetiiisi kyocera laserjet laserjetfive
+  syn keyword mfConstant     laserjetfivemp laserjetfour laserjetfourthousand
+  syn keyword mfConstant     laserjetfourzerozerozero laserjethi laserjetlo
+  syn keyword mfConstant     laserjettwoonezerozero
+  syn keyword mfConstant     laserjettwoonezerozerofastres lasermaster
+  syn keyword mfConstant     laserwriter lasf lexmarkr lexmarks lexmarku
+  syn keyword mfConstant     linohalf linohi linolo linolttz linoone linosuper
+  syn keyword mfConstant     linothree linothreelo linotzzh ljfive ljfivemp
+  syn keyword mfConstant     ljfour ljfzzz ljfzzzfr ljlo ljtozz ljtozzfr lmaster
+  syn keyword mfConstant     lnotr lnzo lps lpstz lqhires lqlores lqmed lqmedl
+  syn keyword mfConstant     lqmedres lview lviewl lwpro macmag mactrue modes_mf
+  syn keyword mfConstant     ncd nec nechi neclm nectzo newdd newddl nexthi
+  syn keyword mfConstant     nextscreen nextscrn nineone nullmode ocessfz
+  syn keyword mfConstant     okidata okidatal okifourten okifte okihi onetz
+  syn keyword mfConstant     onezz pcprevw pcscreen phaser phaserfs phasertf
+  syn keyword mfConstant     phasertfl phasertl pixpt printware prntware
+  syn keyword mfConstant     proprinter qms qmsesz qmsostf qmsoszz qmstftf ricoh
+  syn keyword mfConstant     ricoha ricohlp ricohsp sherpa sparcptr starnlt
+  syn keyword mfConstant     starnltl styletwo stylewr stylewri stylewriter sun
+  syn keyword mfConstant     supre swtwo toshiba ultre varityper vs vtftzz
+  syn keyword mfConstant     vtftzzhi vtftzzlo vtfzszw vtszz xpstzz xpstzzl
+  syn keyword mfConstant     xrxesnz xrxfzfz xrxnszz xrxtszz
+  syn keyword mfDef          BCPL_string coding_scheme font_face_byte
+  syn keyword mfDef          font_family landscape
+  syn keyword mfDef          mode_extra_info mode_help mode_param
+  syn keyword mfNewInternal  blacker_min
 endif
 
 " Some other basic macro names, e.g., from cmbase, logo, etc.
-if !exists("other_mf_macros")
-  let other_mf_macros = 1 " Set this to '0' if your code gets too colourful
-			  " metapost.vim does so to turn off Metafont macros
-endif
-if other_mf_macros
-  syn keyword mfMacro beginlogochar
+if get(g:, "other_mf_macros", 1)
+  syn keyword mfDef          beginlogochar
+  syn keyword mfDef          font_setup
+  syn keyword mfPrimitive    generate
 endif
 
 " Numeric tokens
-syn match mfNumeric	"[-]\=\d\+"
-syn match mfNumeric	"[-]\=\.\d\+"
-syn match mfNumeric	"[-]\=\d\+\.\d\+"
+syn match     mfNumeric      "[-]\=\d\+"
+syn match     mfNumeric      "[-]\=\.\d\+"
+syn match     mfNumeric      "[-]\=\d\+\.\d\+"
 
-" Metafont lengths
-syn match mfLength	"\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
-syn match mfLength	"\<[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
-syn match mfLength	"\<[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
-syn match mfLength	"\<[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
-
-" Metafont coordinates and points
-syn match mfCoord	"\<[xy]\d\+\>"
-syn match mfPoint	"\<z\d\+\>"
+" METAFONT lengths
+syn match     mfLength       "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
+syn match     mfLength       "[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
+syn match     mfLength       "[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
+syn match     mfLength       "[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
 
 " String constants
-syn region mfString	start=+"+ end=+"+
+syn match     mfOpenString   /"[^"]*/
+syn region    mfString       oneline keepend start=+"+ end=+"+
 
 " Comments:
-syn match mfComment	"%.*$"
+syn keyword   mfTodoComment  contained TODO FIXME XXX DEBUG NOTE
+syn match     mfComment      "%.*$" contains=mfTodoComment,@Spell
 
 " synchronizing
 syn sync maxlines=50
 
 " Define the default highlighting
-" Only when an item doesn't have highlighting yet
-
-hi def link mfBoolExp	Statement
-hi def link mfNumExp	Statement
-hi def link mfInternal	Identifier
-hi def link mfPairExp	Statement
-hi def link mfPathExp	Statement
-hi def link mfPenExp	Statement
-hi def link mfPicExp	Statement
-hi def link mfStringExp	Statement
-hi def link mfCommand	Statement
-hi def link mfType	Type
-hi def link mfStatement	Statement
-hi def link mfDefinition	Statement
-hi def link mfCondition	Conditional
-hi def link mfPrimitive	Statement
-hi def link mfMacro	Macro
-hi def link mfCoord	Identifier
-hi def link mfPoint	Identifier
-hi def link mfNumeric	Number
-hi def link mfLength	Number
-hi def link mfComment	Comment
-hi def link mfString	String
-
+hi def link mfBoolExp      Statement
+hi def link mfNumExp       Statement
+hi def link mfPairExp      Statement
+hi def link mfPathExp      Statement
+hi def link mfPenExp       Statement
+hi def link mfPicExp       Statement
+hi def link mfStringExp    Statement
+hi def link mfInternal     Identifier
+hi def link mfCommand      Statement
+hi def link mfType         Type
+hi def link mfStatement    Statement
+hi def link mfDefinition   Statement
+hi def link mfCondition    Conditional
+hi def link mfPrimitive    Statement
+hi def link mfDef          Function
+hi def link mfVardef       mfDef
+hi def link mfPrimaryDef   mfDef
+hi def link mfSecondaryDef mfDef
+hi def link mfTertiaryDef  mfDef
+hi def link mfCoord        Identifier
+hi def link mfPoint        Identifier
+hi def link mfNumeric      Number
+hi def link mfLength       Number
+hi def link mfComment      Comment
+hi def link mfString       String
+hi def link mfOpenString   Todo
+hi def link mfSuffixParam  Label
+hi def link mfNewInternal  mfInternal
+hi def link mfVariable     Identifier
+hi def link mfConstant     Constant
+hi def link mfTodoComment  Todo
 
 let b:current_syntax = "mf"
 
-" vim: ts=8
+" vim:sw=2
diff --git a/runtime/syntax/mp.vim b/runtime/syntax/mp.vim
index 3966b69..95723d0 100644
--- a/runtime/syntax/mp.vim
+++ b/runtime/syntax/mp.vim
@@ -1,115 +1,765 @@
 " Vim syntax file
-" Language:	MetaPost
-" Maintainer:	Andreas Scherer <andreas.scherer@pobox.com>
-" Last Change:	April 30, 2001
+" Language:           MetaPost
+" Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change:        2016 Oct 01
 
-" quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
-let plain_mf_macros = 0 " plain.mf has no special meaning for MetaPost
-let other_mf_macros = 0 " cmbase.mf, logo.mf, ... neither
+let s:cpo_sav = &cpo
+set cpo&vim
 
-" Read the Metafont syntax to start with
+if exists("g:plain_mf_macros")
+  let s:plain_mf_macros = g:plain_mf_macros
+endif
+if exists("g:plain_mf_modes")
+  let s:plain_mf_modes = g:plain_mf_modes
+endif
+if exists("g:other_mf_macros")
+  let s:other_mf_macros = g:other_mf_macros
+endif
+
+let g:plain_mf_macros = 0 " plain.mf has no special meaning for MetaPost
+let g:plain_mf_modes  = 0 " No METAFONT modes
+let g:other_mf_macros = 0 " cmbase.mf, logo.mf, ... neither
+
+" Read the METAFONT syntax to start with
 runtime! syntax/mf.vim
+unlet b:current_syntax " Necessary for syn include below
 
-" MetaPost has TeX inserts for typeset labels
-" verbatimtex, btex, and etex will be treated as keywords
-syn match mpTeXbegin "\(verbatimtex\|btex\)"
-syn match mpTeXend "etex"
-syn region mpTeXinsert start="\(verbatimtex\|btex\)"hs=e+1 end="etex"he=s-1 contains=mpTeXbegin,mpTeXend keepend
+" Restore the value of existing global variables
+if exists("s:plain_mf_macros")
+  let g:plain_mf_macros = s:plain_mf_macros
+else
+  unlet g:plain_mf_macros
+endif
+if exists("s:plain_mf_modes")
+  let g:plain_mf_modes = s:plain_mf_modes
+else
+  unlet g:plain_mf_modes
+endif
+if exists("s:other_mf_macros")
+  let g:other_mf_macros = s:other_mf_macros
+else
+  unlet g:other_mf_macros
+endif
 
-" MetaPost primitives not found in Metafont
-syn keyword mpInternal bluepart clip color dashed fontsize greenpart infont
-syn keyword mpInternal linecap linejoin llcorner lrcorner miterlimit mpxbreak
-syn keyword mpInternal prologues redpart setbounds tracinglostchars
-syn keyword mpInternal truecorners ulcorner urcorner withcolor
+" Use TeX highlighting inside verbatimtex/btex... etex
+syn include @MPTeX syntax/tex.vim
+unlet b:current_syntax
+" These are defined as keywords rather than using matchgroup
+" in order to make them available to syntaxcomplete.
+syn keyword mpTeXdelim       btex etex verbatimtex contained
+syn region mpTeXinsert
+      \ start=/\<verbatimtex\>\|\<btex\>/rs=e+1
+      \ end=/\<etex\>/re=s-1 keepend
+      \ contains=@MPTeX,mpTeXdelim
 
-" Metafont primitives not found in MetaPost
-syn keyword notDefined autorounding chardx chardy fillin granularity hppp
-syn keyword notDefined proofing smoothing tracingedges tracingpens
-syn keyword notDefined turningcheck vppp xoffset yoffset
+" iskeyword must be set after the syn include above, because tex.vim sets `syn
+" iskeyword`. Note that keywords do not contain numbers (numbers are
+" subscripts)
+syntax iskeyword @,_
+
+" MetaPost primitives not found in METAFONT
+syn keyword mpBoolExp        bounded clipped filled stroked textual arclength
+syn keyword mpNumExp         arctime blackpart bluepart colormodel cyanpart
+syn keyword mpNumExp         fontsize greenpart greypart magentapart redpart
+syn keyword mpPairExp        yellowpart llcorner lrcorner ulcorner urcorner
+" envelope is seemingly undocumented, but it exists since mpost 1.003.
+" The syntax is: envelope <polygonal pen> of <path primary>. For example,
+"     path p;
+"     p := envelope pensquare of (up--left);
+" (Thanks to Daniel H. Luecking for the example!)
+syn keyword mpPathExp        envelope pathpart
+syn keyword mpPenExp         penpart
+syn keyword mpPicExp         dashpart glyph infont
+syn keyword mpStringExp      fontpart readfrom textpart
+syn keyword mpType           cmykcolor color rgbcolor
+" Other MetaPost primitives listed in the manual
+syn keyword mpPrimitive      mpxbreak within
+" Internal quantities not found in METAFONT
+" (Table 6 in MetaPost: A User's Manual)
+syn keyword mpInternal       defaultcolormodel hour minute linecap linejoin
+syn keyword mpInternal       miterlimit mpprocset mpversion numberprecision
+syn keyword mpInternal       numbersystem outputfilename outputformat
+syn keyword mpInternal       outputformatoptions outputtemplate prologues
+syn keyword mpInternal       restoreclipcolor tracinglostchars troffmode
+syn keyword mpInternal       truecorners
+" List of commands not found in METAFONT (from MetaPost: A User's Manual)
+syn keyword mpCommand        clip closefrom dashed filenametemplate fontmapfile
+syn keyword mpCommand        fontmapline setbounds withcmykcolor withcolor
+syn keyword mpCommand        withgreyscale withoutcolor withpostscript
+syn keyword mpCommand        withprescript withrgbcolor write
+" METAFONT internal variables not found in MetaPost
+syn keyword notDefined       autorounding chardx chardy fillin granularity
+syn keyword notDefined       proofing smoothing tracingedges tracingpens
+syn keyword notDefined       turningcheck xoffset yoffset
+" Suffix defined only in METAFONT:
+syn keyword notDefined       nodot
+" Other not implemented primitives (see MetaPost: A User's Manual, §C.1)
+syn keyword notDefined       cull display openwindow numspecial totalweight
+syn keyword notDefined       withweight
 
 " Keywords defined by plain.mp
-if !exists("plain_mp_macros")
-  let plain_mp_macros = 1 " Set this to '0' if your source gets too colourful
-endif
-if plain_mp_macros
-  syn keyword mpMacro ahangle ahlength background bbox bboxmargin beginfig
-  syn keyword mpMacro beveled black blue buildcycle butt center cutafter
-  syn keyword mpMacro cutbefore cuttings dashpattern defaultfont defaultpen
-  syn keyword mpMacro defaultscale dotlabel dotlabels drawarrow drawdblarrow
-  syn keyword mpMacro drawoptions endfig evenly extra_beginfig extra_endfig
-  syn keyword mpMacro green label labeloffset mitered red rounded squared
-  syn keyword mpMacro thelabel white base_name base_version
-  syn keyword mpMacro upto downto exitunless relax gobble gobbled
-  syn keyword mpMacro interact loggingall tracingall tracingnone
-  syn keyword mpMacro eps epsilon infinity right left up down origin
-  syn keyword mpMacro quartercircle halfcircle fullcircle unitsquare identity
-  syn keyword mpMacro blankpicture withdots ditto EOF pensquare penrazor
-  syn keyword mpMacro penspeck whatever abs round ceiling byte dir unitvector
-  syn keyword mpMacro inverse counterclockwise tensepath mod div dotprod
-  syn keyword mpMacro takepower direction directionpoint intersectionpoint
-  syn keyword mpMacro softjoin incr decr reflectedabout rotatedaround
-  syn keyword mpMacro rotatedabout min max flex superellipse interpath
-  syn keyword mpMacro magstep currentpen currentpen_path currentpicture
-  syn keyword mpMacro fill draw filldraw drawdot unfill undraw unfilldraw
-  syn keyword mpMacro undrawdot erase cutdraw image pickup numeric_pickup
-  syn keyword mpMacro pen_lft pen_rt pen_top pen_bot savepen clearpen
-  syn keyword mpMacro clear_pen_memory lft rt top bot ulft urt llft lrt
-  syn keyword mpMacro penpos penstroke arrowhead makelabel labels penlabel
-  syn keyword mpMacro range numtok thru clearxy clearit clearpen pickup
-  syn keyword mpMacro shipit bye hide stop solve
+if get(g:, "plain_mp_macros", 1) || get(g:, "mp_metafun_macros", 0)
+  syn keyword mpDef          beginfig clear_pen_memory clearit clearpen clearpen
+  syn keyword mpDef          clearxy colorpart cutdraw downto draw drawarrow
+  syn keyword mpDef          drawdblarrow drawdot drawoptions endfig erase
+  syn keyword mpDef          exitunless fill filldraw flex gobble hide interact
+  syn keyword mpDef          label loggingall makelabel numtok penstroke pickup
+  syn keyword mpDef          range reflectedabout rotatedaround shipit
+  syn keyword mpDef          stop superellipse takepower tracingall tracingnone
+  syn keyword mpDef          undraw undrawdot unfill unfilldraw upto
+  syn match   mpDef          "???"
+  syn keyword mpVardef       arrowhead bbox bot buildcycle byte ceiling center
+  syn keyword mpVardef       counterclockwise decr dir direction directionpoint
+  syn keyword mpVardef       dotlabel dotlabels image incr interpath inverse
+  syn keyword mpVardef       labels lft magstep max min penlabels penpos round
+  syn keyword mpVardef       rt savepen solve tensepath thelabel top unitvector
+  syn keyword mpVardef       whatever z
+  syn keyword mpPrimaryDef   div dotprod gobbled mod
+  syn keyword mpSecondaryDef intersectionpoint
+  syn keyword mpTertiaryDef  cutafter cutbefore softjoin thru
+  syn keyword mpNewInternal  ahangle ahlength bboxmargin beveled butt defaultpen
+  syn keyword mpNewInternal  defaultscale dotlabeldiam eps epsilon infinity
+  syn keyword mpNewInternal  join_radius labeloffset mitered pen_bot pen_lft
+  syn keyword mpNewInternal  pen_rt pen_top rounded squared tolerance
+  " Predefined constants
+  syn keyword mpConstant     EOF background base_name base_version black
+  syn keyword mpConstant     blankpicture blue ditto down evenly fullcircle
+  syn keyword mpConstant     green halfcircle identity left origin penrazor
+  syn keyword mpConstant     penspeck pensquare quartercircle red right
+  syn keyword mpConstant     unitsquare up white withdots
+  " Other predefined variables
+  syn keyword mpVariable     currentpen currentpen_path currentpicture cuttings
+  syn keyword mpVariable     defaultfont extra_beginfig extra_endfig
+  syn match   mpVariable     /\<\%(laboff\|labxf\|labyf\)\>/
+  syn match   mpVariable     /\<\%(laboff\|labxf\|labyf\)\.\%(lft\|rt\|bot\|top\|ulft\|urt\|llft\|lrt\)\>/
+  " let statements:
+  syn keyword mpnumExp       abs
+  syn keyword mpDef          rotatedabout
+  syn keyword mpCommand      bye relax
+  " on and off are not technically keywords, but it is nice to highlight them
+  " inside dashpattern().
+  syn keyword mpOnOff        off on contained
+  syn keyword mpDash         dashpattern contained
+  syn region  mpDashPattern
+        \ start="dashpattern\s*"
+        \ end=")"he=e-1
+        \ contains=mfNumeric,mfLength,mpOnOff,mpDash
 endif
 
 " Keywords defined by mfplain.mp
-if !exists("mfplain_mp_macros")
-  let mfplain_mp_macros = 0 " Set this to '1' to include these macro names
-endif
-if mfplain_mp_macros
-  syn keyword mpMacro beginchar blacker capsule_def change_width
-  syn keyword mpMacro define_blacker_pixels define_corrected_pixels
-  syn keyword mpMacro define_good_x_pixels define_good_y_pixels
-  syn keyword mpMacro define_horizontal_corrected_pixels
-  syn keyword mpMacro define_pixels define_whole_blacker_pixels
-  syn keyword mpMacro define_whole_vertical_blacker_pixels
-  syn keyword mpMacro define_whole_vertical_pixels endchar
-  syn keyword mpMacro extra_beginchar extra_endchar extra_setup
-  syn keyword mpMacro font_coding_scheme font_extra_space font_identifier
-  syn keyword mpMacro font_normal_shrink font_normal_space
-  syn keyword mpMacro font_normal_stretch font_quad font_size
-  syn keyword mpMacro font_slant font_x_height italcorr labelfont
-  syn keyword mpMacro makebox makegrid maketicks mode_def mode_setup
-  syn keyword mpMacro o_correction proofrule proofrulethickness rulepen smode
-
+if get(g:, "mfplain_mp_macros", 0)
+  syn keyword mpDef          beginchar capsule_def change_width
+  syn keyword mpDef          define_blacker_pixels define_corrected_pixels
+  syn keyword mpDef          define_good_x_pixels define_good_y_pixels
+  syn keyword mpDef          define_horizontal_corrected_pixels define_pixels
+  syn keyword mpDef          define_whole_blacker_pixels define_whole_pixels
+  syn keyword mpDef          define_whole_vertical_blacker_pixels
+  syn keyword mpDef          define_whole_vertical_pixels endchar
+  syn keyword mpDef          font_coding_scheme font_extra_space font_identifier
+  syn keyword mpDef          font_normal_shrink font_normal_space
+  syn keyword mpDef          font_normal_stretch font_quad font_size font_slant
+  syn keyword mpDef          font_x_height italcorr labelfont lowres_fix makebox
+  syn keyword mpDef          makegrid maketicks mode_def mode_setup proofrule
+  syn keyword mpDef          smode
+  syn keyword mpVardef       hround proofrulethickness vround
+  syn keyword mpNewInternal  blacker o_correction
+  syn keyword mpVariable     extra_beginchar extra_endchar extra_setup rulepen
   " plus some no-ops, also from mfplain.mp
-  syn keyword mpMacro cullit currenttransform gfcorners grayfont hround
-  syn keyword mpMacro imagerules lowres_fix nodisplays notransforms openit
-  syn keyword mpMacro proofoffset screenchars screenrule screenstrokes
-  syn keyword mpMacro showit slantfont titlefont unitpixel vround
+  syn keyword mpDef          cull cullit gfcorners imagerules nodisplays
+  syn keyword mpDef          notransforms openit proofoffset screenchars
+  syn keyword mpDef          screenrule screenstrokes showit
+  syn keyword mpVardef       grayfont slantfont titlefont
+  syn keyword mpVariable     currenttransform
+  syn keyword mpConstant     unitpixel
+  " These are not listed in the MetaPost manual, and some are ignored by
+  " MetaPost, but are nonetheless defined in mfplain.mp
+  syn keyword mpDef          killtext
+  syn match   mpVardef       "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
+  syn keyword mpVariable     aspect_ratio localfont mag mode mode_name
+  syn keyword mpVariable     proofcolor
+  syn keyword mpConstant     lowres proof smoke
+  syn keyword mpNewInternal  autorounding bp_per_pixel granularity
+  syn keyword mpNewInternal  number_of_modes proofing smoothing turningcheck
 endif
 
-" Keywords defined by other macro packages, e.g., boxes.mp
-if !exists("other_mp_macros")
-  let other_mp_macros = 1 " Set this to '0' if your source gets too colourful
+" Keywords defined by all base macro packages:
+" - (r)boxes.mp
+" - format.mp
+" - graph.mp
+" - marith.mp
+" - sarith.mp
+" - string.mp
+" - TEX.mp
+if get(g:, "other_mp_macros", 1)
+  " boxes and rboxes
+  syn keyword mpDef          boxjoin drawboxed drawboxes drawunboxed
+  syn keyword mpNewInternal  circmargin defaultdx defaultdy rbox_radius
+  syn keyword mpVardef       boxit bpath circleit fixpos fixsize generic_declare
+  syn keyword mpVardef       generic_redeclare generisize pic rboxit str_prefix
+  " format
+  syn keyword mpVardef       Mformat format init_numbers roundd
+  syn keyword mpVariable     Fe_base Fe_plus
+  syn keyword mpConstant     Ten_to
+  " graph
+  syn keyword mpDef          Gfor Gxyscale OUT auto begingraph endgraph gdata
+  syn keyword mpDef          gdraw gdrawarrow gdrawdblarrow gfill plot
+  syn keyword mpVardef       augment autogrid frame gdotlabel glabel grid itick
+  syn keyword mpVardef       otick
+  syn keyword mpVardef       Mreadpath setcoords setrange
+  syn keyword mpNewInternal  Gmarks Gminlog Gpaths linear log
+  syn keyword mpVariable     Autoform Gemarks Glmarks Gumarks
+  syn keyword mpConstant     Gtemplate
+  syn match   mpVariable     /Gmargin\.\%(low\|high\)/
+  " marith
+  syn keyword mpVardef       Mabs Meform Mexp Mexp_str Mlog Mlog_Str Mlog_str
+  syn keyword mpPrimaryDef   Mdiv Mmul
+  syn keyword mpSecondaryDef Madd Msub
+  syn keyword mpTertiaryDef  Mleq
+  syn keyword mpNewInternal  Mten Mzero
+  " sarith
+  syn keyword mpVardef       Sabs Scvnum
+  syn keyword mpPrimaryDef   Sdiv Smul
+  syn keyword mpSecondaryDef Sadd Ssub
+  syn keyword mpTertiaryDef  Sleq Sneq
+  " string
+  syn keyword mpVardef       cspan isdigit loptok
+  " TEX
+  syn keyword mpVardef       TEX TEXPOST TEXPRE
 endif
-if other_mp_macros
-  syn keyword mpMacro circmargin defaultdx defaultdy
-  syn keyword mpMacro boxit boxjoin bpath circleit drawboxed drawboxes
-  syn keyword mpMacro drawunboxed fixpos fixsize pic
-endif
+
+" Up to date as of 23-Sep-2016.
+if get(g:, "mp_metafun_macros", 0)
+  " These keywords have been added manually.
+  syn keyword mpPrimitive runscript
+
+  " The following MetaFun keywords have been extracted automatically from
+  " ConTeXt source code. They include all "public" macros (where a macro is
+  " considered public if and only if it does not start with _, mfun_, mlib_, or
+  " do_, and it does not end with _), all "public" unsaved variables, and all
+  " `let` statements.
+
+  " mp-abck.mpiv
+  syn keyword mpDef          abck_grid_line anchor_box box_found boxfilloptions
+  syn keyword mpDef          boxgridoptions boxlineoptions draw_multi_pars
+  syn keyword mpDef          draw_multi_side draw_multi_side_path freeze_box
+  syn keyword mpDef          initialize_box initialize_box_pos
+  syn keyword mpDef          multi_side_draw_options show_multi_kind
+  syn keyword mpDef          show_multi_pars
+  syn keyword mpVardef       abck_baseline_grid abck_draw_path abck_graphic_grid
+  syn keyword mpVariable     boxdashtype boxfilloffset boxfilltype
+  syn keyword mpVariable     boxgriddirection boxgriddistance boxgridshift
+  syn keyword mpVariable     boxgridtype boxgridwidth boxlineoffset
+  syn keyword mpVariable     boxlineradius boxlinetype boxlinewidth multikind
+  syn keyword mpConstant     context_abck
+  " mp-apos.mpiv
+  syn keyword mpDef          anch_sidebars_draw boxfilloptions boxlineoptions
+  syn keyword mpDef          connect_positions
+  syn keyword mpConstant     context_apos
+  " mp-asnc.mpiv
+  syn keyword mpDef          FlushSyncTasks ProcessSyncTask ResetSyncTasks
+  syn keyword mpDef          SetSyncColor SetSyncThreshold SyncTask
+  syn keyword mpVardef       PrepareSyncTasks SyncBox TheSyncColor
+  syn keyword mpVardef       TheSyncThreshold
+  syn keyword mpVariable     CurrentSyncClass NOfSyncPaths SyncColor
+  syn keyword mpVariable     SyncLeftOffset SyncPaths SyncTasks SyncThreshold
+  syn keyword mpVariable     SyncThresholdMethod SyncWidth
+  syn keyword mpConstant     context_asnc
+  " mp-back.mpiv
+  syn keyword mpDef          some_double_back some_hash
+  syn keyword mpVariable     back_nillcolor
+  syn keyword mpConstant     context_back
+  " mp-bare.mpiv
+  syn keyword mpVardef       colordecimals rawtextext
+  syn keyword mpPrimaryDef   infont
+  syn keyword mpConstant     context_bare
+  " mp-base.mpiv
+  " This is essentially plain.mp with only a few keywords added
+  syn keyword mpNumExp       graypart
+  syn keyword mpType         graycolor greycolor
+  syn keyword mpConstant     cyan magenta yellow
+  " mp-butt.mpiv
+  syn keyword mpDef          predefinedbutton some_button
+  syn keyword mpConstant     context_butt
+  " mp-char.mpiv
+  syn keyword mpDef          flow_begin_chart flow_begin_sub_chart
+  syn keyword mpDef          flow_chart_draw_comment flow_chart_draw_exit
+  syn keyword mpDef          flow_chart_draw_label flow_chart_draw_text
+  syn keyword mpDef          flow_clip_chart flow_collapse_points
+  syn keyword mpDef          flow_connect_bottom_bottom flow_connect_bottom_left
+  syn keyword mpDef          flow_connect_bottom_right flow_connect_bottom_top
+  syn keyword mpDef          flow_connect_left_bottom flow_connect_left_left
+  syn keyword mpDef          flow_connect_left_right flow_connect_left_top
+  syn keyword mpDef          flow_connect_right_bottom flow_connect_right_left
+  syn keyword mpDef          flow_connect_right_right flow_connect_right_top
+  syn keyword mpDef          flow_connect_top_bottom flow_connect_top_left
+  syn keyword mpDef          flow_connect_top_right flow_connect_top_top
+  syn keyword mpDef          flow_draw_connection flow_draw_connection_point
+  syn keyword mpDef          flow_draw_midpoint flow_draw_shape
+  syn keyword mpDef          flow_draw_test_area flow_draw_test_shape
+  syn keyword mpDef          flow_draw_test_shapes flow_end_chart
+  syn keyword mpDef          flow_end_sub_chart flow_flush_connections
+  syn keyword mpDef          flow_flush_picture flow_flush_pictures
+  syn keyword mpDef          flow_flush_shape flow_flush_shapes
+  syn keyword mpDef          flow_initialize_grid flow_new_chart flow_new_shape
+  syn keyword mpDef          flow_scaled_to_grid flow_show_connection
+  syn keyword mpDef          flow_show_connections flow_show_shapes
+  syn keyword mpDef          flow_xy_offset flow_y_pos
+  syn keyword mpVardef       flow_connection_path flow_down_on_grid
+  syn keyword mpVardef       flow_down_to_grid flow_i_point flow_left_on_grid
+  syn keyword mpVardef       flow_left_to_grid flow_offset
+  syn keyword mpVardef       flow_points_initialized flow_right_on_grid
+  syn keyword mpVardef       flow_right_to_grid flow_smooth_connection
+  syn keyword mpVardef       flow_trim_points flow_trimmed flow_up_on_grid
+  syn keyword mpVardef       flow_up_to_grid flow_valid_connection
+  syn keyword mpVardef       flow_x_on_grid flow_xy_bottom flow_xy_left
+  syn keyword mpVardef       flow_xy_on_grid flow_xy_right flow_xy_top
+  syn keyword mpVardef       flow_y_on_grid
+  syn keyword mpVariable     flow_arrowtip flow_chart_background_color
+  syn keyword mpVariable     flow_chart_offset flow_comment_offset
+  syn keyword mpVariable     flow_connection_arrow_size
+  syn keyword mpVariable     flow_connection_dash_size
+  syn keyword mpVariable     flow_connection_line_color
+  syn keyword mpVariable     flow_connection_line_width
+  syn keyword mpVariable     flow_connection_smooth_size flow_connections
+  syn keyword mpVariable     flow_cpath flow_dash_pattern flow_dashline
+  syn keyword mpVariable     flow_exit_offset flow_forcevalid flow_grid_height
+  syn keyword mpVariable     flow_grid_width flow_label_offset flow_max_x
+  syn keyword mpVariable     flow_max_y flow_peepshape flow_reverse_connection
+  syn keyword mpVariable     flow_reverse_y flow_shape_action flow_shape_archive
+  syn keyword mpVariable     flow_shape_decision flow_shape_down
+  syn keyword mpVariable     flow_shape_fill_color flow_shape_height
+  syn keyword mpVariable     flow_shape_left flow_shape_line_color
+  syn keyword mpVariable     flow_shape_line_width flow_shape_loop
+  syn keyword mpVariable     flow_shape_multidocument flow_shape_node
+  syn keyword mpVariable     flow_shape_procedure flow_shape_product
+  syn keyword mpVariable     flow_shape_right flow_shape_singledocument
+  syn keyword mpVariable     flow_shape_subprocedure flow_shape_up
+  syn keyword mpVariable     flow_shape_wait flow_shape_width
+  syn keyword mpVariable     flow_show_all_points flow_show_con_points
+  syn keyword mpVariable     flow_show_mid_points flow_showcrossing flow_smooth
+  syn keyword mpVariable     flow_touchshape flow_xypoint flow_zfactor
+  syn keyword mpConstant     context_flow
+  " mp-chem.mpiv
+  syn keyword mpDef          chem_init_all chem_reset chem_start_structure
+  syn keyword mpDef          chem_transformed
+  syn keyword mpVardef       chem_ad chem_adj chem_align chem_arrow chem_au
+  syn keyword mpVardef       chem_b chem_bb chem_bd chem_bw chem_c chem_cc
+  syn keyword mpVardef       chem_ccd chem_cd chem_crz chem_cz chem_dash chem_db
+  syn keyword mpVardef       chem_diff chem_dir chem_do chem_dr chem_draw
+  syn keyword mpVardef       chem_drawarrow chem_eb chem_ed chem_ep chem_er
+  syn keyword mpVardef       chem_es chem_et chem_fill chem_hb chem_init_some
+  syn keyword mpVardef       chem_label chem_ldb chem_ldd chem_line chem_lr
+  syn keyword mpVardef       chem_lrb chem_lrbd chem_lrd chem_lrh chem_lrn
+  syn keyword mpVardef       chem_lrt chem_lrz chem_lsr chem_lsub chem_mark
+  syn keyword mpVardef       chem_marked chem_mid chem_mids chem_midz chem_mir
+  syn keyword mpVardef       chem_mov chem_move chem_number chem_oe chem_off
+  syn keyword mpVardef       chem_pb chem_pe chem_r chem_r_fragment chem_rb
+  syn keyword mpVardef       chem_rbd chem_rd chem_rdb chem_rdd chem_restore
+  syn keyword mpVardef       chem_rh chem_rm chem_rn chem_rot chem_rr chem_rrb
+  syn keyword mpVardef       chem_rrbd chem_rrd chem_rrh chem_rrn chem_rrt
+  syn keyword mpVardef       chem_rrz chem_rsr chem_rsub chem_rt chem_rz chem_s
+  syn keyword mpVardef       chem_save chem_sb chem_sd chem_set chem_sr chem_ss
+  syn keyword mpVardef       chem_start_component chem_stop_component
+  syn keyword mpVardef       chem_stop_structure chem_sub chem_symbol chem_tb
+  syn keyword mpVardef       chem_text chem_z chem_zln chem_zlt chem_zn chem_zrn
+  syn keyword mpVardef       chem_zrt chem_zt
+  syn keyword mpVariable     chem_mark_pair chem_stack_mirror chem_stack_origin
+  syn keyword mpVariable     chem_stack_p chem_stack_previous
+  syn keyword mpVariable     chem_stack_rotation chem_trace_boundingbox
+  syn keyword mpVariable     chem_trace_nesting chem_trace_text
+  syn keyword mpConstant     context_chem
+  " mp-core.mpiv
+  syn keyword mpDef          FlushSyncTasks ProcessSyncTask
+  syn keyword mpDef          RegisterLocalTextArea RegisterPlainTextArea
+  syn keyword mpDef          RegisterRegionTextArea RegisterTextArea
+  syn keyword mpDef          ResetLocalTextArea ResetSyncTasks ResetTextAreas
+  syn keyword mpDef          SaveTextAreas SetSyncColor SetSyncThreshold
+  syn keyword mpDef          SyncTask anchor_box box_found boxfilloptions
+  syn keyword mpDef          boxgridoptions boxlineoptions collapse_multi_pars
+  syn keyword mpDef          draw_box draw_multi_pars draw_par freeze_box
+  syn keyword mpDef          initialize_area initialize_area_par initialize_box
+  syn keyword mpDef          initialize_box_pos initialize_par
+  syn keyword mpDef          prepare_multi_pars relocate_multipars save_multipar
+  syn keyword mpDef          set_par_line_height show_multi_pars show_par
+  syn keyword mpDef          simplify_multi_pars sort_multi_pars
+  syn keyword mpVardef       InsideSavedTextArea InsideSomeSavedTextArea
+  syn keyword mpVardef       InsideSomeTextArea InsideTextArea PrepareSyncTasks
+  syn keyword mpVardef       SyncBox TextAreaH TextAreaW TextAreaWH TextAreaX
+  syn keyword mpVardef       TextAreaXY TextAreaY TheSyncColor TheSyncThreshold
+  syn keyword mpVardef       baseline_grid graphic_grid multi_par_at_top
+  syn keyword mpVariable     CurrentSyncClass NOfSavedTextAreas
+  syn keyword mpVariable     NOfSavedTextColumns NOfSyncPaths NOfTextAreas
+  syn keyword mpVariable     NOfTextColumns PlainTextArea RegionTextArea
+  syn keyword mpVariable     SavedTextColumns SyncColor SyncLeftOffset SyncPaths
+  syn keyword mpVariable     SyncTasks SyncThreshold SyncThresholdMethod
+  syn keyword mpVariable     SyncWidth TextAreas TextColumns
+  syn keyword mpVariable     auto_multi_par_hsize boxdashtype boxfilloffset
+  syn keyword mpVariable     boxfilltype boxgriddirection boxgriddistance
+  syn keyword mpVariable     boxgridshift boxgridtype boxgridwidth boxlineradius
+  syn keyword mpVariable     boxlinetype boxlinewidth check_multi_par_chain
+  syn keyword mpVariable     compensate_multi_par_topskip
+  syn keyword mpVariable     enable_multi_par_fallback force_multi_par_chain
+  syn keyword mpVariable     ignore_multi_par_page last_multi_par_shift lefthang
+  syn keyword mpVariable     local_multi_par_area multi_column_first_page_hack
+  syn keyword mpVariable     multi_par_pages multiloc multilocs multipar
+  syn keyword mpVariable     multipars multiref multirefs nofmultipars
+  syn keyword mpVariable     obey_multi_par_hang obey_multi_par_more
+  syn keyword mpVariable     one_piece_multi_par par_hang_after par_hang_indent
+  syn keyword mpVariable     par_indent par_left_skip par_line_height
+  syn keyword mpVariable     par_right_skip par_start_pos par_stop_pos
+  syn keyword mpVariable     par_strut_depth par_strut_height ppos righthang
+  syn keyword mpVariable     snap_multi_par_tops somehang span_multi_column_pars
+  syn keyword mpVariable     use_multi_par_region
+  syn keyword mpConstant     context_core
+  syn keyword LET            anchor_area anchor_par draw_area
+  " mp-cows.mpiv
+  syn keyword mpConstant     context_cows cow
+  " mp-crop.mpiv
+  syn keyword mpDef          page_marks_add_color page_marks_add_lines
+  syn keyword mpDef          page_marks_add_marking page_marks_add_number
+  syn keyword mpVardef       crop_color crop_gray crop_marks_cmyk
+  syn keyword mpVardef       crop_marks_cmykrgb crop_marks_gray crop_marks_lines
+  syn keyword mpVariable     crop_colors more page
+  syn keyword mpConstant     context_crop
+  " mp-figs.mpiv
+  syn keyword mpDef          naturalfigure registerfigure
+  syn keyword mpVardef       figuredimensions figureheight figuresize
+  syn keyword mpVardef       figurewidth
+  syn keyword mpConstant     context_figs
+  " mp-fobg.mpiv
+  syn keyword mpDef          DrawFoFrame
+  syn keyword mpVardef       equalpaths
+  syn keyword mpPrimaryDef   inset outset
+  syn keyword mpVariable     FoBackground FoBackgroundColor FoFrame FoLineColor
+  syn keyword mpVariable     FoLineStyle FoLineWidth FoSplit
+  syn keyword mpConstant     FoAll FoBottom FoDash FoDotted FoDouble FoGroove
+  syn keyword mpConstant     FoHidden FoInset FoLeft FoMedium FoNoColor FoNone
+  syn keyword mpConstant     FoOutset FoRidge FoRight FoSolid FoThick FoThin
+  syn keyword mpConstant     FoTop context_fobg
+  " mp-form.mpiv
+  syn keyword mpConstant     context_form
+  " mp-func.mpiv
+  syn keyword mpDef          constructedfunction constructedpairs
+  syn keyword mpDef          constructedpath curvedfunction curvedpairs
+  syn keyword mpDef          curvedpath function pathconnectors straightfunction
+  syn keyword mpDef          straightpairs straightpath
+  syn keyword mpConstant     context_func
+  " mp-grap.mpiv
+  syn keyword mpDef          Gfor OUT auto begingraph circles crosses diamonds
+  syn keyword mpDef          downtriangles endgraph gdata gdraw gdrawarrow
+  syn keyword mpDef          gdrawdblarrow gfill graph_addto
+  syn keyword mpDef          graph_addto_currentpicture graph_comma
+  syn keyword mpDef          graph_coordinate_multiplication graph_draw
+  syn keyword mpDef          graph_draw_label graph_errorbar_text graph_fill
+  syn keyword mpDef          graph_generate_exponents
+  syn keyword mpDef          graph_generate_label_position
+  syn keyword mpDef          graph_generate_numbers graph_label_location
+  syn keyword mpDef          graph_scan_mark graph_scan_marks graph_setbounds
+  syn keyword mpDef          graph_suffix graph_tick_label
+  syn keyword mpDef          graph_with_pen_and_color graph_withlist
+  syn keyword mpDef          graph_xyscale lefttriangles makefunctionpath plot
+  syn keyword mpDef          plotsymbol points rainbow righttriangles smoothpath
+  syn keyword mpDef          squares stars uptriangles witherrorbars
+  syn keyword mpVardef       addtopath augment autogrid constant_fit
+  syn keyword mpVardef       constant_function det escaped_format exp
+  syn keyword mpVardef       exponential_fit exponential_function format
+  syn keyword mpVardef       formatted frame functionpath gaussian_fit
+  syn keyword mpVardef       gaussian_function gdotlabel glabel graph_Feform
+  syn keyword mpVardef       graph_Meform graph_arrowhead_extent graph_bounds
+  syn keyword mpVardef       graph_clear_bounds
+  syn keyword mpVardef       graph_convert_user_path_to_internal graph_cspan
+  syn keyword mpVardef       graph_draw_arrowhead graph_error graph_errorbars
+  syn keyword mpVardef       graph_exp graph_factor_and_exponent_to_string
+  syn keyword mpVardef       graph_gridline_picture graph_is_null
+  syn keyword mpVardef       graph_label_convert_user_to_internal graph_loptok
+  syn keyword mpVardef       graph_match_exponents graph_mlog
+  syn keyword mpVardef       graph_modified_exponent_ypart graph_pair_adjust
+  syn keyword mpVardef       graph_picture_conversion graph_post_draw
+  syn keyword mpVardef       graph_read_line graph_readpath graph_remap
+  syn keyword mpVardef       graph_scan_path graph_select_exponent_mark
+  syn keyword mpVardef       graph_select_mark graph_set_bounds
+  syn keyword mpVardef       graph_set_default_bounds graph_shapesize
+  syn keyword mpVardef       graph_stash_label graph_tick_mark_spacing
+  syn keyword mpVardef       graph_unknown_pair_bbox grid isdigit itick
+  syn keyword mpVardef       linear_fit linear_function ln logten lorentzian_fit
+  syn keyword mpVardef       lorentzian_function otick polynomial_fit
+  syn keyword mpVardef       polynomial_function power_law_fit
+  syn keyword mpVardef       power_law_function powten setcoords setrange
+  syn keyword mpVardef       sortpath strfmt tick varfmt
+  syn keyword mpNewInternal  Mzero doubleinfinity graph_log_minimum
+  syn keyword mpNewInternal  graph_minimum_number_of_marks largestmantissa
+  syn keyword mpNewInternal  linear lntwo log mlogten singleinfinity
+  syn keyword mpVariable     Autoform determinant fit_chi_squared
+  syn keyword mpVariable     graph_errorbar_picture graph_exp_marks
+  syn keyword mpVariable     graph_frame_pair_a graph_frame_pair_b
+  syn keyword mpVariable     graph_lin_marks graph_log_marks graph_modified_bias
+  syn keyword mpVariable     graph_modified_higher graph_modified_lower
+  syn keyword mpVariable     graph_shape r_s resistance_color resistance_name
+  syn keyword mpConstant     context_grap
+  " mp-grid.mpiv
+  syn keyword mpDef          hlingrid hloggrid vlingrid vloggrid
+  syn keyword mpVardef       hlinlabel hlintext hlogtext linlin linlinpath
+  syn keyword mpVardef       linlog linlogpath loglin loglinpath loglog
+  syn keyword mpVardef       loglogpath processpath vlinlabel vlintext vlogtext
+  syn keyword mpVariable     fmt_initialize fmt_pictures fmt_precision
+  syn keyword mpVariable     fmt_separator fmt_zerocheck grid_eps
+  syn keyword mpConstant     context_grid
+  " mp-grph.mpiv
+  syn keyword mpDef          beginfig begingraphictextfig data_mpo_file
+  syn keyword mpDef          data_mpy_file doloadfigure draw endfig
+  syn keyword mpDef          endgraphictextfig fill fixedplace graphictext
+  syn keyword mpDef          loadfigure new_graphictext normalwithshade number
+  syn keyword mpDef          old_graphictext outlinefill protectgraphicmacros
+  syn keyword mpDef          resetfig reversefill withdrawcolor withfillcolor
+  syn keyword mpDef          withshade
+  syn keyword mpVariable     currentgraphictext figureshift
+  syn keyword mpConstant     context_grph
+  " mp-idea.mpiv
+  syn keyword mpVardef       bcomponent ccomponent gcomponent mcomponent
+  syn keyword mpVardef       rcomponent somecolor ycomponent
+  " mp-luas.mpiv
+  syn keyword mpDef          luacall message
+  syn keyword mpVardef       MP lua lualist
+  syn keyword mpConstant     context_luas
+  " mp-mlib.mpiv
+  syn keyword mpDef          autoalign bitmapimage circular_shade cmyk comment
+  syn keyword mpDef          defineshade eofill eofillup externalfigure figure
+  syn keyword mpDef          fillup label linear_shade multitonecolor namedcolor
+  syn keyword mpDef          nofill onlayer passarrayvariable passvariable
+  syn keyword mpDef          plain_label register resolvedcolor scantokens
+  syn keyword mpDef          set_circular_vector set_linear_vector shaded
+  syn keyword mpDef          spotcolor startpassingvariable stoppassingvariable
+  syn keyword mpDef          thelabel transparent[] usemetafunlabels
+  syn keyword mpDef          useplainlabels withcircularshade withlinearshade
+  syn keyword mpDef          withmask withproperties withshadecenter
+  syn keyword mpDef          withshadecolors withshadedirection withshadedomain
+  syn keyword mpDef          withshadefactor withshadefraction withshadeorigin
+  syn keyword mpDef          withshaderadius withshadestep withshadetransform
+  syn keyword mpDef          withshadevector withtransparency
+  syn keyword mpVardef       anchored checkbounds checkedbounds
+  syn keyword mpVardef       define_circular_shade define_linear_shade dotlabel
+  syn keyword mpVardef       escaped_format fmttext fontsize format formatted
+  syn keyword mpVardef       installlabel onetimefmttext onetimetextext
+  syn keyword mpVardef       outlinetext plain_thelabel properties rawfmttext
+  syn keyword mpVardef       rawtexbox rawtextext rule strfmt strut texbox
+  syn keyword mpVardef       textext thefmttext thelabel thetexbox thetextext
+  syn keyword mpVardef       tostring transparency_alternative_to_number
+  syn keyword mpVardef       validtexbox varfmt verbatim
+  syn keyword mpPrimaryDef   asgroup infont normalinfont shadedinto
+  syn keyword mpPrimaryDef   shownshadecenter shownshadedirection
+  syn keyword mpPrimaryDef   shownshadeorigin shownshadevector withshade
+  syn keyword mpPrimaryDef   withshademethod
+  syn keyword mpNewInternal  colorburntransparent colordodgetransparent
+  syn keyword mpNewInternal  colortransparent darkentransparent
+  syn keyword mpNewInternal  differencetransparent exclusiontransparent
+  syn keyword mpNewInternal  hardlighttransparent huetransparent
+  syn keyword mpNewInternal  lightentransparent luminositytransparent
+  syn keyword mpNewInternal  multiplytransparent normaltransparent
+  syn keyword mpNewInternal  overlaytransparent saturationtransparent
+  syn keyword mpNewInternal  screentransparent shadefactor softlighttransparent
+  syn keyword mpNewInternal  textextoffset
+  syn keyword mpType         property transparency
+  syn keyword mpVariable     currentoutlinetext shadeddown shadedleft
+  syn keyword mpVariable     shadedright shadedup shadeoffset trace_shades
+  syn keyword mpConstant     context_mlib
+  " mp-page.mpiv
+  syn keyword mpDef          BoundCoverAreas BoundPageAreas Enlarged FakeRule
+  syn keyword mpDef          FakeWord LoadPageState OverlayBox RuleColor
+  syn keyword mpDef          SetAreaVariables SetPageArea SetPageBackPage
+  syn keyword mpDef          SetPageCoverPage SetPageField SetPageFrontPage
+  syn keyword mpDef          SetPageHsize SetPageHstep SetPageLocation
+  syn keyword mpDef          SetPagePage SetPageSpine SetPageVariables
+  syn keyword mpDef          SetPageVsize SetPageVstep StartCover StartPage
+  syn keyword mpDef          StopCover StopPage SwapPageState innerenlarged
+  syn keyword mpDef          llEnlarged lrEnlarged outerenlarged ulEnlarged
+  syn keyword mpDef          urEnlarged
+  syn keyword mpVardef       BackPageHeight BackPageWidth BackSpace BaseLineSkip
+  syn keyword mpVardef       BodyFontSize BottomDistance BottomHeight
+  syn keyword mpVardef       BottomSpace CoverHeight CoverWidth CurrentColumn
+  syn keyword mpVardef       CurrentHeight CurrentWidth CutSpace EmWidth
+  syn keyword mpVardef       ExHeight FooterDistance FooterHeight
+  syn keyword mpVardef       FrontPageHeight FrontPageWidth HSize HeaderDistance
+  syn keyword mpVardef       HeaderHeight InPageBody InnerEdgeDistance
+  syn keyword mpVardef       InnerEdgeWidth InnerMarginDistance InnerMarginWidth
+  syn keyword mpVardef       InnerSpaceWidth LastPageNumber LayoutColumnDistance
+  syn keyword mpVardef       LayoutColumnWidth LayoutColumns LeftEdgeDistance
+  syn keyword mpVardef       LeftEdgeWidth LeftMarginDistance LeftMarginWidth
+  syn keyword mpVardef       LineHeight MakeupHeight MakeupWidth NOfColumns
+  syn keyword mpVardef       NOfPages OnOddPage OnRightPage OuterEdgeDistance
+  syn keyword mpVardef       OuterEdgeWidth OuterMarginDistance OuterMarginWidth
+  syn keyword mpVardef       OuterSpaceWidth OverlayDepth OverlayHeight
+  syn keyword mpVardef       OverlayLineWidth OverlayOffset OverlayWidth
+  syn keyword mpVardef       PageDepth PageFraction PageNumber PageOffset
+  syn keyword mpVardef       PaperBleed PaperHeight PaperWidth PrintPaperHeight
+  syn keyword mpVardef       PrintPaperWidth RealPageNumber RightEdgeDistance
+  syn keyword mpVardef       RightEdgeWidth RightMarginDistance RightMarginWidth
+  syn keyword mpVardef       SpineHeight SpineWidth StrutDepth StrutHeight
+  syn keyword mpVardef       TextHeight TextWidth TopDistance TopHeight TopSkip
+  syn keyword mpVardef       TopSpace VSize defaultcolormodel
+  syn keyword mpVariable     Area BackPage CoverPage CurrentLayout Field
+  syn keyword mpVariable     FrontPage HorPos Hsize Hstep Location Page
+  syn keyword mpVariable     PageStateAvailable RuleDepth RuleDirection
+  syn keyword mpVariable     RuleFactor RuleH RuleHeight RuleOffset RuleOption
+  syn keyword mpVariable     RuleThickness RuleV RuleWidth Spine VerPos Vsize
+  syn keyword mpVariable     Vstep
+  syn keyword mpConstant     context_page
+  " mp-shap.mpiv
+  syn keyword mpDef          drawline drawshape some_shape
+  syn keyword mpDef          start_predefined_shape_definition
+  syn keyword mpDef          stop_predefined_shape_definition
+  syn keyword mpVardef       drawpredefinedline drawpredefinedshape
+  syn keyword mpVardef       some_shape_path
+  syn keyword mpVariable     predefined_shapes predefined_shapes_xradius
+  syn keyword mpVariable     predefined_shapes_xxradius
+  syn keyword mpVariable     predefined_shapes_yradius
+  syn keyword mpVariable     predefined_shapes_yyradius
+  syn keyword mpConstant     context_shap
+  " mp-step.mpiv
+  syn keyword mpDef          initialize_step_variables midbottomboundary
+  syn keyword mpDef          midtopboundary step_begin_cell step_begin_chart
+  syn keyword mpDef          step_cell_ali step_cell_bot step_cell_top
+  syn keyword mpDef          step_cells step_end_cell step_end_chart
+  syn keyword mpDef          step_text_bot step_text_mid step_text_top
+  syn keyword mpDef          step_texts
+  syn keyword mpVariable     cell_distance_x cell_distance_y cell_fill_color
+  syn keyword mpVariable     cell_line_color cell_line_width cell_offset
+  syn keyword mpVariable     chart_align chart_category chart_vertical
+  syn keyword mpVariable     line_distance line_height line_line_color
+  syn keyword mpVariable     line_line_width line_offset nofcells
+  syn keyword mpVariable     text_distance_set text_fill_color text_line_color
+  syn keyword mpVariable     text_line_width text_offset
+  syn keyword mpConstant     context_cell
+  " mp-symb.mpiv
+  syn keyword mpDef          finishglyph prepareglyph
+  syn keyword mpConstant     lefttriangle midbar onebar righttriangle sidebar
+  syn keyword mpConstant     sublefttriangle subrighttriangle twobar
+  " mp-text.mpiv
+  syn keyword mpDef          build_parshape
+  syn keyword mpVardef       found_point
+  syn keyword mpVariable     trace_parshape
+  syn keyword mpConstant     context_text
+  " mp-tool.mpiv
+  syn keyword mpCommand      dump
+  syn keyword mpDef          addbackground b_color beginglyph break centerarrow
+  syn keyword mpDef          clearxy condition data_mpd_file detaileddraw
+  syn keyword mpDef          detailpaths dowithpath draw drawboundary
+  syn keyword mpDef          drawboundingbox drawcontrollines drawcontrolpoints
+  syn keyword mpDef          drawfill draworigin drawpath drawpathonly
+  syn keyword mpDef          drawpathwithpoints drawpoint drawpointlabels
+  syn keyword mpDef          drawpoints drawticks drawwholepath drawxticks
+  syn keyword mpDef          drawyticks endglyph fill finishsavingdata g_color
+  syn keyword mpDef          inner_boundingbox job_name leftarrow loadmodule
+  syn keyword mpDef          midarrowhead naturalizepaths newboolean newcolor
+  syn keyword mpDef          newnumeric newpair newpath newpicture newstring
+  syn keyword mpDef          newtransform normalcolors normaldraw normalfill
+  syn keyword mpDef          normalwithcolor outer_boundingbox pop_boundingbox
+  syn keyword mpDef          popboundingbox popcurrentpicture push_boundingbox
+  syn keyword mpDef          pushboundingbox pushcurrentpicture r_color readfile
+  syn keyword mpDef          recolor redraw refill register_dirty_chars
+  syn keyword mpDef          remapcolor remapcolors remappedcolor reprocess
+  syn keyword mpDef          resetarrows resetcolormap resetdrawoptions
+  syn keyword mpDef          resolvedcolor restroke retext rightarrow savedata
+  syn keyword mpDef          saveoptions scale_currentpicture set_ahlength
+  syn keyword mpDef          set_grid showgrid startplaincompatibility
+  syn keyword mpDef          startsavingdata stopplaincompatibility
+  syn keyword mpDef          stopsavingdata stripe_path_a stripe_path_n undashed
+  syn keyword mpDef          undrawfill untext visualizeddraw visualizedfill
+  syn keyword mpDef          visualizepaths withcolor withgray
+  syn keyword mpDef          xscale_currentpicture xshifted
+  syn keyword mpDef          xyscale_currentpicture yscale_currentpicture
+  syn keyword mpDef          yshifted
+  syn keyword mpVardef       acos acosh anglebetween area arrowhead
+  syn keyword mpVardef       arrowheadonpath arrowpath asciistring asin asinh
+  syn keyword mpVardef       atan basiccolors bbheight bbwidth bcomponent
+  syn keyword mpVardef       blackcolor bottomboundary boundingbox c_phantom
+  syn keyword mpVardef       ccomponent center cleanstring colorcircle
+  syn keyword mpVardef       colordecimals colordecimalslist colorlike colorpart
+  syn keyword mpVardef       colortype complementary complemented copylist cos
+  syn keyword mpVardef       cosh cot cotd curved ddddecimal dddecimal ddecimal
+  syn keyword mpVardef       decorated drawarrowpath epsed exp freedotlabel
+  syn keyword mpVardef       freelabel gcomponent getunstringed grayed greyed
+  syn keyword mpVardef       hsvtorgb infinite innerboundingbox interpolated inv
+  syn keyword mpVardef       invcos inverted invsin invtan laddered leftboundary
+  syn keyword mpVardef       leftpath leftrightpath listsize listtocurves
+  syn keyword mpVardef       listtolines ln log mcomponent new_on_grid
+  syn keyword mpVardef       outerboundingbox paired pen_size penpoint phantom
+  syn keyword mpVardef       pointarrow pow punked rangepath rcomponent
+  syn keyword mpVardef       redecorated repathed rightboundary rightpath
+  syn keyword mpVardef       rotation roundedsquare set_inner_boundingbox
+  syn keyword mpVardef       set_outer_boundingbox setunstringed shapedlist
+  syn keyword mpVardef       simplified sin sinh sortlist sqr straightpath tan
+  syn keyword mpVardef       tand tanh tensecircle thefreelabel topboundary
+  syn keyword mpVardef       tripled undecorated unitvector unspiked unstringed
+  syn keyword mpVardef       whitecolor ycomponent
+  syn keyword mpPrimaryDef   along blownup bottomenlarged cornered crossed
+  syn keyword mpPrimaryDef   enlarged enlonged leftenlarged llenlarged llmoved
+  syn keyword mpPrimaryDef   lrenlarged lrmoved on paralleled randomized
+  syn keyword mpPrimaryDef   randomizedcontrols randomshifted rightenlarged
+  syn keyword mpPrimaryDef   shortened sized smoothed snapped softened squeezed
+  syn keyword mpPrimaryDef   stretched superellipsed topenlarged ulenlarged
+  syn keyword mpPrimaryDef   ulmoved uncolored urenlarged urmoved xsized
+  syn keyword mpPrimaryDef   xstretched xyscaled xysized ysized ystretched zmod
+  syn keyword mpSecondaryDef anglestriped intersection_point numberstriped
+  syn keyword mpSecondaryDef peepholed
+  syn keyword mpTertiaryDef  cutends
+  syn keyword mpNewInternal  ahdimple ahvariant anglelength anglemethod
+  syn keyword mpNewInternal  angleoffset charscale cmykcolormodel graycolormodel
+  syn keyword mpNewInternal  greycolormodel maxdimensions metapostversion
+  syn keyword mpNewInternal  nocolormodel rgbcolormodel striped_normal_inner
+  syn keyword mpNewInternal  striped_normal_outer striped_reverse_inner
+  syn keyword mpNewInternal  striped_reverse_outer
+  syn keyword mpType         grayscale greyscale quadruplet triplet
+  syn keyword mpVariable     ahfactor collapse_data color_map drawoptionsfactor
+  syn keyword mpVariable     freedotlabelsize freelabeloffset grid grid_full
+  syn keyword mpVariable     grid_h grid_left grid_nx grid_ny grid_w grid_x
+  syn keyword mpVariable     grid_y intersection_found originlength
+  syn keyword mpVariable     plain_compatibility_data pointlabelfont
+  syn keyword mpVariable     pointlabelscale refillbackground savingdata
+  syn keyword mpVariable     savingdatadone swappointlabels ticklength tickstep
+  syn keyword mpConstant     CRLF DQUOTE PERCENT SPACE bcircle context_tool crlf
+  syn keyword mpConstant     darkblue darkcyan darkgray darkgreen darkmagenta
+  syn keyword mpConstant     darkred darkyellow downtriangle dquote freesquare
+  syn keyword mpConstant     fulldiamond fullsquare fulltriangle lcircle
+  syn keyword mpConstant     lefttriangle lightgray llcircle lltriangle lrcircle
+  syn keyword mpConstant     lrtriangle mpversion nocolor noline oddly
+  syn keyword mpConstant     originpath percent rcircle righttriangle space
+  syn keyword mpConstant     tcircle triangle ulcircle ultriangle unitcircle
+  syn keyword mpConstant     unitdiamond unittriangle uptriangle urcircle
+  syn keyword mpConstant     urtriangle
+endif " MetaFun macros
 
 " Define the default highlighting
-" Only when an item doesn't have highlighting yet
-
-hi def link mpTeXinsert	String
-hi def link mpTeXbegin	Statement
-hi def link mpTeXend	Statement
-hi def link mpInternal	mfInternal
-hi def link mpMacro	Macro
-
+hi def link mpTeXdelim     mpPrimitive
+hi def link mpBoolExp      mfBoolExp
+hi def link mpNumExp       mfNumExp
+hi def link mpPairExp      mfPairExp
+hi def link mpPathExp      mfPathExp
+hi def link mpPenExp       mfPenExp
+hi def link mpPicExp       mfPicExp
+hi def link mpStringExp    mfStringExp
+hi def link mpInternal     mfInternal
+hi def link mpCommand      mfCommand
+hi def link mpType         mfType
+hi def link mpPrimitive    mfPrimitive
+hi def link mpDef          mfDef
+hi def link mpVardef       mpDef
+hi def link mpPrimaryDef   mpDef
+hi def link mpSecondaryDef mpDef
+hi def link mpTertiaryDef  mpDef
+hi def link mpNewInternal  mpInternal
+hi def link mpVariable     mfVariable
+hi def link mpConstant     mfConstant
+hi def link mpOnOff        mpPrimitive
+hi def link mpDash         mpPrimitive
 
 let b:current_syntax = "mp"
 
-" vim: ts=8
+let &cpo = s:cpo_sav
+unlet! s:cpo_sav
+
+" vim:sw=2