diff options
Diffstat (limited to 'runtime/syntax/mp.vim')
-rw-r--r-- | runtime/syntax/mp.vim | 273 |
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 |