summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/mp.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/mp.vim')
-rw-r--r--runtime/syntax/mp.vim273
1 files changed, 273 insertions, 0 deletions
diff --git a/runtime/syntax/mp.vim b/runtime/syntax/mp.vim
new file mode 100644
index 0000000..36c07e6
--- /dev/null
+++ b/runtime/syntax/mp.vim
@@ -0,0 +1,273 @@
+vim9script
+
+# Vim syntax file
+# Language: MetaPost
+# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+# Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
+# Latest Revision: 2022 Aug 12
+
+if exists("b:current_syntax")
+ finish
+endif
+
+# Deprecation warnings: to be removed eventually
+if exists("g:plain_mp_macros")
+ echomsg "[mp] g:plain_mp_macros is deprecated: use g:mp_plain_macros instead."
+endif
+if exists("mfplain_mp_macros")
+ echomsg "[mp] g:mfplain_mp_macros is deprecated: use g:mp_mfplain_macros instead."
+endif
+if exists("other_mp_macros")
+ echomsg "[mp] g:other_mp_macros is deprecated: use g:mp_other_macros instead."
+endif
+
+# Store the current values of METAFONT global options
+const mf_plain_macros = get(g:, "mf_plain_macros", get(g:, "plain_mf_macros", -1))
+const mf_plain_modes = get(g:, "mf_plain_modes", get(g:, "plain_mf_modes", -1))
+const mf_other_macros = get(g:, "mf_other_macros", get(g:, "other_mf_macros", -1))
+
+g:mf_plain_macros = 0 # plain.mf has no special meaning for MetaPost
+g:mf_plain_modes = 0 # No METAFONT modes
+g:mf_other_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
+
+# Restore the value of existing global variables
+if mf_plain_macros == -1
+ unlet g:mf_plain_macros
+else
+ g:plain_mf_macros = mf_plain_macros
+endif
+if mf_plain_modes == -1
+ unlet g:mf_plain_modes
+else
+ g:mf_plain_modes = mf_plain_modes
+endif
+if mf_other_macros == -1
+ unlet g:mf_other_macros
+else
+ g:mf_other_macros = mf_other_macros
+endif
+
+# 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 matchgroup=mpTeXdelim start=/\<verbatimtex\>\|\<btex\>/ end=/\<etex\>/ keepend contains=@MPTeX,mpTeXdelim
+
+# 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
+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 get(g:, "mp_plain_macros", get(g:, "plain_mp_macros", 1)) || get(b:, "mp_metafun", get(g:, "mp_metafun", 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 keyword mpVariable laboff labxf labyf laboff labxf labyf
+ syn match mpVariable /\.\%(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 get(g:, "mp_mfplain_macros", 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 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 all base macro packages:
+# - (r)boxes.mp
+# - format.mp
+# - graph.mp
+# - marith.mp
+# - sarith.mp
+# - string.mp
+# - TEX.mp
+if get(g:, "mp_other_macros", 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 get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
+ # MetaFun additions to MetaPost base file
+ syn keyword mpConstant cyan magenta yellow
+ syn keyword mpConstant penspec
+ syn keyword mpNumExp graypart greycolor graycolor
+
+ # Highlight TeX keywords (for MetaPost embedded in ConTeXt documents)
+ syn match mpTeXKeyword '\\[a-zA-Z@]\+'
+
+ syn keyword mpPrimitive runscript
+
+ runtime! syntax/shared/context-data-metafun.vim
+
+ hi def link metafunCommands Statement
+ hi def link metafunInternals Identifier
+endif
+
+# Define the default highlighting
+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
+hi def link mpTeXKeyword Identifier
+
+b:current_syntax = "mp"
+
+# vim: sw=2 fdm=marker